From 9d2bca0f44fe0a4a2f25e819f6c27974181f5221 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 19 Aug 2025 23:12:47 +0300 Subject: Machine Service Telemetry Checkpoints & Device Registration. --- .../Controllers/DownloadsController.cs | 93 +++++++++++----------- .../Controllers/PPCController.cs | 52 ++++++++++++ 2 files changed, 99 insertions(+), 46 deletions(-) (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers') diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DownloadsController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DownloadsController.cs index b2de177aa..c99cfcf6d 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DownloadsController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/DownloadsController.cs @@ -21,62 +21,63 @@ namespace Tango.MachineService.Controllers { public class DownloadsController : Controller { - [Authorize] public ActionResult Index() { - List downloads = new List(); + return new RedirectResult("https://twine-srv.com/"); - using (ObservablesContext db = ObservablesWebContext.CreateContext()) - { - foreach (var item in db.MachineStudioVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).ToList()) - { - DownloadModel download = new DownloadModel(); - download.App = DownloadModel.DownloadApp.MachineStudio; - download.ID = item.InstallerBlobName; - download.Name = $"Machine Studio v{item.Version}.exe"; - download.Version = item.Version; - download.User = item.User.Contact.FullName; - download.Date = item.LastUpdated; - download.Comments = item.Comments; + //List downloads = new List(); - downloads.Add(download); - } + //using (ObservablesContext db = ObservablesWebContext.CreateContext()) + //{ + // foreach (var item in db.MachineStudioVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).ToList()) + // { + // DownloadModel download = new DownloadModel(); + // download.App = DownloadModel.DownloadApp.MachineStudio; + // download.ID = item.InstallerBlobName; + // download.Name = $"Machine Studio v{item.Version}.exe"; + // download.Version = item.Version; + // download.User = item.User.Contact.FullName; + // download.Date = item.LastUpdated; + // download.Comments = item.Comments; - foreach (var item in db.TangoVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).Include(x => x.MachineVersion).Where(x => x.MachineVersion.Version == 1).ToList()) - { - DownloadModel download = new DownloadModel(); - download.App = DownloadModel.DownloadApp.PPC; - download.ID = item.InstallerBlobName; - download.Name = $"PPC v{item.VersionAndTag}.exe"; - download.Version = item.Version; - download.User = item.User.Contact.FullName; - download.Date = item.LastUpdated; - download.Comments = item.Comments; + // downloads.Add(download); + // } - downloads.Add(download); - } + // foreach (var item in db.TangoVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).Include(x => x.MachineVersion).Where(x => x.MachineVersion.Version == 1).ToList()) + // { + // DownloadModel download = new DownloadModel(); + // download.App = DownloadModel.DownloadApp.PPC; + // download.ID = item.InstallerBlobName; + // download.Name = $"PPC v{item.VersionAndTag}.exe"; + // download.Version = item.Version; + // download.User = item.User.Contact.FullName; + // download.Date = item.LastUpdated; + // download.Comments = item.Comments; - foreach (var item in db.TangoVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).Include(x => x.MachineVersion).Where(x => x.MachineVersion.Version == 2).ToList()) - { - DownloadModel download = new DownloadModel(); - download.App = DownloadModel.DownloadApp.Eureka; - download.ID = item.InstallerBlobName; - download.Name = $"Twine4X v{item.VersionAndTag}.exe"; - download.Version = item.Version; - download.User = item.User.Contact.FullName; - download.Date = item.LastUpdated; - download.Comments = item.Comments; + // downloads.Add(download); + // } - downloads.Add(download); - } - } + // foreach (var item in db.TangoVersions.Where(x => x.InstallerBlobName != null).Include(x => x.User).Include(x => x.User.Contact).Include(x => x.MachineVersion).Where(x => x.MachineVersion.Version == 2).ToList()) + // { + // DownloadModel download = new DownloadModel(); + // download.App = DownloadModel.DownloadApp.Eureka; + // download.ID = item.InstallerBlobName; + // download.Name = $"Twine4X v{item.VersionAndTag}.exe"; + // download.Version = item.Version; + // download.User = item.User.Contact.FullName; + // download.Date = item.LastUpdated; + // download.Comments = item.Comments; + + // downloads.Add(download); + // } + //} - downloads = downloads.OrderByDescending(x => x.Date).ToList(); + //downloads = downloads.OrderByDescending(x => x.Date).ToList(); - IndexViewModel model = new IndexViewModel(); - model.Downloads = downloads; + //IndexViewModel model = new IndexViewModel(); + //model.Downloads = downloads; - return View(model); + //return View(model); } [Authorize] @@ -100,4 +101,4 @@ namespace Tango.MachineService.Controllers return Redirect(signature); } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs index b60bc77c0..41266cda5 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs @@ -28,6 +28,10 @@ using Z.EntityFramework.Plus; using Twilio; using Twilio.Rest.Api.V2010.Account; using Twilio.Types; +using Microsoft.WindowsAzure.Storage; +using Tango.Web; +using Microsoft.WindowsAzure.Storage.Table; +using Tango.MachineService.Telemetry; namespace Tango.MachineService.Controllers { @@ -1114,5 +1118,53 @@ namespace Tango.MachineService.Controllers } #endregion + + #region Telemetry + + [HttpPost] + [JwtTokenFilter] + public TelemetrySetCheckPointsResponse SetTelemetryCheckPoints(TelemetrySetCheckPointsRequest request) + { + TelemetryCheckpointStore store = new TelemetryCheckpointStore(MachineServiceConfig.STORAGE_ACCOUNT); + store.SaveMany(RequestToken.Object.MachineGuid, request.Checkpoints); + return new TelemetrySetCheckPointsResponse(); + } + + [HttpPost] + [JwtTokenFilter] + public TelemetryGetCheckPointsResponse GetTelemetryCheckPoints(TelemetryGetCheckPointsRequest request) + { + TelemetryCheckpointStore store = new TelemetryCheckpointStore(MachineServiceConfig.STORAGE_ACCOUNT); + var checkPoints = store.GetAllForMachine(RequestToken.Object.MachineGuid).ToList(); + return new TelemetryGetCheckPointsResponse() { Checkpoints = checkPoints }; + } + + [HttpPost] + [JwtTokenFilter] + public TelemetryDeviceRegistrationResponse GetTelemetryDeviceConnection(TelemetryDeviceRegistrationRequest request) + { + var response = new TelemetryDeviceRegistrationResponse(); + + using (ObservablesContext db = ObservablesWebContext.CreateContext()) + { + var machine = db.Machines.SingleOrDefault(x => x.Guid == RequestToken.Object.MachineGuid); + if (machine == null) + throw new AuthenticationException("The specified machine could not be found."); + + string serialNumber = machine.SerialNumber; + string storageAccount = MachineServiceConfig.STORAGE_ACCOUNT; // Azure Storage CS + string iotHubService = MachineServiceConfig.IOT_HUB_CONNECTION_STRING; // iothubowner SAS (service) CS + + var mgr = new TelemetryDeviceRegistrationManager(storageAccount, iotHubService); + + string iotHubDeviceConnectionString = mgr.GetOrCreateDeviceConnectionString(machine.Guid, serialNumber); + + response.ConnectionString = iotHubDeviceConnectionString; + } + + return response; + } + + #endregion } } -- cgit v1.3.1