aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Telemetry/Sources
diff options
context:
space:
mode:
authorRoy Ben Shabat <roy.mail.net@gmail.com>2025-08-30 22:05:03 +0300
committerRoy Ben Shabat <roy.mail.net@gmail.com>2025-08-30 22:05:03 +0300
commita1d55aa060450b0a16b597794686b2aa41eea259 (patch)
tree62dfd7829b81335103a3c2d1d17c99d8408a5e54 /Software/Visual_Studio/Tango.Telemetry/Sources
parentd9d5b0161efbce3f0d44e890b435883f49df2963 (diff)
downloadTango-a1d55aa060450b0a16b597794686b2aa41eea259.tar.gz
Tango-a1d55aa060450b0a16b597794686b2aa41eea259.zip
PPC Telemetry First Integration.
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry/Sources')
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs2
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs2
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryJobStatusSource.cs126
3 files changed, 83 insertions, 47 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs
index 657fa83e8..a5b2da647 100644
--- a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs
+++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSource.cs
@@ -37,7 +37,7 @@ namespace Tango.Telemetry.Sources
_diagnosticsQueue = new List<StartDiagnosticsResponse>();
}
- public TelemetryDiagnosticsStreamingSource(IMachineOperator machineOperator) : base()
+ public TelemetryDiagnosticsStreamingSource(IMachineOperator machineOperator) : this()
{
_machineOperator = machineOperator;
_machineOperator.DiagnosticsDataAvailable += DiagnosticsDataAvailable;
diff --git a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs
index c161ed680..032d318d9 100644
--- a/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs
+++ b/Software/Visual_Studio/Tango.Telemetry/Sources/TelemetryDiagnosticsStreamingSourceConfig.cs
@@ -13,7 +13,7 @@ namespace Tango.Telemetry.Sources
public TelemetryDiagnosticsStreamingSourceConfig()
{
- DiagnosticsSamplingInterval = TimeSpan.FromSeconds(10);
+ DiagnosticsSamplingInterval = TimeSpan.FromSeconds(60);
}
}
}
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;
+ }
}
}