コード例 #1
0
ファイル: CounterMonitor.cs プロジェクト: jorive/diagnostics
        private EventPipeProvider[] GetEventPipeProviders()
        {
            // EventSources support EventCounter based metrics directly
            IEnumerable <EventPipeProvider> eventCounterProviders = _counterList.Providers.Select(
                providerName => new EventPipeProvider(providerName, EventLevel.Error, 0, new Dictionary <string, string>()
            {
                { "EventCounterIntervalSec", _interval.ToString() }
            }));

            //System.Diagnostics.Metrics EventSource supports the new Meter/Instrument APIs
            const long    TimeSeriesValues = 0x2;
            StringBuilder metrics          = new StringBuilder();

            foreach (string provider in _counterList.Providers)
            {
                if (metrics.Length != 0)
                {
                    metrics.Append(",");
                }
                if (_counterList.IncludesAllCounters(provider))
                {
                    metrics.Append(provider);
                }
                else
                {
                    string[] providerCounters = _counterList.GetCounters(provider).Select(counter => $"{provider}\\{counter}").ToArray();
                    metrics.Append(string.Join(',', providerCounters));
                }
            }
            EventPipeProvider metricsEventSourceProvider =
                new EventPipeProvider("System.Diagnostics.Metrics", EventLevel.Informational, TimeSeriesValues,
                                      new Dictionary <string, string>()
            {
                { "SessionId", _metricsEventSourceSessionId },
                { "Metrics", metrics.ToString() },
                { "RefreshInterval", _interval.ToString() },
                { "MaxTimeSeries", _maxTimeSeries.ToString() },
                { "MaxHistograms", _maxHistograms.ToString() }
            }
                                      );

            return(eventCounterProviders.Append(metricsEventSourceProvider).ToArray());
        }