internal static Dictionary <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > CreateCounters(IEnumerable <MailboxDatabase> databases) { if (databases == null) { throw new ArgumentNullException("databases"); } Dictionary <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > dictionary = new Dictionary <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> >(); Dictionary <string, MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> dictionary2 = new Dictionary <string, MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue>(StringComparer.OrdinalIgnoreCase); foreach (MailboxDatabase mailboxDatabase in databases) { if (!dictionary.ContainsKey(mailboxDatabase)) { List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> list = new List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue>(MailboxDatabaseCalculatedCounters.CounterNames.Count * 2); foreach (string text in MailboxDatabaseCalculatedCounters.CounterNames) { DiagnosticMeasurement measure = DiagnosticMeasurement.GetMeasure(Environment.MachineName, "MSExchangeIS Store", text, mailboxDatabase.Name); list.Add(new MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue(measure)); MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue diagnosticMeasurementValue; if (!dictionary2.TryGetValue(text, out diagnosticMeasurementValue)) { measure = DiagnosticMeasurement.GetMeasure(Environment.MachineName, "MSExchangeIS Store", text, "_Total"); diagnosticMeasurementValue = new MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue(measure); dictionary2.Add(text, diagnosticMeasurementValue); } list.Add(diagnosticMeasurementValue); } dictionary.Add(mailboxDatabase, list); } } return(dictionary); }
public DiagnosticMeasurementValue(MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue other) { this.measure = other.Measure; this.Value = other.Value; }
internal static bool TryCreateCounters(IEnumerable <MailboxDatabase> databases, out Dictionary <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > counters) { if (databases == null) { throw new ArgumentNullException("databases"); } counters = null; Dictionary <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > dictionary = MailboxDatabaseCalculatedCounters.CreateCounters(databases); List <MailboxDatabase> list = new List <MailboxDatabase>(dictionary.Count); foreach (KeyValuePair <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > keyValuePair in dictionary) { Dictionary <string, float> dictionary2; if (!keyValuePair.Key.TryLoadStatistics(out dictionary2)) { list.Add(keyValuePair.Key); } else { foreach (MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue diagnosticMeasurementValue in keyValuePair.Value) { string[] array; Func <float[], float> func; if (MailboxDatabaseCalculatedCounters.CounterProperties.TryGetValue(diagnosticMeasurementValue.Measure.CounterName, out array) && MailboxDatabaseCalculatedCounters.CounterLogic.TryGetValue(diagnosticMeasurementValue.Measure.CounterName, out func)) { bool flag = true; float[] array2 = new float[array.Length]; for (int i = 0; i < array.Length; i++) { if (!dictionary2.TryGetValue(array[i], out array2[i])) { flag = false; break; } } if (!flag) { list.Add(keyValuePair.Key); break; } if (diagnosticMeasurementValue.Value == null) { diagnosticMeasurementValue.Value = new float?(0f); } MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue diagnosticMeasurementValue2 = diagnosticMeasurementValue; float?value = diagnosticMeasurementValue2.Value; float num = func(array2); diagnosticMeasurementValue2.Value = ((value != null) ? new float?(value.GetValueOrDefault() + num) : null); } } } } foreach (MailboxDatabase key in list) { dictionary.Remove(key); } bool flag2 = dictionary.Any <KeyValuePair <MailboxDatabase, List <MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue> > >(); if (flag2) { counters = dictionary; } return(flag2); }