コード例 #1
0
        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());
        }
コード例 #2
0
ファイル: ProviderParsing.cs プロジェクト: Maoni0/diagnostics
        public void ProvidersWithComplexFilters_CorrectlyParse()
        {
            string providersToParse = @"MyProvider:::A=B;C=D";
            List <EventPipeProvider> parsedProviders = Extensions.ToProviders(providersToParse);

            Assert.Single(parsedProviders);
            EventPipeProvider providerOne = parsedProviders[0];

            Assert.Equal("MyProvider", providerOne.Name);
            Assert.Equal(2, providerOne.Arguments.Count);
            Assert.Equal("B", providerOne.Arguments["A"]);
            Assert.Equal("D", providerOne.Arguments["C"]);

            providersToParse = @"MyProvider:::A=B;C=""D"",MyProvider2:::A=1;B=2;";
            parsedProviders  = Extensions.ToProviders(providersToParse);
            Assert.Equal(2, parsedProviders.Count);
            providerOne = parsedProviders[0];
            EventPipeProvider providerTwo = parsedProviders[1];

            Assert.Equal("MyProvider", providerOne.Name);
            Assert.Equal("MyProvider2", providerTwo.Name);
            Assert.Equal(2, providerOne.Arguments.Count);
            Assert.Equal("B", providerOne.Arguments["A"]);
            Assert.Equal("D", providerOne.Arguments["C"]);
            Assert.Equal(2, providerTwo.Arguments.Count);
            Assert.Equal("1", providerTwo.Arguments["A"]);
            Assert.Equal("2", providerTwo.Arguments["B"]);

            providersToParse = @"MyProvider:::A=""B;C=D"",MyProvider2:::A=""spaced words"";C=1285;D=Spaced Words 2";
            parsedProviders  = Extensions.ToProviders(providersToParse);
            Assert.Equal(2, parsedProviders.Count);
            providerOne = parsedProviders[0];
            providerTwo = parsedProviders[1];
            Assert.Equal("MyProvider", providerOne.Name);
            Assert.Equal("MyProvider2", providerTwo.Name);
            Assert.Equal(1, providerOne.Arguments.Count);
            Assert.Equal(3, providerTwo.Arguments.Count);
            Assert.Equal("B;C=D", providerOne.Arguments["A"]);
            Assert.Equal("spaced words", providerTwo.Arguments["A"]);
            Assert.Equal("Spaced Words 2", providerTwo.Arguments["D"]);
            Assert.Equal("1285", providerTwo.Arguments["C"]);
        }
コード例 #3
0
        public static bool ValidateProvider(GlobalCounterOptions counterOptions,
                                            EventPipeProvider provider,
                                            out string errorMessage)
        {
            errorMessage = null;

            if (provider.Arguments?.TryGetValue("EventCounterIntervalSec", out string intervalValue) == true)
            {
                if (float.TryParse(intervalValue, out float intervalSeconds) &&
                    intervalSeconds != counterOptions.GetIntervalSeconds())
                {
                    errorMessage = string.Format(CultureInfo.CurrentCulture,
                                                 Strings.ErrorMessage_InvalidMetricInterval,
                                                 provider.Name,
                                                 counterOptions.GetIntervalSeconds());
                    return(false);
                }
            }

            return(true);
        }
コード例 #4
0
        public void UserSettingsOverrideDefaultSettings()
        {
            const string DotNetRuntime = "Microsoft-Windows-DotNETRuntime";

            var defaultSettings = new EventPipeProvider(
                DotNetRuntime,
                EventLevel.Informational,
                (long)ClrTraceEventParser.Keywords.Default);

            var userSettings = new EventPipeProvider(
                DotNetRuntime,
                EventLevel.Verbose,
                (long)(ClrTraceEventParser.Keywords.Default | ClrTraceEventParser.Keywords.JitTracing));

            var result = EventPipeProfiler.MapToProviders(EventPipeProfile.CpuSampling, new[] { userSettings });

            var final = result.Single(x => x.Name == userSettings.Name);

            Assert.Equal(userSettings.EventLevel, final.EventLevel);
            Assert.Equal(userSettings.Keywords, final.Keywords);

            Assert.Contains(SampleProfiler, result);
        }
コード例 #5
0
        public void Start(string providerName, EventLevel level, long keywords)
        {
            var provider = new EventPipeProvider(providerName, level, keywords);

            m_session = m_client.StartEventPipeSession(new List <EventPipeProvider>()
            {
                provider
            });
            // Task that reads and does nothing
            Task streamTask = Task.Run(() =>
            {
                var buffer = new byte[1000];
                while (true)
                {
                    try
                    {
                        m_session.EventStream.Read(buffer, 0, 1000);
                    }
                    catch (Exception e)
                    {
                    }
                }
            });
        }
コード例 #6
0
 private static string GetProviderDisplayString(EventPipeProvider provider) =>
 String.Format("{0, -40}", provider.Name) + String.Format("0x{0, -18}", $"{provider.Keywords:X16}") + String.Format("{0, -8}", provider.EventLevel.ToString() + $"({(int)provider.EventLevel})");