// 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); } }