// Parses a string in the format: // provider := <provider_name><optional_counter_list> // provider_name := string not containing '[' // optional_counter_list := [<comma_separated_counter_names>] // For example: // System.Runtime // System.Runtime[exception-count] // System.Runtime[exception-count,cpu-usage] void ParseCounterProvider(string providerText, CounterSet counters) { string[] tokens = providerText.Split('['); if (tokens.Length == 0) { throw new FormatException("Expected non-empty counter_provider"); } if (tokens.Length > 2) { throw new FormatException("Expected at most one '[' in counter_provider"); } string providerName = tokens[0]; if (tokens.Length == 1) { counters.AddAllProviderCounters(providerName); // Only a provider name was specified } else { string counterNames = tokens[1]; if (!counterNames.EndsWith(']')) { if (counterNames.IndexOf(']') == -1) { throw new FormatException("Expected to find closing ']' in counter_provider"); } else { throw new FormatException("Unexpected characters after closing ']' in counter_provider"); } } string[] enabledCounters = counterNames.Substring(0, counterNames.Length - 1).Split(',', StringSplitOptions.RemoveEmptyEntries); counters.AddProviderCounters(providerName, enabledCounters); } }
internal CounterSet ConfigureCounters(string commaSeparatedProviderListText, List <string> providerList) { CounterSet counters = new CounterSet(); try { if (commaSeparatedProviderListText != null) { ParseProviderList(commaSeparatedProviderListText, counters); } } catch (FormatException e) { // the FormatException message strings thrown by ParseProviderList are controlled // by us and anticipate being integrated into the command-line error text. throw new CommandLineErrorException("Error parsing --counters argument: " + e.Message); } if (providerList != null) { try { foreach (string providerText in providerList) { ParseCounterProvider(providerText, counters); } } catch (FormatException e) { // the FormatException message strings thrown by ParseCounterProvider are controlled // by us and anticipate being integrated into the command-line error text. throw new CommandLineErrorException("Error parsing counter_list: " + e.Message); } } if (counters.IsEmpty) { _console.Out.WriteLine($"--counters is unspecified. Monitoring System.Runtime counters by default."); counters.AddAllProviderCounters("System.Runtime"); } return(counters); }