Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -64,20 +64,20 @@ public MetricSourceConfiguration(float metricIntervalSeconds, IEnumerable<Metric

if (meterProviders.Any())
{
const long TimeSeriesValues = 0x2;
const long TimeSeriesValuesEventKeyword = 0x2;
string metrics = string.Join(',', meterProviders.Select(p => p.Provider));

SessionId = Guid.NewGuid().ToString();

EventPipeProvider metricsEventSourceProvider =
new EventPipeProvider("System.Diagnostics.Metrics", EventLevel.Informational, TimeSeriesValues,
new EventPipeProvider(MonitoringSourceConfiguration.SystemDiagnosticsMetricsProviderName, EventLevel.Informational, TimeSeriesValuesEventKeyword,
new Dictionary<string, string>()
{
{ "SessionId", SessionId },
{ "Metrics", metrics },
{ "RefreshInterval", metricIntervalSeconds.ToString(CultureInfo.InvariantCulture) },
{ "MaxTimeSeries", maxTimeSeries.ToString() },
{ "MaxHistograms", maxHistograms.ToString() }
{ "MaxTimeSeries", maxTimeSeries.ToString(CultureInfo.InvariantCulture) },
{ "MaxHistograms", maxHistograms.ToString(CultureInfo.InvariantCulture) }
}
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public abstract class MonitoringSourceConfiguration
public const string TplEventSource = "System.Threading.Tasks.TplEventSource";
public const string SampleProfilerProviderName = "Microsoft-DotNETCore-SampleProfiler";
public const string EventPipeProviderName = "Microsoft-DotNETCore-EventPipe";
public const string SystemDiagnosticsMetricsProviderName = "System.Diagnostics.Metrics";

public static IEnumerable<string> DefaultMetricProviders => new[] { SystemRuntimeEventSourceName, MicrosoftAspNetCoreHostingEventSourceName, GrpcAspNetCoreServer };

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,13 @@ public RatePayload(string providerName, string name, string displayName, string

internal class PercentilePayload : CounterPayload
{
public PercentilePayload(string providerName, string name, string displayName, string displayUnits, string metadata, IEnumerable<(double quantile, double value)> quantiles, DateTime timestamp) :
public PercentilePayload(string providerName, string name, string displayName, string displayUnits, string metadata, IEnumerable<Quantile> quantiles, DateTime timestamp) :
base(providerName, name, displayName, displayUnits, metadata, 0.0, timestamp, "Metric", EventType.Histogram)
{
// In case these properties are not provided, set them to appropriate values.
string counterName = string.IsNullOrEmpty(displayName) ? name : displayName;
DisplayName = !string.IsNullOrEmpty(displayUnits) ? $"{counterName} ({displayUnits})" : counterName;
Quantiles = quantiles.Select(v => new Quantile(v.quantile, v.value)).ToArray();
Quantiles = quantiles.ToArray();
}

public Quantile[] Quantiles { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,5 @@ public static IDictionary<string, string> GetMetadata(string metadataPayload, ch

private static string AppendPercentile(string tags, string percentile) => string.IsNullOrEmpty(tags) ? percentile : string.Concat(tags, ",", percentile);
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@

namespace Microsoft.Diagnostics.Monitoring.EventPipe
{
internal class CounterPipeline : EventSourcePipeline<CounterPipelineSettings>
internal class MetricsPipeline : EventSourcePipeline<MetricsPipelineSettings>
{
private readonly IEnumerable<ICountersLogger> _loggers;
private readonly CounterFilter _filter;
private string _sessionId;

public CounterPipeline(DiagnosticsClient client,
CounterPipelineSettings settings,
public MetricsPipeline(DiagnosticsClient client,
MetricsPipelineSettings settings,
IEnumerable<ICountersLogger> loggers) : base(client, settings)
{
_loggers = loggers ?? throw new ArgumentNullException(nameof(loggers));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Microsoft.Diagnostics.Monitoring.EventPipe
{
internal class CounterPipelineSettings : EventSourcePipelineSettings
internal class MetricsPipelineSettings : EventSourcePipelineSettings
{
public EventPipeCounterGroup[] CounterGroups { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Microsoft.Diagnostics.Tracing;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;

namespace Microsoft.Diagnostics.Monitoring.EventPipe
Expand Down Expand Up @@ -72,7 +73,7 @@ public static bool TryGetCounterPayload(this TraceEvent traceEvent, CounterFilte
return true;
}

if (sessionId != null && "System.Diagnostics.Metrics".Equals(traceEvent.ProviderName))
if (sessionId != null && MonitoringSourceConfiguration.SystemDiagnosticsMetricsProviderName.Equals(traceEvent.ProviderName))
{
if (traceEvent.EventName == "BeginInstrumentReporting")
{
Expand Down Expand Up @@ -142,7 +143,7 @@ private static void HandleGauge(TraceEvent obj, CounterFilter filter, string ses
}

// the value might be an empty string indicating no measurement was provided this collection interval
if (double.TryParse(lastValueText, out double lastValue))
if (double.TryParse(lastValueText, NumberStyles.Number | NumberStyles.Float, CultureInfo.InvariantCulture, out double lastValue))
{
payload = new GaugePayload(meterName, instrumentName, null, unit, tags, lastValue, obj.TimeStamp);
}
Expand Down Expand Up @@ -177,7 +178,7 @@ private static void HandleCounterRate(TraceEvent traceEvent, CounterFilter filte
return;
}

if (double.TryParse(rateText, out double rate))
if (double.TryParse(rateText, NumberStyles.Number | NumberStyles.Float, CultureInfo.InvariantCulture, out double rate))
{
payload = new RatePayload(meterName, instrumentName, null, unit, tags, rate, filter.IntervalSeconds, traceEvent.TimeStamp);
}
Expand Down Expand Up @@ -211,12 +212,8 @@ private static void HandleHistogram(TraceEvent obj, CounterFilter filter, string
return;
}

if (string.IsNullOrEmpty(quantilesText))
{
return;
}

IList<(double, double)> quantiles = ParseQuantiles(quantilesText);
//Note quantiles can be empty.
IList<Quantile> quantiles = ParseQuantiles(quantilesText);
payload = new PercentilePayload(meterName, instrumentName, null, unit, tags, quantiles, obj.TimeStamp);
}

Expand Down Expand Up @@ -308,10 +305,10 @@ private static void HandleObservableInstrumentCallbackError(TraceEvent obj, stri
payload = new ErrorPayload(errorMessage, obj.TimeStamp);
}

private static IList<(double, double)> ParseQuantiles(string quantileList)
private static IList<Quantile> ParseQuantiles(string quantileList)
{
string[] quantileParts = quantileList.Split(';', StringSplitOptions.RemoveEmptyEntries);
var quantiles = new List<(double, double)>();
var quantiles = new List<Quantile>();
foreach (string quantile in quantileParts)
{
string[] keyValParts = quantile.Split('=', StringSplitOptions.RemoveEmptyEntries);
Expand All @@ -327,7 +324,7 @@ private static void HandleObservableInstrumentCallbackError(TraceEvent obj, stri
{
continue;
}
quantiles.Add((key, val));
quantiles.Add(new Quantile(key, val));
}
return quantiles;
}
Expand Down
1 change: 1 addition & 0 deletions src/Tools/dotnet-counters/CounterMonitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ private void HandleCounterRate(TraceEvent obj)
CounterPayload payload = new RatePayload(meterName, instrumentName, null, unit, tags, rate, _interval, obj.TimeStamp);
_renderer.CounterPayloadReceived(payload, _pauseCmdSet);
}

}

private void HandleGauge(TraceEvent obj)
Expand Down