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); }