diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-08-16 15:06:07 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-08-16 15:06:07 +0300 |
| commit | e9f317178f6454836d488cf1e65d04b20b02d334 (patch) | |
| tree | 1347ae729401d2c5a136afb14a8b6ae8b74d0d9b /Software/Visual_Studio/Tango.Telemetry | |
| parent | 25933e3fd940dbf89b1924383feabb3a5619846d (diff) | |
| download | Tango-e9f317178f6454836d488cf1e65d04b20b02d334.tar.gz Tango-e9f317178f6454836d488cf1e65d04b20b02d334.zip | |
Telemetry Logs.
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry')
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs (renamed from Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsSource.cs) | 6 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs (renamed from Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsSourceConfig.cs) | 4 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSource.cs | 99 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSourceConfig.cs | 20 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj | 7 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryLog.cs | 21 |
6 files changed, 150 insertions, 7 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsSource.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs index 37a8d224d..657fa83e8 100644 --- a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsSource.cs +++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs @@ -14,7 +14,7 @@ using Tango.Telemetry.Telemetries; namespace Tango.Telemetry.Sources { - public class TelemetryDiagnosticsSource : TelemetryConfigurableSource<TelemetryDiagnosticsSourceConfig>, ITelemetryStreamingSource + public class TelemetryDiagnosticsStreamingSource : TelemetryConfigurableSource<TelemetryDiagnosticsStreamingSourceConfig>, ITelemetryStreamingSource { public const int MIN_SAMPLING_INTERVAL_SECONDS = 1; @@ -32,12 +32,12 @@ namespace Tango.Telemetry.Sources public bool RequiresTelemetryDuplicationTracking { get => false; } public bool IsStarted { get; private set; } - private TelemetryDiagnosticsSource() : base() + private TelemetryDiagnosticsStreamingSource() : base() { _diagnosticsQueue = new List<StartDiagnosticsResponse>(); } - public TelemetryDiagnosticsSource(IMachineOperator machineOperator) : base() + public TelemetryDiagnosticsStreamingSource(IMachineOperator machineOperator) : base() { _machineOperator = machineOperator; _machineOperator.DiagnosticsDataAvailable += DiagnosticsDataAvailable; diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsSourceConfig.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs index 806277d5b..c161ed680 100644 --- a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsSourceConfig.cs +++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs @@ -7,11 +7,11 @@ using Tango.Settings; namespace Tango.Telemetry.Sources { - public class TelemetryDiagnosticsSourceConfig : SettingsBase + public class TelemetryDiagnosticsStreamingSourceConfig : SettingsBase { public TimeSpan DiagnosticsSamplingInterval { get; set; } - public TelemetryDiagnosticsSourceConfig() + public TelemetryDiagnosticsStreamingSourceConfig() { DiagnosticsSamplingInterval = TimeSpan.FromSeconds(10); } diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSource.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSource.cs new file mode 100644 index 000000000..8001caac8 --- /dev/null +++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSource.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Integration.Operation; +using Tango.Logging; +using Tango.Telemetry.Telemetries; + +namespace Tango.Telemetry.Sources +{ + public class TelemetryLogsStreamingSource : TelemetryConfigurableSource<TelemetryLogsStreamingSourceConfig>, ITelemetryStreamingSource + { + private KeyValuePair<DateTime, String> _lastFirmwareMessage; + + public IMachineOperator MachineOperator { get; } + + public bool IsStarted { get; private set; } + + public string Name { get; } = "Logs"; + + public bool RequiresTelemetryDuplicationTracking { get; } + + public event EventHandler<TelemetryAvailableEventArgs> TelemetryAvailable; + + public TelemetryLogsStreamingSource() + { + _lastFirmwareMessage = new KeyValuePair<DateTime, string>(DateTime.MinValue, String.Empty); + } + + public TelemetryLogsStreamingSource(IMachineOperator machineOperator) + { + MachineOperator = machineOperator; + } + + public void Start() + { + if (!IsStarted) + { + IsStarted = true; + LogManager.NewLog += LogManager_NewLog; + if (MachineOperator != null) MachineOperator.DebugLogAvailable += MachineOperator_DebugLogAvailable; + } + } + + private void MachineOperator_DebugLogAvailable(object sender, PMR.Debugging.StartDebugLogResponse log) + { + if (IsStarted) + { + if (Config.Categories.Contains((LogCategory)log.Category)) return; + + if (log.Message == _lastFirmwareMessage.Value && DateTime.UtcNow < _lastFirmwareMessage.Key.AddSeconds(1)) return; + + _lastFirmwareMessage = new KeyValuePair<DateTime, string>(DateTime.UtcNow, log.Message); + + TelemetryLog tLog = new TelemetryLog(); + tLog.Time = DateTime.UtcNow; + tLog.Category = log.Category.ToString(); + tLog.Class = log.FileName; + tLog.Method = $"[{log.ModuleId}] [{log.Filter}] [{log.Parameter}]"; + tLog.Line = log.LineNumber; + tLog.Message = log.Message; + TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs() { TelemetryObject = tLog }); + } + } + + private void LogManager_NewLog(object sender, Logging.LogItemBase log) + { + if (IsStarted) + { + if (Config.Categories.Contains(log.Category)) return; + + TelemetryLog tLog = new TelemetryLog(); + tLog.Time = log.TimeStamp.ToUniversalTime(); + tLog.Category = log.Category.ToString(); + tLog.Class = log.ClassName; + tLog.Method = log.CallerMethodName; + tLog.Line = log.CallerLineNumber; + tLog.Message = log.Message; + TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs() { TelemetryObject = tLog }); + } + } + + public void Stop() + { + if (IsStarted) + { + IsStarted = false; + LogManager.NewLog -= LogManager_NewLog; + if (MachineOperator != null) MachineOperator.DebugLogAvailable -= MachineOperator_DebugLogAvailable; + } + } + + public void Dispose() + { + Stop(); + } + } +} diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSourceConfig.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSourceConfig.cs new file mode 100644 index 000000000..1de30976a --- /dev/null +++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryLogsStreamingSourceConfig.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Logging; +using Tango.Settings; + +namespace Tango.Telemetry.Sources +{ + public class TelemetryLogsStreamingSourceConfig : SettingsBase + { + public List<LogCategory> Categories { get; set; } + + public TelemetryLogsStreamingSourceConfig() + { + Categories = new List<LogCategory>() { LogCategory.Error, LogCategory.Critical, LogCategory.Warning }; + } + } +} diff --git a/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj b/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj index ff1fcb43e..b04b0654d 100644 --- a/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj +++ b/Software/Visual_Studio/Tango.Telemetry/Tango.Telemetry.csproj @@ -255,12 +255,15 @@ <Compile Include="Reporting\SourceSummary.cs" /> <Compile Include="Reporting\SourceTypeSummary.cs" /> <Compile Include="Reporting\TelemetryReport.cs" /> - <Compile Include="Sources\TelemetryDiagnosticsSource.cs" /> - <Compile Include="Sources\TelemetryDiagnosticsSourceConfig.cs" /> + <Compile Include="Sources\TelemetryDiagnosticsStreamingSource.cs" /> + <Compile Include="Sources\TelemetryDiagnosticsStreamingSourceConfig.cs" /> <Compile Include="Sources\TelemetryJobRunsHistorySource.cs" /> <Compile Include="Sources\TelemetryJobRunsHistorySourceConfig.cs" /> <Compile Include="PendingTelemetry.cs" /> <Compile Include="Sources\TelemetryJobRunsStreamingSource.cs" /> + <Compile Include="Sources\TelemetryLogsStreamingSource.cs" /> + <Compile Include="Sources\TelemetryLogsStreamingSourceConfig.cs" /> + <Compile Include="Telemetries\TelemetryLog.cs" /> <Compile Include="TelemetryConfigurableSource.cs" /> <Compile Include="TelemetryHistorySourceCheckPoint.cs" /> <Compile Include="TelemetryHistorySourceDirection.cs" /> diff --git a/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryLog.cs b/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryLog.cs new file mode 100644 index 000000000..c37f6fd29 --- /dev/null +++ b/Software/Visual_Studio/Tango.Telemetry/Telemetries/TelemetryLog.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.Telemetry.Telemetries +{ + public class TelemetryLog : TelemetryBase + { + public String Category { get; set; } + + public String Class { get; set; } + + public String Method { get; set; } + + public int Line { get; set; } + + public String Message { get; set; } + } +} |
