aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2025-08-21 14:36:42 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2025-08-21 14:36:42 +0300
commit33c5e689caa9842aa29dac915b4f8d83564cee0c (patch)
treee8a96988ce0cb66797fae688c5e753359da41f03 /Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs
parent9c64ff964e98c5a27bb63cecf3042499b6b50736 (diff)
downloadTango-33c5e689caa9842aa29dac915b4f8d83564cee0c.tar.gz
Tango-33c5e689caa9842aa29dac915b4f8d83564cee0c.zip
Telemetry JobStatus
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs')
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs133
1 files changed, 133 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs
new file mode 100644
index 000000000..93a5cc54e
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs
@@ -0,0 +1,133 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL.Entities;
+using Tango.Integration.Operation;
+using Tango.Telemetry.Telemetries;
+
+namespace Tango.Telemetry.Sources
+{
+ public class TelemetryJobStatusSource : ITelemetryStreamingSource
+ {
+ private IMachineOperator _machineOperator;
+ private Job _job;
+ private TelemetryJobStatus _lastStatus;
+ private String _groupID;
+ private DateTime _startTime;
+
+ public bool IsStarted { get; private set; }
+ public string Name { get; } = "Job Status Streaming";
+ public bool RequiresTelemetryDuplicationTracking { get; }
+
+ public event EventHandler<TelemetryAvailableEventArgs> TelemetryAvailable;
+
+ public TelemetryJobStatusSource(IMachineOperator machineOperator)
+ {
+ _machineOperator = machineOperator;
+ }
+
+ public void Start()
+ {
+ if (!IsStarted)
+ {
+ IsStarted = true;
+ _machineOperator.PrintingStarted += MachineOperator_PrintingStarted;
+ }
+ }
+
+ public void Stop()
+ {
+ if (IsStarted)
+ {
+ IsStarted = false;
+ _machineOperator.PrintingStarted -= MachineOperator_PrintingStarted;
+ }
+ }
+
+ private void MachineOperator_PrintingStarted(object sender, PrintingEventArgs e)
+ {
+ if (e.JobHandler != null)
+ {
+ _groupID = Guid.NewGuid().ToString();
+ _job = e.Job;
+ _startTime = DateTime.UtcNow;
+ e.JobHandler.StatusChanged += JobHandler_StatusChanged;
+ e.JobHandler.Failed += JobHandler_Failed;
+ }
+ }
+
+ private void JobHandler_StatusChanged(object sender, RunningJobStatus status)
+ {
+ if (IsStarted)
+ {
+ TelemetryJobStatus tStatus = new TelemetryJobStatus();
+
+ tStatus.JobName = _job?.Name;
+
+ if (status.ProgressMinusSettingUp > 0)
+ {
+ tStatus.Status = TelemetryJobStatus.JobStatus.InProgress;
+ }
+
+ if (status.IsCompleted)
+ {
+ tStatus.Status = TelemetryJobStatus.JobStatus.Completed;
+ }
+
+ if (status.IsFailed)
+ {
+ tStatus.Status = TelemetryJobStatus.JobStatus.Failed;
+ }
+
+ if (status.IsCanceled)
+ {
+ tStatus.Status = TelemetryJobStatus.JobStatus.Aborted;
+ }
+
+ tStatus.ID = _groupID;
+ tStatus.TotalTime = status.TotalTime;
+ tStatus.RemainingTime = status.RemainingTime;
+
+ tStatus.Progress = status.ProgressMinusSettingUp;
+ tStatus.TotalProgress = status.TotalProgressMinusSettingUp;
+
+ tStatus.CurrentUnit = status.CurrentUnit;
+ tStatus.RemainingUnits = status.RemainingUnits;
+
+ tStatus.CurrentUnitProgress = status.CurrentUnitProgress;
+ tStatus.CurrentUnitTotalProgress = status.CurrentUnitTotalProgress;
+
+ tStatus.Message = status.Message;
+
+ _lastStatus = tStatus;
+
+ TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs()
+ {
+ TelemetryObject = tStatus,
+ DisableDeliveryRetries = true
+ });
+ }
+ }
+
+ private void JobHandler_Failed(object sender, Exception e)
+ {
+ if (_lastStatus != null)
+ {
+ _lastStatus.Message = e.FlattenMessage();
+
+ TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs()
+ {
+ TelemetryObject = _lastStatus,
+ DisableDeliveryRetries = true
+ });
+ }
+ }
+
+ public void Dispose()
+ {
+ Stop();
+ }
+ }
+}