public InterfaceStatusScanner() { _triggerThreshold = ConfigManager.SettingsManager.LoadSetting(CONFIGURATION_GROUP, "TriggerThreshold", StatusReportItem.SeverityCode.Warning); _displayThreshold = ConfigManager.SettingsManager.LoadSetting(CONFIGURATION_GROUP, "DisplayThreshold", StatusReportItem.SeverityCode.Info); }
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(); }
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); }
/// <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; } }
/// <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); }
/// <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; }