diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/JsonCounterLogger.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/JsonCounterLogger.cs index fd4d9ab511f..7e0eb3b68f5 100644 --- a/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/JsonCounterLogger.cs +++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/JsonCounterLogger.cs @@ -47,22 +47,22 @@ protected override async Task SerializeAsync(ICounterPayload counter) return; } - if (counter is PercentilePayload percentilePayload) + if (counter is AggregatePercentilePayload aggregatePercentilePayload) { - if (!percentilePayload.Quantiles.Any()) + if (!aggregatePercentilePayload.Quantiles.Any()) { return; } await _stream.WriteAsync(JsonSequenceRecordSeparator); _bufferWriter.Clear(); - for (int i = 0; i < percentilePayload.Quantiles.Length; i++) + for (int i = 0; i < aggregatePercentilePayload.Quantiles.Length; i++) { if (i > 0) { _bufferWriter.Write(JsonSequenceRecordSeparator.Span); } - Quantile quantile = percentilePayload.Quantiles[i]; + Quantile quantile = aggregatePercentilePayload.Quantiles[i]; SerializeCounterValues(counter.Timestamp, counter.Provider, @@ -73,7 +73,7 @@ protected override async Task SerializeAsync(ICounterPayload counter) CounterUtilities.AppendPercentile(counter.Metadata, quantile.Percentage), quantile.Value); - if (i < percentilePayload.Quantiles.Length - 1) + if (i < aggregatePercentilePayload.Quantiles.Length - 1) { _bufferWriter.Write(NewLineSeparator.Span); } diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/MetricsStore.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/MetricsStore.cs index acb0ca8bebe..5a3f6b03f5f 100644 --- a/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/MetricsStore.cs +++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/Metrics/MetricsStore.cs @@ -64,7 +64,7 @@ public MetricsStore(ILogger logger, int maxMetricCount) public void AddMetric(ICounterPayload metric) { - if (metric is PercentilePayload payload && !payload.Quantiles.Any()) + if (metric is AggregatePercentilePayload payload && !payload.Quantiles.Any()) { // If histogram data is not generated in the monitored app, we can get Histogram events that do not contain quantiles. // For now, we will ignore these events. @@ -106,7 +106,7 @@ public void AddMetric(ICounterPayload metric) } // CONSIDER We only keep 1 histogram representation per snapshot. Is it meaningful for Prometheus to see previous histograms? These are not timestamped. - if ((metrics.Count > 1) && (metric is PercentilePayload)) + if ((metrics.Count > 1) && (metric is AggregatePercentilePayload)) { metrics.Dequeue(); } @@ -138,10 +138,10 @@ public async Task SnapshotMetrics(Stream outputStream, CancellationToken token) foreach (var metric in metricGroup.Value) { - if (metric is PercentilePayload percentilePayload) + if (metric is AggregatePercentilePayload aggregatePayload) { // Summary quantiles must appear from smallest to largest - foreach (Quantile quantile in percentilePayload.Quantiles.OrderBy(q => q.Percentage)) + foreach (Quantile quantile in aggregatePayload.Quantiles.OrderBy(q => q.Percentage)) { string metricValue = PrometheusDataModel.GetPrometheusNormalizedValue(metric.Unit, quantile.Value); string metricLabels = GetMetricLabels(metric, quantile.Percentage); @@ -226,7 +226,7 @@ private static async Task WriteMetricDetails( await writer.WriteAsync("{" + metricLabels + "}"); } - string lineSuffix = metric is PercentilePayload ? string.Empty : FormattableString.Invariant($" {new DateTimeOffset(metric.Timestamp).ToUnixTimeMilliseconds()}"); + string lineSuffix = metric is AggregatePercentilePayload ? string.Empty : FormattableString.Invariant($" {new DateTimeOffset(metric.Timestamp).ToUnixTimeMilliseconds()}"); await writer.WriteLineAsync(FormattableString.Invariant($" {metricValue}{lineSuffix}")); } diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/LiveMetricsTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/LiveMetricsTests.cs index 4b9ca161d72..393530c7c49 100644 --- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/LiveMetricsTests.cs +++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/LiveMetricsTests.cs @@ -187,7 +187,9 @@ await ScenarioRunner.SingleTarget( // will fail and will need to be updated. Regex regex = new Regex(@"\bPercentile=(50|95|99)"); - for (int index = 0; index < actualMeterNames.Count; ++index) + int startingIndex = instrumentNamesP1.Length + instrumentNamesP2.Length; // Accounts for empty InstrumentStarted payloads + + for (int index = startingIndex; index < actualMeterNames.Count; ++index) { if (actualInstrumentNames[index] == Constants.HistogramName1) { diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/MetricsFormattingTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/MetricsFormattingTests.cs index 85cdf0febd3..4bbcc8972c9 100644 --- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/MetricsFormattingTests.cs +++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/MetricsFormattingTests.cs @@ -44,8 +44,8 @@ public async Task HistogramFormat_Test() { List payload = new(); - payload.Add(new PercentilePayload(MeterName, InstrumentName, "DisplayName", string.Empty, string.Empty, - new Quantile[] { new(0.5, Value1), new(0.95, Value2), new(0.99, Value3) }, + payload.Add(new AggregatePercentilePayload(MeterName, InstrumentName, "DisplayName", string.Empty, string.Empty, + new Quantile[] { new Quantile(0.5, Value1), new Quantile(0.95, Value2), new Quantile(0.99, Value3) }, Timestamp)); using MemoryStream stream = await GetMetrics(payload);