From 55ec7fc179fb83a666904b20fa8d20590a88dcd6 Mon Sep 17 00:00:00 2001 From: Tarek Mahmoud Sayed Date: Thu, 20 Jun 2024 18:36:39 -0700 Subject: [PATCH] Misc Metrics Fixes --- .../src/Metrics/DefaultMeterFactory.cs | 5 ++-- .../Diagnostics/Metrics/Instrument.netfx.cs | 2 +- .../tests/MetricsTests.cs | 23 +++++++++++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/libraries/Microsoft.Extensions.Diagnostics/src/Metrics/DefaultMeterFactory.cs b/src/libraries/Microsoft.Extensions.Diagnostics/src/Metrics/DefaultMeterFactory.cs index ca1ca5f7802e4e..3adb0b1a795739 100644 --- a/src/libraries/Microsoft.Extensions.Diagnostics/src/Metrics/DefaultMeterFactory.cs +++ b/src/libraries/Microsoft.Extensions.Diagnostics/src/Metrics/DefaultMeterFactory.cs @@ -55,7 +55,7 @@ public Meter Create(MeterOptions options) object? scope = options.Scope; options.Scope = this; - FactoryMeter m = new FactoryMeter(options.Name, options.Version, options.Tags, scope: this); + FactoryMeter m = new FactoryMeter(options); options.Scope = scope; meterList.Add(m); @@ -89,8 +89,7 @@ public void Dispose() internal sealed class FactoryMeter : Meter { - public FactoryMeter(string name, string? version, IEnumerable>? tags, object? scope) - : base(name, version, tags, scope) + public FactoryMeter(MeterOptions options) : base(options) { } diff --git a/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/Metrics/Instrument.netfx.cs b/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/Metrics/Instrument.netfx.cs index f4588625ce0fac..c5dc8ea09d3841 100644 --- a/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/Metrics/Instrument.netfx.cs +++ b/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/Metrics/Instrument.netfx.cs @@ -93,7 +93,7 @@ protected void RecordMeasurement(T measurement, in TagList tagList) case 3: tags[2] = tagList.Tag3; goto case 2; case 2: tags[1] = tagList.Tag2; goto case 1; case 1: tags[0] = tagList.Tag1; break; - case 0: return; // no need to report anything + case 0: break; default: Debug.Assert(false); return; diff --git a/src/libraries/System.Diagnostics.DiagnosticSource/tests/MetricsTests.cs b/src/libraries/System.Diagnostics.DiagnosticSource/tests/MetricsTests.cs index 667c3eaf87245f..7909760993e1a4 100644 --- a/src/libraries/System.Diagnostics.DiagnosticSource/tests/MetricsTests.cs +++ b/src/libraries/System.Diagnostics.DiagnosticSource/tests/MetricsTests.cs @@ -1707,6 +1707,29 @@ public void TestHistogramCreationWithAdvice() }).Dispose(); } + [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] + public void TestRecordingWithEmptyTagList() + { + RemoteExecutor.Invoke(() => + { + using MeterListener meterListener = new MeterListener(); + using Meter meter = new Meter("demo"); + + int count = 0; + + Counter counter = meter.CreateCounter("counter"); + meterListener.SetMeasurementEventCallback((instrument, measurement, tags,state) => count += measurement); + meterListener.EnableMeasurementEvents(counter); + + counter.Add(1); + counter.Add(1, new TagList()); + counter.Add(1, Array.Empty>()); + counter.Add(1, new TagList(Array.Empty>())); + + Assert.Equal(4, count); + }).Dispose(); + } + private void PublishCounterMeasurement(Counter counter, T value, KeyValuePair[] tags) where T : struct { switch (tags.Length)