Esempio n. 1
0
 public DurationMeasurement(IoMeterBuffer parent, IoMetrics.MeterType type, long size)
 {
     Parent = parent;
     _type  = type;
     Size   = size;
     _start = DateTime.UtcNow;
 }
Esempio n. 2
0
 public DurationMeasurement(IoMeterBuffer parent, IoMetrics.MeterType type, long size, long fileSize, Action <MeterItem> onFileChange)
 {
     Parent         = parent;
     Type           = type;
     Size           = size;
     FileSize       = fileSize;
     Start          = DateTime.UtcNow;
     End            = default(DateTime);
     OnFileChange   = onFileChange;
     CompressedSize = 0;
     Acceleration   = 1;
 }
Esempio n. 3
0
        internal void Mark(long size, DateTime start, DateTime end, IoMetrics.MeterType type)
        {
            var meterItem = new MeterItem
            {
                Start = start,
                Size  = size,
                Type  = type,
                End   = end
            };

            var pos          = Interlocked.Increment(ref _bufferPos);
            var adjustedTail = pos % _buffer.Length;

            if (Interlocked.CompareExchange(ref _buffer[adjustedTail], meterItem, null) == null)
            {
                return;
            }

            var newSummary = new SummerizedItem
            {
                TotalTimeStart = meterItem.Start,
                TotalTimeEnd   = meterItem.End,
                Count          = 1,
                MaxTime        = meterItem.Duration,
                MinTime        = meterItem.Duration,
                TotalTime      = meterItem.Duration,
                TotalSize      = meterItem.Size,
                Type           = meterItem.Type
            };

            for (int i = 0; i < _buffer.Length; i++)
            {
                var oldVal = Interlocked.Exchange(ref _buffer[(adjustedTail + i) % _buffer.Length], null);
                if (oldVal != null)
                {
                    newSummary.TotalTimeStart = newSummary.TotalTimeStart > oldVal.Start ? oldVal.Start : newSummary.TotalTimeStart;
                    newSummary.TotalTimeEnd   = newSummary.TotalTimeEnd > oldVal.End ? newSummary.TotalTimeEnd : oldVal.End;
                    newSummary.Count++;
                    newSummary.MaxTime    = newSummary.MaxTime > oldVal.Duration ? newSummary.MaxTime : oldVal.Duration;
                    newSummary.MinTime    = newSummary.MinTime > oldVal.Duration ? oldVal.Duration : newSummary.MinTime;
                    newSummary.TotalSize += oldVal.Size;
                    newSummary.TotalTime += oldVal.Duration;
                }
            }
            var increment = Interlocked.Increment(ref _summerizedPos);

            _summerizedBuffer[increment % _summerizedBuffer.Length] = newSummary;
        }