コード例 #1
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);
        }