diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterFilter.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterFilter.cs index 9ad08494d4..c065514796 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterFilter.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterFilter.cs @@ -38,6 +38,8 @@ public void AddFilter(string providerName, string[] counters) public IEnumerable GetProviders() => _enabledCounters.Keys; + public int IntervalSeconds => _intervalMilliseconds / 1000; + public bool IsIncluded(string providerName, string counterName, int intervalMilliseconds) { if (_intervalMilliseconds != intervalMilliseconds) diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventCounterPipeline.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPipeline.cs similarity index 94% rename from src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventCounterPipeline.cs rename to src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPipeline.cs index b6a175e0a0..76c81143d6 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventCounterPipeline.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPipeline.cs @@ -11,14 +11,14 @@ namespace Microsoft.Diagnostics.Monitoring.EventPipe { - internal class EventCounterPipeline : EventSourcePipeline + internal class CounterPipeline : EventSourcePipeline { private readonly IEnumerable _loggers; private readonly CounterFilter _filter; private string _sessionId; - public EventCounterPipeline(DiagnosticsClient client, - EventPipeCounterPipelineSettings settings, + public CounterPipeline(DiagnosticsClient client, + CounterPipelineSettings settings, IEnumerable loggers) : base(client, settings) { _loggers = loggers ?? throw new ArgumentNullException(nameof(loggers)); diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventPipeCounterPipelineSettings.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPipelineSettings.cs similarity index 91% rename from src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventPipeCounterPipelineSettings.cs rename to src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPipelineSettings.cs index 9aa3855634..51ce90dbfd 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventPipeCounterPipelineSettings.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPipelineSettings.cs @@ -8,7 +8,7 @@ namespace Microsoft.Diagnostics.Monitoring.EventPipe { - internal class EventPipeCounterPipelineSettings : EventSourcePipelineSettings + internal class CounterPipelineSettings : EventSourcePipelineSettings { public EventPipeCounterGroup[] CounterGroups { get; set; } diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs index 86c5b2fd80..d4fec2e295 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs @@ -191,9 +191,14 @@ private static void HandleCounterRate(TraceEvent traceEvent, CounterFilter filte string tags = (string)traceEvent.PayloadValue(5); string rateText = (string)traceEvent.PayloadValue(6); + if (!filter.IsIncluded(meterName, instrumentName)) + { + return; + } + if (double.TryParse(rateText, out double rate)) { - payload = new RatePayload(meterName, instrumentName, null, unit, tags, rate, 10, traceEvent.TimeStamp); + payload = new RatePayload(meterName, instrumentName, null, unit, tags, rate, filter.IntervalSeconds, traceEvent.TimeStamp); } } diff --git a/src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventCounterPipelineUnitTests.cs b/src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventCounterPipelineUnitTests.cs index 95abce2c06..5b20262333 100644 --- a/src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventCounterPipelineUnitTests.cs +++ b/src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventCounterPipelineUnitTests.cs @@ -99,7 +99,7 @@ public async Task TestCounterEventPipeline(TestConfiguration config) { var client = new DiagnosticsClient(testRunner.Pid); - await using EventCounterPipeline pipeline = new EventCounterPipeline(client, new EventPipeCounterPipelineSettings + await using CounterPipeline pipeline = new CounterPipeline(client, new CounterPipelineSettings { Duration = Timeout.InfiniteTimeSpan, CounterGroups = new[]