diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPayload.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPayload.cs index fc9f8a9485..28e811b0b6 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPayload.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/CounterPayload.cs @@ -71,7 +71,6 @@ public CounterPayload(string providerName, string name, string displayName, stri public IReadOnlyDictionary Metadata { get; } public EventType EventType { get; set; } - } public class GaugePayload : CounterPayload diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventCounterPipeline.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventCounterPipeline.cs index 280c552f58..baa5228562 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventCounterPipeline.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/EventCounterPipeline.cs @@ -56,7 +56,12 @@ protected override async Task OnEventSourceAvailable(EventPipeEventSource eventS { if (traceEvent.TryGetCounterPayload(_filter, _sessionId, out List counterPayload)) { - ExecuteCounterLoggerAction((metricLogger) => metricLogger.Log(counterPayload)); + ExecuteCounterLoggerAction((metricLogger) => { + foreach (var payload in counterPayload) + { + metricLogger.Log(payload); + } + }); } } catch (Exception) diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/ICountersLogger.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/ICountersLogger.cs index b0ddf1f753..7348735888 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/ICountersLogger.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/ICountersLogger.cs @@ -2,19 +2,13 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - namespace Microsoft.Diagnostics.Monitoring.EventPipe { internal interface ICountersLogger { //TODO Consider making these async. - void Log(List counter); + void Log(ICounterPayload counter); void PipelineStarted(); void PipelineStopped(); } diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs index 96c531f3e7..75133b5f5c 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Counters/TraceEventExtensions.cs @@ -74,7 +74,6 @@ public static bool TryGetCounterPayload(this TraceEvent traceEvent, CounterFilte if (sessionId != null && "System.Diagnostics.Metrics".Equals(traceEvent.ProviderName)) { - ICounterPayload individualPayload = null; if (traceEvent.EventName == "BeginInstrumentReporting") @@ -126,9 +125,13 @@ public static bool TryGetCounterPayload(this TraceEvent traceEvent, CounterFilte return false; } - public static bool TryGetCounterPayload(this TraceEvent traceEvent, CounterFilter filter, out List payload) + public static bool TryGetIndividualCounterPayload(this TraceEvent traceEvent, CounterFilter filter, out ICounterPayload payload) { - return TryGetCounterPayload(traceEvent, filter, null, out payload); + bool gotCounterPayload = TryGetCounterPayload(traceEvent, filter, null, out List payloadsList); + + payload = payloadsList.FirstOrDefault(); + + return gotCounterPayload; } private static void HandleGauge(TraceEvent obj, CounterFilter filter, string sessionId, out ICounterPayload payload) @@ -307,7 +310,6 @@ private static void HandleObservableInstrumentCallbackError(TraceEvent obj, stri payload = new ErrorPayload(string.Empty, string.Empty, string.Empty, string.Empty, new(), 0, obj.TimeStamp, errorMessage); } - //The metadata payload is formatted as a string of comma separated key:value pairs. //This limitation means that metadata values cannot include commas; otherwise, the //metadata will be parsed incorrectly. If a value contains a comma, then all metadata diff --git a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Triggers/EventCounter/EventCounterTrigger.cs b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Triggers/EventCounter/EventCounterTrigger.cs index 51fd9f3de8..bdbe92591c 100644 --- a/src/Microsoft.Diagnostics.Monitoring.EventPipe/Triggers/EventCounter/EventCounterTrigger.cs +++ b/src/Microsoft.Diagnostics.Monitoring.EventPipe/Triggers/EventCounter/EventCounterTrigger.cs @@ -59,9 +59,9 @@ public IReadOnlyDictionary> GetProviderEvent public bool HasSatisfiedCondition(TraceEvent traceEvent) { // Filter to the counter of interest before forwarding to the implementation - if (traceEvent.TryGetCounterPayload(_filter, out List payload)) + if (traceEvent.TryGetIndividualCounterPayload(_filter, out ICounterPayload payload)) { - return _impl.HasSatisfiedCondition(payload[0]); // Need to check if this is safe - in theory just want the first (and only) result + return _impl.HasSatisfiedCondition(payload); } return false; }