aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs')
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs179
1 files changed, 179 insertions, 0 deletions
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs
new file mode 100644
index 000000000..64e73babf
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs
@@ -0,0 +1,179 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+using Tango.Core.Commands;
+using Tango.Core.DI;
+using Tango.FSE.Common;
+using Tango.Integration.Logging;
+using Tango.Logging;
+using Tango.SharedUI.Components;
+
+namespace Tango.FSE.UI.Panes
+{
+ public class LogViewerPaneVM : FSEViewModel
+ {
+ private List<LogItemBase> _pausedApplicationLogs;
+ private List<EmbeddedLogItem> _pausedMachineLogs;
+
+ public ObservableCollection<LogItemBase> ApplicationLogs { get; set; }
+ public ObservableCollection<EmbeddedLogItem> MachineLogs { get; set; }
+ public ICollectionView ApplicationLogsView { get; set; }
+ public ICollectionView MachineLogsView { get; set; }
+ public SelectedObjectCollection<LogCategory> SelectedApplicationLogsCategories { get; set; }
+ public SelectedObjectCollection<LogCategory> SelectedMachineLogsCategories { get; set; }
+ public bool ApplicationLogsPaused { get; set; }
+ public bool MachineLogsPaused { get; set; }
+
+ private String _applicationLogsFilter;
+ public String ApplicationLogsFilter
+ {
+ get { return _applicationLogsFilter; }
+ set { _applicationLogsFilter = value; RaisePropertyChangedAuto(); ApplicationLogsView.Refresh(); }
+ }
+
+ private String _machineLogsFilter;
+ public String MachineLogsFilter
+ {
+ get { return _machineLogsFilter; }
+ set { _machineLogsFilter = value; RaisePropertyChangedAuto(); MachineLogsView.Refresh(); }
+ }
+
+
+ public RelayCommand ClearApplicationLogsCommand { get; set; }
+ public RelayCommand ClearMachineLogsCommand { get; set; }
+
+ public LogViewerPaneVM()
+ {
+ _pausedApplicationLogs = new List<LogItemBase>();
+ _pausedMachineLogs = new List<EmbeddedLogItem>();
+
+ ApplicationLogs = new ObservableCollection<LogItemBase>();
+ MachineLogs = new ObservableCollection<EmbeddedLogItem>();
+ ApplicationLogsView = CollectionViewSource.GetDefaultView(ApplicationLogs);
+ MachineLogsView = CollectionViewSource.GetDefaultView(MachineLogs);
+
+ ApplicationLogsView.Filter = FilterApplicationLogs;
+ MachineLogsView.Filter = FilterMachineLogs;
+
+ SelectedApplicationLogsCategories = new SelectedObjectCollection<LogCategory>(new ObservableCollection<LogCategory>()
+ {
+ LogCategory.Info,
+ LogCategory.Warning,
+ LogCategory.Error,
+ LogCategory.Critical,
+ }, new ObservableCollection<LogCategory>()
+ {
+ LogCategory.Info,
+ LogCategory.Warning,
+ LogCategory.Error,
+ LogCategory.Critical,
+ });
+
+ SelectedMachineLogsCategories = new SelectedObjectCollection<LogCategory>(new ObservableCollection<LogCategory>()
+ {
+ LogCategory.Info,
+ LogCategory.Warning,
+ LogCategory.Error,
+ LogCategory.Critical,
+ LogCategory.Debug,
+ }, new ObservableCollection<LogCategory>()
+ {
+ LogCategory.Info,
+ LogCategory.Warning,
+ LogCategory.Error,
+ LogCategory.Critical,
+ LogCategory.Debug,
+ });
+
+ SelectedApplicationLogsCategories.SynchedSource.CollectionChanged += (_, __) => ApplicationLogsView.Refresh();
+ SelectedMachineLogsCategories.SynchedSource.CollectionChanged += (_, __) => MachineLogsView.Refresh();
+
+ ClearApplicationLogsCommand = new RelayCommand(ClearApplicationLogs);
+ ClearMachineLogsCommand = new RelayCommand(ClearMachineLogs);
+
+ TangoIOC.Default.Inject(this);
+
+ LoggingProvider.ApplicationLogAvailable += LoggingProvider_ApplicationLogAvailable;
+ LoggingProvider.EmbeddedLogAvailable += LoggingProvider_EmbeddedLogAvailable;
+ }
+
+ private bool FilterApplicationLogs(object obj)
+ {
+ var log = obj as LogItemBase;
+ return SelectedApplicationLogsCategories.SynchedSource.Contains(log.Category) && (String.IsNullOrWhiteSpace(ApplicationLogsFilter) || log.Message.ToLower().Contains(ApplicationLogsFilter.ToLower()));
+ }
+
+ private bool FilterMachineLogs(object obj)
+ {
+ var log = obj as EmbeddedLogItem;
+ return SelectedMachineLogsCategories.SynchedSource.Contains(log.Category) && (String.IsNullOrWhiteSpace(MachineLogsFilter) || log.Message.ToLower().Contains(MachineLogsFilter.ToLower()));
+ }
+
+ private void ClearApplicationLogs()
+ {
+ _pausedApplicationLogs.Clear();
+ ApplicationLogs.Clear();
+ }
+
+ private void ClearMachineLogs()
+ {
+ _pausedMachineLogs.Clear();
+ MachineLogs.Clear();
+ }
+
+ private void LoggingProvider_ApplicationLogAvailable(object sender, LogItemBase logItem)
+ {
+ if (ApplicationLogsPaused)
+ {
+ _pausedApplicationLogs.Add(logItem);
+ }
+ else
+ {
+ InvokeUI(() =>
+ {
+ if (_pausedApplicationLogs.Count > 0)
+ {
+ foreach (var pausedItem in _pausedApplicationLogs)
+ {
+ ApplicationLogs.Insert(0, pausedItem);
+ }
+
+ _pausedApplicationLogs.Clear();
+ }
+
+ ApplicationLogs.Insert(0, logItem);
+ });
+ }
+ }
+
+ private void LoggingProvider_EmbeddedLogAvailable(object sender, EmbeddedLogItem logItem)
+ {
+ if (MachineLogsPaused)
+ {
+ _pausedMachineLogs.Add(logItem);
+ }
+ else
+ {
+ InvokeUI(() =>
+ {
+ if (_pausedMachineLogs.Count > 0)
+ {
+ foreach (var pausedItem in _pausedMachineLogs)
+ {
+ MachineLogs.Insert(0, pausedItem);
+ }
+
+ _pausedMachineLogs.Clear();
+ }
+
+ MachineLogs.Insert(0, logItem);
+ });
+ }
+ }
+ }
+} \ No newline at end of file