diff options
| author | Roy Ben Shabat <roy.mail.net@gmail.com> | 2025-08-30 22:05:03 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <roy.mail.net@gmail.com> | 2025-08-30 22:05:03 +0300 |
| commit | a1d55aa060450b0a16b597794686b2aa41eea259 (patch) | |
| tree | 62dfd7829b81335103a3c2d1d17c99d8408a5e54 /Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs | |
| parent | d9d5b0161efbce3f0d44e890b435883f49df2963 (diff) | |
| download | Tango-a1d55aa060450b0a16b597794686b2aa41eea259.tar.gz Tango-a1d55aa060450b0a16b597794686b2aa41eea259.zip | |
PPC Telemetry First Integration.
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs | 126 |
1 files changed, 81 insertions, 45 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs index 93a5cc54e..9f7488909 100644 --- a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs +++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs @@ -6,6 +6,8 @@ using System.Threading.Tasks; using Tango.BL.Entities; using Tango.Integration.Operation; using Tango.Telemetry.Telemetries; +// NEW: +using System.Timers; namespace Tango.Telemetry.Sources { @@ -17,6 +19,12 @@ namespace Tango.Telemetry.Sources private String _groupID; private DateTime _startTime; + // NEW: throttle state + private readonly object _lock = new object(); + private DateTime _lastStatusArrivedUtc; + private DateTime _lastEmittedUtc; + private Timer _emitTimer; // ticks every 1s + public bool IsStarted { get; private set; } public string Name { get; } = "Job Status Streaming"; public bool RequiresTelemetryDuplicationTracking { get; } @@ -34,6 +42,15 @@ namespace Tango.Telemetry.Sources { IsStarted = true; _machineOperator.PrintingStarted += MachineOperator_PrintingStarted; + + // NEW: start 1s emitter (idempotent) + if (_emitTimer == null) + { + _emitTimer = new Timer(1000); + _emitTimer.AutoReset = true; + _emitTimer.Elapsed += EmitTimer_Elapsed; + _emitTimer.Start(); + } } } @@ -43,6 +60,15 @@ namespace Tango.Telemetry.Sources { IsStarted = false; _machineOperator.PrintingStarted -= MachineOperator_PrintingStarted; + + // NEW: stop timer + if (_emitTimer != null) + { + _emitTimer.Stop(); + _emitTimer.Elapsed -= EmitTimer_Elapsed; + _emitTimer.Dispose(); + _emitTimer = null; + } } } @@ -58,70 +84,80 @@ namespace Tango.Telemetry.Sources } } - private void JobHandler_StatusChanged(object sender, RunningJobStatus status) + // NEW: timer tick — emit only the latest status observed within last 5 seconds, once per tick + private void EmitTimer_Elapsed(object sender, ElapsedEventArgs e) { - if (IsStarted) - { - TelemetryJobStatus tStatus = new TelemetryJobStatus(); + if (!IsStarted) return; - tStatus.JobName = _job?.Name; + TelemetryJobStatus toEmit = null; + DateTime now = DateTime.UtcNow; - if (status.ProgressMinusSettingUp > 0) - { - tStatus.Status = TelemetryJobStatus.JobStatus.InProgress; - } - - if (status.IsCompleted) - { - tStatus.Status = TelemetryJobStatus.JobStatus.Completed; - } - - if (status.IsFailed) + lock (_lock) + { + // Only emit if we have a newer status than last emitted, + // and that status is fresh (arrived within the last 5 seconds). + if (_lastStatus != null && + _lastStatusArrivedUtc > _lastEmittedUtc && + (now - _lastStatusArrivedUtc) <= TimeSpan.FromSeconds(5)) { - tStatus.Status = TelemetryJobStatus.JobStatus.Failed; + toEmit = _lastStatus; + _lastEmittedUtc = now; // mark emission (1 per tick max) } + } - if (status.IsCanceled) + if (toEmit != null) + { + TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs { - tStatus.Status = TelemetryJobStatus.JobStatus.Aborted; - } - - tStatus.ID = _groupID; - tStatus.TotalTime = status.TotalTime; - tStatus.RemainingTime = status.RemainingTime; - - tStatus.Progress = status.ProgressMinusSettingUp; - tStatus.TotalProgress = status.TotalProgressMinusSettingUp; + TelemetryObject = toEmit, + DisableDeliveryRetries = true + }); + } + } - tStatus.CurrentUnit = status.CurrentUnit; - tStatus.RemainingUnits = status.RemainingUnits; + private void JobHandler_StatusChanged(object sender, RunningJobStatus status) + { + if (!IsStarted) return; - tStatus.CurrentUnitProgress = status.CurrentUnitProgress; - tStatus.CurrentUnitTotalProgress = status.CurrentUnitTotalProgress; + // CHANGED: just update the latest snapshot fast; do NOT emit here. + var tStatus = new TelemetryJobStatus + { + JobName = _job?.Name, + ID = _groupID, + TotalTime = status.TotalTime, + RemainingTime = status.RemainingTime, + Progress = status.ProgressMinusSettingUp, + TotalProgress = status.TotalProgressMinusSettingUp, + CurrentUnit = status.CurrentUnit, + RemainingUnits = status.RemainingUnits, + CurrentUnitProgress = status.CurrentUnitProgress, + CurrentUnitTotalProgress = status.CurrentUnitTotalProgress, + Message = status.Message + }; - tStatus.Message = status.Message; + 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; + lock (_lock) + { _lastStatus = tStatus; - - TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs() - { - TelemetryObject = tStatus, - DisableDeliveryRetries = true - }); + _lastStatusArrivedUtc = DateTime.UtcNow; } } private void JobHandler_Failed(object sender, Exception e) { - if (_lastStatus != null) + // CHANGED: update the latest snapshot and let the timer emit it (within ~1s) + lock (_lock) { - _lastStatus.Message = e.FlattenMessage(); - - TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs() + if (_lastStatus != null) { - TelemetryObject = _lastStatus, - DisableDeliveryRetries = true - }); + _lastStatus.Message = e.FlattenMessage(); + _lastStatus.Status = TelemetryJobStatus.JobStatus.Failed; + _lastStatusArrivedUtc = DateTime.UtcNow; + } } } |
