Пример #1
0
        public IEnumerable <MetricEvent> Aggregate(DateTimeOffset timestamp)
        {
            if (lastEvent == null || !buckets.Any())
            {
                return(Enumerable.Empty <MetricEvent>());
            }

            var result = new List <MetricEvent>();
            var tags   = lastEvent.Tags;

            var quantiles     = lastEvent.AggregationParameters.GetQuantiles() ?? Quantiles.DefaultQuantiles;
            var sortedBuckets = buckets.OrderBy(b => b.Key.LowerBound).ToList();

            var quantileTags = Quantiles.QuantileTags(quantiles, tags);

            for (var i = 0; i < quantiles.Length; i++)
            {
                var value = GetQuantile(sortedBuckets, quantiles[i]);
                result.Add(new MetricEvent(value, quantileTags[i], timestamp, lastEvent.Unit, null, null));
            }

            var totalCount = sortedBuckets.Sum(x => x.Value);
            var countTags  = tags.Append(WellKnownTagKeys.Aggregate, WellKnownTagValues.AggregateCount);

            result.Add(new MetricEvent(totalCount, countTags, timestamp, null, null, null));

            return(result);
        }