Ejemplo n.º 1
0
 public InterfaceStatusScanner()
 {
     _triggerThreshold = ConfigManager.SettingsManager.LoadSetting(CONFIGURATION_GROUP, "TriggerThreshold",
                                                                   StatusReportItem.SeverityCode.Warning);
     _displayThreshold = ConfigManager.SettingsManager.LoadSetting(CONFIGURATION_GROUP, "DisplayThreshold",
                                                                   StatusReportItem.SeverityCode.Info);
 }
Ejemplo n.º 2
0
        private void Update(IList <StatusReportItem> freshReport)
        {
            _report.Clear();
            Items.Clear();
            Recommendations.Clear();
            RecommendationsVisibility = Visibility.Collapsed;

            // scan all items for status codes, even if filtered
            StatusReportItem.SeverityCode newStatus = freshReport
                                                      .Select(item => item.Severity)
                                                      .DefaultIfEmpty(StatusReportItem.SeverityCode.None)
                                                      .Max();

            // filter report
            _report.AddRange(freshReport.Where(i => i.Severity >= _displayThreshold));

            if (_report.Count < 1)
            {
                // done
                SetStatus(newStatus);
                UpdateDetailsVisibility();
                return;
            }

            // create a unique set of recommendations
            HashSet <string> uniqueRecommendations = new HashSet <string>(
                _report.Select(item => item.Recommendation).Where(text => !string.IsNullOrEmpty(text)),
                StringComparer.OrdinalIgnoreCase);

            foreach (string recommendation in uniqueRecommendations)
            {
                Recommendations.Add(recommendation);
                RecommendationsVisibility = Visibility.Visible;
            }

            // create view models for status items
            IEnumerable <InterfaceStatusViewItem> checklistItems = _report
                                                                   .Select(item => new InterfaceStatusViewItem(item));

            foreach (InterfaceStatusViewItem checklistItem in checklistItems)
            {
                Items.Add(checklistItem);
            }

            SetStatus(newStatus);
            UpdateDetailsVisibility();
        }
Ejemplo n.º 3
0
            public override DataTemplate SelectTemplate(object item, DependencyObject container)
            {
                if (!(container is FrameworkElement element))
                {
                    return(null);
                }

                if (!(item is StatusViewerItem listItem))
                {
                    return(null);
                }

                StatusReportItem.SeverityCode severity = listItem.Data.Severity;
                switch (severity)
                {
                case StatusReportItem.SeverityCode.None:
                    // these are incorrectly initialized
                    ConfigManager.LogManager.LogError(
                        $"received status report item with invalid severity: {listItem.Data.Severity} '{listItem.Data.Status}'; implementation error");
                    // render using Error template
                    severity = StatusReportItem.SeverityCode.Error;
                    break;

                case StatusReportItem.SeverityCode.Info:
                    break;

                case StatusReportItem.SeverityCode.Warning:
                    break;

                case StatusReportItem.SeverityCode.Error:
                    break;

                // ReSharper disable once RedundantEmptySwitchSection
                // new cases are explicitly allowed to have resources with matching names
                default:
                    break;
                }

                return(element.FindResource(severity.ToString()) as DataTemplate);
            }
Ejemplo n.º 4
0
        /// <summary>
        /// Instead of a setter for the corresponding string, we use this method to
        /// ensure the underlying enum can be renamed and otherwise changed safely.
        /// </summary>
        /// <param name="code"></param>
        public void SetStatus(StatusReportItem.SeverityCode code)
        {
            SetValue(StatusProperty, code.ToString());
            switch (code)
            {
            case StatusReportItem.SeverityCode.None:
                StatusNarrative = "This component is not reporting any status.";
                break;

            case StatusReportItem.SeverityCode.Info:
                StatusNarrative = "This component is configured correctly.";
                break;

            case StatusReportItem.SeverityCode.Warning:
                StatusNarrative = "This component is reporting warnings that should be corrected.";
                break;

            case StatusReportItem.SeverityCode.Error:
                StatusNarrative = "This component is reporting errors and requires attention.";
                break;
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// called by parent if the display threshold is changed after we have already been initialized
 /// </summary>
 /// <param name="displayThreshold"></param>
 internal void ChangeDisplayThreshold(StatusReportItem.SeverityCode displayThreshold)
 {
     _displayThreshold = displayThreshold;
     Update(Data.Report);
 }
Ejemplo n.º 6
0
 /// <summary>
 /// late init from parent
 /// </summary>
 /// <param name="displayThreshold"></param>
 internal void Initialize(StatusReportItem.SeverityCode displayThreshold)
 {
     _displayThreshold = displayThreshold;
     Update(Data.Report);
     Data.PropertyChanged += Data_PropertyChanged;
 }