예제 #1
0
        private void AddIndexStat(StatInfoItem statInfoItem)
        {
            foreach (var propertyInfo in statInfoItem.Item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (propertyInfo.Name == "Name")
                {
                    statInfoItem.Title = propertyInfo.GetValue(statInfoItem.Item, null).ToString();
                    ViewOptions.Add(statInfoItem.Title);
                    continue;
                }

                if (propertyInfo.Name == "Performance")
                {
                    var performance = propertyInfo.GetValue(statInfoItem.Item, null) as IndexingPerformanceStats[];
                    if (performance == null || performance.Length == 0)
                    {
                        continue;
                    }

                    var performanceMessage = "";

                    foreach (var indexingPerformanceStats in performance)
                    {
                        performanceMessage += string.Format(@"
Operation:         {0}
Input:              {1:#,#}
Output:              {2:#,#}
Duration:          {3}
Duration in ms: {4:#,#}
", indexingPerformanceStats.Operation,
                                                            indexingPerformanceStats.InputCount,
                                                            indexingPerformanceStats.OutputCount,
                                                            indexingPerformanceStats.Duration,
                                                            indexingPerformanceStats.DurationMilliseconds);
                    }

                    statInfoItem.ItemData.Add("Performance", performanceMessage);

                    continue;
                }

                if (propertyInfo.GetValue(statInfoItem.Item, null) == null)
                {
                    continue;
                }

                int isZero;
                var isInt = int.TryParse(propertyInfo.GetValue(statInfoItem.Item, null).ToString(), out isZero);
                if (isInt && isZero == 0)
                {
                    continue;
                }

                statInfoItem.ItemData.Add(propertyInfo.Name, GetValueWithFormat(propertyInfo.GetValue(statInfoItem.Item, null)));
            }
        }
        private void AddIndexStat(StatInfoItem statInfoItem)
        {
            foreach (var propertyInfo in statInfoItem.Item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (propertyInfo.Name == "Name")
                {
                    statInfoItem.Title = propertyInfo.GetValue(statInfoItem.Item, null).ToString();
                    ViewOptions.Add(statInfoItem.Title);
                    continue;
                }

                if (propertyInfo.Name == "Performance")
                {
                    var performance = propertyInfo.GetValue(statInfoItem.Item, null) as IndexingPerformanceStats[];
                    if (performance == null || performance.Length == 0)
                    {
                        continue;
                    }

                    UpdateGraphDate(performance, statInfoItem);

                    continue;
                }

                if (propertyInfo.GetValue(statInfoItem.Item, null) == null)
                {
                    continue;
                }

                int isZero;
                var isInt = int.TryParse(propertyInfo.GetValue(statInfoItem.Item, null).ToString(), out isZero);
                if (isInt && isZero == 0)
                {
                    continue;
                }

                statInfoItem.ItemData.Add(propertyInfo.Name, GetValueWithFormat(propertyInfo.GetValue(statInfoItem.Item, null)));
            }
        }
예제 #3
0
        private void UpdateStatistics()
        {
            StatsData = ApplicationModel.Database.Value.Statistics;
            Statistics.Clear();
            ViewOptions.Clear();
            ViewOptions.Add("All");
            ViewOptions.Add("Single Items");

            if (StatsData.Value == null)
            {
                Thread.Sleep(100);
                UpdateStatistics();
                return;
            }

            foreach (var propertyInfo in StatsData.Value.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                var enumerable = propertyInfo.GetValue(StatsData.Value, null) as IEnumerable <object>;

                if (enumerable != null)
                {
                    var list = enumerable as List <object> ?? enumerable.ToList();
                    if (list.Count == 0)
                    {
                        continue;
                    }

                    if ((list.First() is string == false) && (list.First() is IndexStats == false))
                    {
                        continue;
                    }

                    var statInfo = new StatInfo
                    {
                        IsList    = true,
                        ListItems = new List <StatInfoItem>(),
                    };

                    foreach (var item in list)
                    {
                        var statInfoItem = new StatInfoItem(item);

                        if (statInfoItem.ItemType == typeof(IndexStats))
                        {
                            AddIndexStat(statInfoItem);
                        }

                        statInfo.ListItems.Add(statInfoItem);
                    }

                    Statistics.Add(propertyInfo.Name, statInfo);
                    ViewOptions.Add(propertyInfo.Name);
                }
                else
                {
                    if (string.IsNullOrEmpty(propertyInfo.GetValue(StatsData.Value, null).ToString()) || propertyInfo.GetValue(StatsData.Value, null).ToString() == "0")
                    {
                        continue;
                    }

                    Statistics.Add(propertyInfo.Name, new StatInfo
                    {
                        Message = GetValueWithFormat(propertyInfo.GetValue(StatsData.Value, null))
                    });
                }
            }

            OnPropertyChanged(() => StatsData);
            UpdateView();
        }
        private void UpdateStatistics()
        {
            StatsData = ApplicationModel.Database.Value.Statistics;
            Statistics.Clear();
            ViewOptions.Clear();
            ViewOptions.Add("All");
            ViewOptions.Add("Single Items");

            if (StatsData.Value == null)
            {
                if (retries-- == 0)
                {
                    ApplicationModel.Current.Notifications.Add(new Notification("Could not load settings for database " + ApplicationModel.Database.Value.Name));
                    return;
                }
                Thread.Sleep(100);
                UpdateStatistics();
                return;
            }

            retries = 3;

            foreach (var propertyInfo in StatsData.Value.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                var enumerable = propertyInfo.GetValue(StatsData.Value, null) as IEnumerable <object>;

                if (enumerable != null)
                {
                    var list = enumerable as List <object> ?? enumerable.ToList();
                    if (propertyInfo.Name == "StaleIndexes")
                    {
                        StaleIndexes = new List <object>(list);
                        if (list.Count == 0)
                        {
                            Statistics.Add(propertyInfo.Name, new StatInfo
                            {
                                Message     = "No Stale Indexes",
                                ToolTipData = "No Stale Indexes"
                            });
                        }
                        else if (list.Count > 1)
                        {
                            ViewOptions.Add("Stale Indexes");
                            Statistics.Add(propertyInfo.Name, new StatInfo
                            {
                                Message     = string.Format("There are {0} Stale Indexes: {1}", list.Count, string.Join(",", list)),
                                ToolTipData = string.Join(", ", list)
                            });
                        }
                        else                         // only one item
                        {
                            ViewOptions.Add("Stale Indexes");
                            Statistics.Add(propertyInfo.Name, new StatInfo
                            {
                                Message     = "There is 1 Stale Index: " + list[0],
                                ToolTipData = list[0].ToString()                                 // only one item, no need to call string.Join()
                            });
                        }

                        continue;
                    }

                    if (list.Count == 0)
                    {
                        continue;
                    }

                    if ((list.First() is string == false) && (list.First() is Abstractions.Data.IndexStats == false))
                    {
                        continue;
                    }

                    var statInfo = new StatInfo
                    {
                        IsList    = true,
                        ListItems = new List <StatInfoItem>(),
                    };

                    foreach (var item in list)
                    {
                        var statInfoItem = new StatInfoItem(item);

                        if (statInfoItem.ItemType == typeof(Abstractions.Data.IndexStats))
                        {
                            AddIndexStat(statInfoItem);
                        }

                        statInfo.ListItems.Add(statInfoItem);
                    }

                    Statistics.Add(propertyInfo.Name, statInfo);
                    ViewOptions.Add(propertyInfo.Name);
                }
                else
                {
                    if (string.IsNullOrEmpty(propertyInfo.GetValue(StatsData.Value, null).ToString()) || propertyInfo.GetValue(StatsData.Value, null).ToString() == "0")
                    {
                        continue;
                    }

                    Statistics.Add(propertyInfo.Name, new StatInfo
                    {
                        Message     = GetValueWithFormat(propertyInfo.GetValue(StatsData.Value, null)),
                        ToolTipData = GetValueWithFormat(propertyInfo.GetValue(StatsData.Value, null))
                    });
                }
            }

            OnPropertyChanged(() => StatsData);
            UpdateView();
        }