aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2025-07-29 02:05:52 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2025-07-29 02:05:52 +0300
commit3f86a214b4459e619a5a767369b996e56cd17564 (patch)
treea71b6c68ac219183a6cc2bbb5ee4206fd8e053f0 /Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs
parent70f9f4dcbe3d4537ff2bd503f18288b9a7b0e19e (diff)
downloadTango-3f86a214b4459e619a5a767369b996e56cd17564.tar.gz
Tango-3f86a214b4459e619a5a767369b996e56cd17564.zip
Exponential Backoff
Diffstat (limited to 'Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs')
-rw-r--r--Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs38
1 files changed, 20 insertions, 18 deletions
diff --git a/Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs b/Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs
index 81cd88b2d..662df9bae 100644
--- a/Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs
+++ b/Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs
@@ -34,21 +34,21 @@ namespace Tango.Telemetry
private bool _emptyWritten;
private IMachineOperator _machineOperator;
- private TelemetryPendingStorageManager _pendingStorageManager;
#region Properties
public TelemetryPublisherConfiguration Config { get; private set; }
+ public ITelemetryPendingStorageManager PendingStorageManager { get; private set; }
public bool IsStarted { get; private set; }
#endregion
#region Constructor
- public TelemetryPublisher(IMachineOperator machineOperator, TelemetryPendingStorageManager storageManager, TelemetryPublisherConfiguration config)
+ public TelemetryPublisher(IMachineOperator machineOperator, ITelemetryPendingStorageManager storageManager, TelemetryPublisherConfiguration config)
{
_machineOperator = machineOperator;
- _pendingStorageManager = storageManager;
+ PendingStorageManager = storageManager;
Config = config ?? new TelemetryPublisherConfiguration();
@@ -191,7 +191,7 @@ namespace Tango.Telemetry
private void PendingStorageCheckTimer_Elapsed(object sender, ElapsedEventArgs e)
{
- var telemetryAll = _pendingStorageManager.GetTelemetryAll();
+ var telemetryAll = PendingStorageManager.GetTelemetryAll();
foreach (var t in telemetryAll)
{
@@ -239,7 +239,7 @@ namespace Tango.Telemetry
}
}
- private async Task PublishTelemetryPackage(TelemetryPublishPackage package)
+ protected virtual async Task PublishTelemetryPackage(TelemetryPublishPackage package)
{
List<KeyValuePair<String, String>> properties = new List<KeyValuePair<string, string>>();
@@ -247,26 +247,28 @@ namespace Tango.Telemetry
properties.Add(new KeyValuePair<string, string>("Model", Config.MachineType.ToShortName()));
properties.Add(new KeyValuePair<string, string>("Environment", Config.Environment));
- List<String> pendingDestinations = package.TelemetryObject.PendingDestinations.ToList();
+ List<TelemetryPendingDestination> pendingDestinations = package.TelemetryObject.PendingDestinations.ToList();
//Add all destinations if streaming or external (They will be remove later if successfull)
//If source is "PendingStorage" the "PendingDestination" would be already propagated from the pending storage db.
if (package.Source == TelemetrySource.Streaming || package.Source == TelemetrySource.ExternalStorage)
{
- pendingDestinations.AddRange(Config.TelemetryDestinations.Select(x => x.GetType().Name));
+ foreach (var destination in Config.TelemetryDestinations)
+ {
+ if (!pendingDestinations.Exists(x => x.Name == destination.Name))
+ {
+ pendingDestinations.Add(new TelemetryPendingDestination { Name = destination.Name });
+ }
+ }
}
- pendingDestinations = pendingDestinations.Distinct().ToList();
-
foreach (var destination in Config.TelemetryDestinations.Where(x => x.SupportedSources.Contains(package.Source)))
{
- String destinationName = destination.GetType().Name;
-
- if (pendingDestinations.Contains(destinationName))
+ if (pendingDestinations.Exists(x => x.Name == destination.Name))
{
try
{
- pendingDestinations.Remove(destinationName);
+ pendingDestinations.RemoveAll(x => x.Name == destination.Name);
if (OnPublishingPackage(package, destination))
{
await destination.Publish(package, properties);
@@ -275,15 +277,15 @@ namespace Tango.Telemetry
}
catch (Exception ex)
{
- LogManager.Log(ex, $"Error publishing telemetry package to destination {destinationName}.");
+ LogManager.Log(ex, $"Error publishing telemetry package to destination {destination.Name}.");
OnPackagePublishFailed(package, destination, ex);
if (destination.SupportedSources.Contains(TelemetrySource.PendingStorage))
{
- if (!pendingDestinations.Contains(destinationName))
+ if (!pendingDestinations.Exists(x => x.Name == destination.Name))
{
- pendingDestinations.Add(destinationName);
+ pendingDestinations.Add(new TelemetryPendingDestination() { Name = destination.Name });
}
}
}
@@ -294,11 +296,11 @@ namespace Tango.Telemetry
if (package.Source == TelemetrySource.PendingStorage && package.TelemetryObject.PendingDestinations.Count == 0)
{
- _pendingStorageManager.DeleteTelemetryObject(package.TelemetryObject);
+ PendingStorageManager.DeleteTelemetryObject(package.TelemetryObject);
}
else
{
- _pendingStorageManager.InsertOrUpdateTelemetryObject(package.TelemetryObject);
+ PendingStorageManager.InsertOrUpdateTelemetryObject(package.TelemetryObject);
}
}