From 242cb9fd566647406792d63547b61ec1d6a5f3bc Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Thu, 28 Nov 2019 16:12:39 +0200 Subject: Added PPC pending updates... --- .../Controllers/PPCController.cs | 94 ++++++++++++++++++++-- 1 file changed, 89 insertions(+), 5 deletions(-) (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Controllers') diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs index a77212787..4c39aad80 100644 --- a/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs +++ b/Software/Visual_Studio/Web/Tango.MachineService/Controllers/PPCController.cs @@ -30,7 +30,9 @@ namespace Tango.MachineService.Controllers public class PPCController : TangoController { private static List _pendingUploads; + private static List _pendingUpdates; private ActiveDirectoryManager _ad_manager; + private const int SQL_TEMP_CREDENTIALS_EXP_MINUTS = 20; public class TokenObject { @@ -44,6 +46,7 @@ namespace Tango.MachineService.Controllers static PPCController() { _pendingUploads = new List(); + _pendingUpdates = new List(); } public PPCController() @@ -60,6 +63,7 @@ namespace Tango.MachineService.Controllers public MachineSetupResponse MachineSetup(MachineSetupRequest request) { MachineSetupResponse response = new MachineSetupResponse(); + response.NotifyCompletedToken = Guid.NewGuid().ToString(); LogManager.Log("Setup request received: " + request.ToString()); @@ -98,8 +102,6 @@ namespace Tango.MachineService.Controllers machine.DeviceId = request.DeviceID; machine.IsDeviceRegistered = true; - db.SaveChanges(); - var machine_version = db.MachineVersions.SingleOrDefault(x => x.Guid == machine.MachineVersionGuid); var latest_machine_version = db.TangoVersions.Where(x => x.MachineVersionGuid == machine_version.Guid).ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); @@ -118,7 +120,7 @@ namespace Tango.MachineService.Controllers { credentials = smo.CreateRandomLoginAndUser(); - Task.Delay(TimeSpan.FromMinutes(10)).ContinueWith((x) => + Task.Delay(TimeSpan.FromMinutes(SQL_TEMP_CREDENTIALS_EXP_MINUTS)).ContinueWith((x) => { using (SmoManager m = new SmoManager()) { @@ -143,6 +145,22 @@ namespace Tango.MachineService.Controllers response.SetupUWF = machine.SetupUwf; response.SetupFirmware = machine.SetupFirmware; response.IsDemo = machine.IsDemo; + + TangoUpdate tangoUpdate = new TangoUpdate(); + tangoUpdate.ApplicationVersion = latest_machine_version.Version; + tangoUpdate.FirmwareVersion = latest_machine_version.FirmwareVersion; + tangoUpdate.MachineGuid = machine.Guid; + tangoUpdate.StartDate = DateTime.UtcNow; + tangoUpdate.UpdateStatus = TangoUpdateStatuses.SetupStarted; + db.TangoUpdates.Add(tangoUpdate); + + db.SaveChanges(); + + _pendingUpdates.Add(new PPCPendingUpdate() + { + Token = response.NotifyCompletedToken, + TangoUpdateGuid = tangoUpdate.Guid, + }); } return response; @@ -153,6 +171,7 @@ namespace Tango.MachineService.Controllers public DownloadUpdateResponse MachineUpdate(DownloadUpdateRequest request) { DownloadUpdateResponse response = new DownloadUpdateResponse(); + response.NotifyCompletedToken = Guid.NewGuid().ToString(); using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { @@ -184,7 +203,7 @@ namespace Tango.MachineService.Controllers { credentials = smo.CreateRandomLoginAndUser(); - Task.Delay(TimeSpan.FromMinutes(10)).ContinueWith((x) => + Task.Delay(TimeSpan.FromMinutes(SQL_TEMP_CREDENTIALS_EXP_MINUTS)).ContinueWith((x) => { using (SmoManager m = new SmoManager()) { @@ -202,11 +221,56 @@ namespace Tango.MachineService.Controllers IntegratedSecurity = false, Type = DataSourceType.SQLServer, }; + + TangoUpdate tangoUpdate = new TangoUpdate(); + tangoUpdate.ApplicationVersion = latest_machine_version.Version; + tangoUpdate.FirmwareVersion = latest_machine_version.FirmwareVersion; + tangoUpdate.MachineGuid = machine.Guid; + tangoUpdate.StartDate = DateTime.UtcNow; + tangoUpdate.UpdateStatus = TangoUpdateStatuses.UpdateStarted; + db.TangoUpdates.Add(tangoUpdate); + + db.SaveChanges(); + + _pendingUpdates.Add(new PPCPendingUpdate() + { + Token = response.NotifyCompletedToken, + TangoUpdateGuid = tangoUpdate.Guid, + }); } return response; } + [HttpPost] + [JwtTokenFilter] + public MachineUpdateCompletedResponse NotifyUpdateCompleted(MachineUpdateCompletedRequest request) + { + var pendingUpdate = _pendingUpdates.SingleOrDefault(x => x.Token == request.Token); + if (pendingUpdate != null) + { + _pendingUpdates.Remove(pendingUpdate); + + using (ObservablesContext db = ObservablesContextHelper.CreateContext()) + { + var tangoUpdate = db.TangoUpdates.SingleOrDefault(x => x.Guid == pendingUpdate.TangoUpdateGuid); + + if (tangoUpdate != null) + { + tangoUpdate.LastUpdated = DateTime.UtcNow; + tangoUpdate.UpdateStatus = request.Status; + tangoUpdate.EndDate = DateTime.UtcNow; + tangoUpdate.FailedReason = request.FailedReason; + tangoUpdate.FailedLog = request.FailedLog; + + db.SaveChanges(); + } + } + } + + return new MachineUpdateCompletedResponse(); + } + [HttpPost] [JwtTokenFilter] public CheckForUpdateResponse CheckForUpdates(CheckForUpdateRequest request) @@ -255,6 +319,7 @@ namespace Tango.MachineService.Controllers public UpdateDBResponse UpdateDB(UpdateDBRequest request) { UpdateDBResponse response = new UpdateDBResponse(); + response.NotifyCompletedToken = Guid.NewGuid().ToString(); using (ObservablesContext db = ObservablesContextHelper.CreateContext()) { @@ -276,7 +341,7 @@ namespace Tango.MachineService.Controllers { credentials = manager.CreateRandomLoginAndUser(); - Task.Delay(TimeSpan.FromMinutes(10)).ContinueWith((x) => + Task.Delay(TimeSpan.FromMinutes(SQL_TEMP_CREDENTIALS_EXP_MINUTS)).ContinueWith((x) => { using (SmoManager m = new SmoManager()) { @@ -294,6 +359,25 @@ namespace Tango.MachineService.Controllers IntegratedSecurity = false, Type = DataSourceType.SQLServer, }; + + var machine_version = db.MachineVersions.SingleOrDefault(x => x.Guid == machine.MachineVersionGuid); + var latest_machine_version = db.TangoVersions.Where(x => x.MachineVersionGuid == machine_version.Guid).ToList().OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + + TangoUpdate tangoUpdate = new TangoUpdate(); + tangoUpdate.ApplicationVersion = latest_machine_version.Version; + tangoUpdate.FirmwareVersion = latest_machine_version.FirmwareVersion; + tangoUpdate.MachineGuid = machine.Guid; + tangoUpdate.StartDate = DateTime.UtcNow; + tangoUpdate.UpdateStatus = TangoUpdateStatuses.DatabaseStarted; + db.TangoUpdates.Add(tangoUpdate); + + db.SaveChanges(); + + _pendingUpdates.Add(new PPCPendingUpdate() + { + Token = response.NotifyCompletedToken, + TangoUpdateGuid = tangoUpdate.Guid, + }); } return response; -- cgit v1.3.1