diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-07-29 02:05:52 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-07-29 02:05:52 +0300 |
| commit | 3f86a214b4459e619a5a767369b996e56cd17564 (patch) | |
| tree | a71b6c68ac219183a6cc2bbb5ee4206fd8e053f0 /Software/Visual_Studio/Tango.Telemetry/TelemetryPublisher.cs | |
| parent | 70f9f4dcbe3d4537ff2bd503f18288b9a7b0e19e (diff) | |
| download | Tango-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.cs | 38 |
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); } } |
