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/PPC/Tango.PPC.UI/Telemetry/DefaultTelemetryProvider.cs | |
| parent | d9d5b0161efbce3f0d44e890b435883f49df2963 (diff) | |
| download | Tango-a1d55aa060450b0a16b597794686b2aa41eea259.tar.gz Tango-a1d55aa060450b0a16b597794686b2aa41eea259.zip | |
PPC Telemetry First Integration.
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/Telemetry/DefaultTelemetryProvider.cs')
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.UI/Telemetry/DefaultTelemetryProvider.cs | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Telemetry/DefaultTelemetryProvider.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Telemetry/DefaultTelemetryProvider.cs new file mode 100644 index 000000000..04837bb38 --- /dev/null +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Telemetry/DefaultTelemetryProvider.cs @@ -0,0 +1,209 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Tango.BL; +using Tango.BL.Entities; +using Tango.Core.DI; +using Tango.PPC.Common; +using Tango.PPC.Common.Application; +using Tango.PPC.Common.Connection; +using Tango.PPC.Common.Telemetry; +using Tango.PPC.Common.Web; +using Tango.Settings; +using Tango.Telemetry; +using Tango.Telemetry.Destinations; +using Tango.Telemetry.Helpers; +using Tango.Telemetry.Sources; + +namespace Tango.PPC.UI.Telemetry +{ + [TangoCreateWhenRegistered] + public class DefaultTelemetryProvider : ITelemetryProvider, ITelemetryCheckpointsRecoveryClient + { + private PPCWebClient _webClient; + private Machine _machine; + private IMachineProvider _machineProvider; + private PPCSettings _ppcSettings; + + public TelemetrySettings Settings { get; set; } + + public ITelemetryPublisher TelemetryPublisher { get; set; } + + public DefaultTelemetryProvider(IPPCApplicationManager applicationManager, IMachineProvider machineProvider, PPCWebClient webClient) + { + Settings = SettingsManager.Default.GetOrCreate<TelemetrySettings>(); + applicationManager.ApplicationReady += ApplicationManager_ApplicationReady; + _webClient = webClient; + _machineProvider = machineProvider; + } + + private void ApplicationManager_ApplicationReady(object sender, EventArgs e) + { + try + { + if (Settings.Enable) + { + Init(); + } + } + catch { } + } + + private void Init() + { + if (_machineProvider.Machine == null) return; + + _machine = _machineProvider.Machine; + + _ppcSettings = SettingsManager.Default.GetOrCreate<PPCSettings>(); + + using (ObservablesContext db = ObservablesContext.CreateDefault()) + { + var site = db.Sites.FirstOrDefault(x => x.Guid == _machine.SiteGuid); + + TelemetryPublisher = new TelemetryPublisher(new TelemetryPublisherConfiguration() + { + Environment = _ppcSettings.DeploymentSlot.ToString(), + Organization = _machine.Organization.Name, + Site = site?.Name, + SerialNumber = _machine.SerialNumber, + MachineType = _machine.Type, + EnableBackoff = Settings.EnableBackoff, + HistorySourcesRequestInterval = Settings.HistorySourcesRequestInterval, + MaxExponentialBackoff = Settings.MaxExponentialBackoff, + PendingStorageCheckInterval = Settings.PendingStorageCheckInterval, + }, this); + + (TelemetryPublisher.StorageManager as TelemetryLiteDBStorageManager).EnableCheckPointsRecovery = true; + (TelemetryPublisher.StorageManager as TelemetryLiteDBStorageManager).EnforceCheckpointsRecovery = true; + } + + InternetConnectivity.EnsureStarted(); + + Task.Factory.StartNew(async () => + { + while (!InternetConnectivity.IsInternetAvailable()) + { + Thread.Sleep(5000); + } + + if (!_webClient.IsAuthenticated) + { + await _webClient.Login(new LoginRequest() { Mode = LoginMode.Machine, SerialNumber = _machine.SerialNumber, MachineGuid = _machine.Guid }); + } + + var response = await _webClient.GetTelemetryDeviceConnection(new TelemetryDeviceRegistrationRequest()); + Settings.IoTHubConnectionString = response.ConnectionString; + Settings.Save(); + + if (Settings.EnableIoTHub) + { + TelemetryPublisher.RegisterDestination(new TelemetryAzureHubDestination(Settings.IoTHubConnectionString)); + } + + if (Settings.EnableMqtt) + { + TelemetryPublisher.RegisterDestination(new TelemetryMqttDestination($"Twine {_machine.SerialNumber}")); + } + + if (Settings.SendDiagnostics) + { + TelemetryPublisher.RegisterSource(new TelemetryDiagnosticsStreamingSource(_machineProvider.MachineOperator) + { + Config = new TelemetryDiagnosticsStreamingSourceConfig() + { + DiagnosticsSamplingInterval = Settings.DiagnosticsSamplingInterval, + } + }); + } + + if (Settings.SendEvents) + { + TelemetryPublisher.RegisterSource(new TelemetryEventsStreamingSource(_machineProvider.MachineOperator)); + } + + if (Settings.SendJobRuns) + { + TelemetryPublisher.RegisterSource(new TelemetryJobRunsStreamingSource(_machineProvider.MachineOperator)); + } + + if (Settings.SendJobRunsHistory) + { + TelemetryPublisher.RegisterSource(new TelemetryJobRunsHistorySource() { Config = new TelemetryJobRunsHistorySourceConfig() { MaxJobRunsPerRequest = 10 } }); + } + + if (Settings.SendJobStatus) + { + TelemetryPublisher.RegisterSource(new TelemetryJobStatusSource(_machineProvider.MachineOperator)); + } + + if (Settings.SendLogs) + { + TelemetryPublisher.RegisterSource(new TelemetryLogsStreamingSource(_machineProvider.MachineOperator) + { + Config = new TelemetryLogsStreamingSourceConfig() + { + Categories = Settings.LogCategories + } + }); + } + + if (Settings.SendMachineStatus) + { + TelemetryPublisher.RegisterSource(new TelemetryMachineStatusStreamingSource(_machineProvider.MachineOperator)); + } + + if (Settings.SendMachineUpdates) + { + TelemetryPublisher.RegisterSource(new TelemetryMachineUpdatesStreamingSource()); + } + + if (Settings.SendMachineUpdatesHistory) + { + TelemetryPublisher.RegisterSource(new TelemetryMachineUpdatesHistorySource()); + } + + if (Settings.SendWires) + { + TelemetryPublisher.RegisterSource(new TelemetryWireStreamingSource(_machineProvider.MachineOperator)); + } + + await TelemetryPublisher.Start(); + }); + } + + public async Task<List<TelemetryHistorySourceCheckPoint>> GetCheckpointsBackup() + { + var response = await _webClient.GetTelemetryCheckPoints(new TelemetryGetCheckPointsRequest()); + return response.Checkpoints + .Select(x => new TelemetryHistorySourceCheckPoint() + { + SourceName = x.SourceName, + Time = x.Time, + TotalCount = x.TotalCount + }) + .ToList(); + } + + public async Task SaveCheckpointsBackup(List<TelemetryHistorySourceCheckPoint> checkPoints) + { + await _webClient.SetTelemetryCheckPoints(new TelemetrySetCheckPointsRequest() + { + Checkpoints = checkPoints.Select(x => new TelemetryCheckPoint() + { + SourceName = x.SourceName, + Time = x.Time, + TotalCount = x.TotalCount + }).ToList() + }); + } + + public void Dispose() + { + + } + } +} |
