-
Notifications
You must be signed in to change notification settings - Fork 384
PR feedback #3608
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PR feedback #3608
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -13,70 +13,85 @@ | |
|
|
||
| namespace Microsoft.Diagnostics.Monitoring.EventPipe | ||
| { | ||
| [Flags] | ||
| public enum MetricType | ||
| { | ||
| EventCounter = 0x1, | ||
| Meter = 0x2 | ||
| } | ||
|
|
||
| public sealed class MetricEventPipeProvider | ||
| { | ||
| public string Provider { get; set; } | ||
|
|
||
| public float IntervalSeconds { get; set; } | ||
|
|
||
| public MetricType Type { get; set; } = MetricType.EventCounter | MetricType.Meter; | ||
| } | ||
|
|
||
| public sealed class MetricSourceConfiguration : MonitoringSourceConfiguration | ||
| { | ||
| private readonly IList<EventPipeProvider> _eventPipeProviders; | ||
| public string SessionId { get; private set; } | ||
|
|
||
| public static readonly string[] DefaultProviders = new[] { SystemRuntimeEventSourceName, MicrosoftAspNetCoreHostingEventSourceName, GrpcAspNetCoreServer }; | ||
|
|
||
| public MetricSourceConfiguration(float metricIntervalSeconds, IEnumerable<string> customProviderNames) | ||
| : this(metricIntervalSeconds, customProviderNames?.Any() == true ? CreateProviders(metricIntervalSeconds, customProviderNames) : | ||
| CreateProviders(metricIntervalSeconds, DefaultProviders)) | ||
| { | ||
| RequestRundown = false; | ||
| if (customProviderNames == null) | ||
| { | ||
| } | ||
|
|
||
| public MetricSourceConfiguration(float metricIntervalSeconds, IEnumerable<MetricEventPipeProvider> customProviderNames, int maxHistograms = 20, int maxTimeSeries = 1000) { | ||
|
||
| if (customProviderNames == null) { | ||
| throw new ArgumentNullException(nameof(customProviderNames)); | ||
| } | ||
|
|
||
| RequestRundown = false; | ||
| MetricIntervalSeconds = metricIntervalSeconds.ToString(CultureInfo.InvariantCulture); | ||
|
|
||
| IEnumerable<string> providers = null; | ||
| if (customProviderNames.Any()) | ||
| { | ||
| providers = customProviderNames; | ||
| } | ||
| else | ||
| { | ||
| providers = new[] { SystemRuntimeEventSourceName, MicrosoftAspNetCoreHostingEventSourceName, GrpcAspNetCoreServer }; | ||
| } | ||
| _eventPipeProviders = customProviderNames.Where(provider => provider.Type.HasFlag(MetricType.EventCounter)) | ||
| .Select((MetricEventPipeProvider provider) => new EventPipeProvider(provider.Provider, | ||
| EventLevel.Informational, | ||
| (long)ClrTraceEventParser.Keywords.None, | ||
| new Dictionary<string, string>() | ||
| { | ||
| { "EventCounterIntervalSec", provider.IntervalSeconds.ToString(CultureInfo.InvariantCulture)} | ||
| })).ToList(); | ||
|
|
||
| _eventPipeProviders = providers.Select((string provider) => new EventPipeProvider(provider, | ||
| EventLevel.Informational, | ||
| (long)ClrTraceEventParser.Keywords.None, | ||
| new Dictionary<string, string>() | ||
| { | ||
| { "EventCounterIntervalSec", MetricIntervalSeconds } | ||
| })).ToList(); | ||
| } | ||
| IEnumerable<MetricEventPipeProvider> meterProviders = customProviderNames.Where(provider => provider.Type.HasFlag(MetricType.Meter)); | ||
|
|
||
| public MetricSourceConfiguration(float metricIntervalSeconds, IEnumerable<string> customProviderNames, int maxHistograms, int maxTimeSeries) : this(metricIntervalSeconds, customProviderNames) | ||
| { | ||
| const long TimeSeriesValues = 0x2; | ||
| StringBuilder metrics = new StringBuilder(); | ||
| foreach (string provider in customProviderNames) | ||
| if (meterProviders.Any()) | ||
| { | ||
| if (metrics.Length != 0) | ||
| { | ||
| metrics.Append(","); | ||
| } | ||
|
|
||
| metrics.Append(provider); | ||
| } | ||
| const long TimeSeriesValues = 0x2; | ||
| string metrics = string.Join(',', meterProviders.Select(p => p.Provider)); | ||
|
|
||
| SessionId = Guid.NewGuid().ToString(); | ||
| SessionId = Guid.NewGuid().ToString(); | ||
|
|
||
| EventPipeProvider metricsEventSourceProvider = | ||
| new EventPipeProvider("System.Diagnostics.Metrics", EventLevel.Informational, TimeSeriesValues, | ||
| new Dictionary<string, string>() | ||
| { | ||
| EventPipeProvider metricsEventSourceProvider = | ||
| new EventPipeProvider("System.Diagnostics.Metrics", EventLevel.Informational, TimeSeriesValues, | ||
| new Dictionary<string, string>() | ||
| { | ||
| { "SessionId", SessionId }, | ||
| { "Metrics", metrics.ToString() }, | ||
| { "Metrics", metrics }, | ||
| { "RefreshInterval", MetricIntervalSeconds.ToString() }, | ||
| { "MaxTimeSeries", maxTimeSeries.ToString() }, | ||
| { "MaxHistograms", maxHistograms.ToString() } | ||
| } | ||
| ); | ||
| } | ||
| ); | ||
|
|
||
| _eventPipeProviders = _eventPipeProviders.Append(metricsEventSourceProvider).ToArray(); | ||
| _eventPipeProviders = _eventPipeProviders.Append(metricsEventSourceProvider).ToArray(); | ||
| } | ||
| } | ||
|
|
||
| private static IEnumerable<MetricEventPipeProvider> CreateProviders(float metricIntervalSeconds, IEnumerable<string> customProviderNames) => | ||
| customProviderNames.Select(provider => new MetricEventPipeProvider { | ||
| Provider = provider, | ||
| IntervalSeconds = metricIntervalSeconds, | ||
| Type = MetricType.EventCounter | ||
| }); | ||
|
|
||
|
|
||
| private string MetricIntervalSeconds { get; } | ||
|
|
||
| public override IList<EventPipeProvider> GetProviders() => _eventPipeProviders; | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.