Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public DiagnosticMeasurementValue(MailboxDatabaseCalculatedCounters.DiagnosticMeasurementValue other)
 {
     this.measure = other.Measure;
     this.Value   = other.Value;
 }
Ejemplo n.º 3
0
        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);
        }