Пример #1
0
            // ReSharper disable once SuggestBaseTypeForParameter
            public void ReportTimeIntervals(DateTime now, IntervalsBreakdown item)
            {
                var currentEpoch = GetEpoch(now.Ticks);

                var intervalsToFill         = item.Intervals;
                var numberOfIntervalsToFill = intervalsToFill.Length;

                var totalDuration     = 0L;
                var totalMeasurements = 0;

                rwl.EnterReadLock();
                try
                {
                    var epoch = currentEpoch - delayedIntervals;

                    for (var i = 0; i < numberOfIntervalsToFill; i++)
                    {
                        var epochIndex = epoch % size;
                        var interval   = intervals[epochIndex];

                        intervalsToFill[i] = new TimeInterval
                        {
                            IntervalStart = GetDateTime(epoch)
                        };

                        // the interval might contain data from the right epoch, or epochs before that have the same index
                        // we calculate data only if that's the right epoch
                        if (interval.Epoch == epoch)
                        {
                            intervalsToFill[i].TotalValue        = interval.TotalTime;
                            intervalsToFill[i].TotalMeasurements = interval.TotalMeasurements;

                            totalDuration     += interval.TotalTime;
                            totalMeasurements += interval.TotalMeasurements;
                        }

                        epoch -= 1;
                    }
                }
                finally
                {
                    rwl.ExitReadLock();
                }

                item.TotalValue        = totalDuration;
                item.TotalMeasurements = totalMeasurements;
            }
Пример #2
0
        public IntervalsBreakdown[] GetIntervals(DateTime now)
        {
            var result = new List <IntervalsBreakdown>();

            foreach (var interval in intervals)
            {
                var breakdownId = interval.Key;
                var measurement = interval.Value;

                var item = new IntervalsBreakdown
                {
                    Id        = breakdownId,
                    Intervals = new TimeInterval[numberOfIntervals]
                };

                measurement.ReportTimeIntervals(now, item);
                result.Add(item);
            }

            return(result.ToArray());
        }