diff options
| author | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
|---|---|---|
| committer | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
| commit | 00a491d93733d4625ad329b2ba8237f445364b3f (patch) | |
| tree | 4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs | |
| parent | 124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff) | |
| download | Tango-00a491d9.tar.gz Tango-00a491d9.zip | |
merge
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs')
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs | 200 |
1 files changed, 43 insertions, 157 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs index 15902f629..004c37096 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs @@ -11,15 +11,12 @@ using System.Net.Http.Headers; using System.Text; using System.Threading; using System.Threading.Tasks; -using Tango.BL; -using Tango.BL.Entities; using Tango.Core; using Tango.Core.DB; using Tango.Core.ExtensionMethods; using Tango.Core.Helpers; using Tango.Core.IO; using Tango.Integration.Operation; -using Tango.Logging; using Tango.PMR.Synchronization; using Tango.PPC.Common.Application; using Tango.PPC.Common.Connection; @@ -31,7 +28,6 @@ using Tango.Settings; using Tango.SharedUI.Helpers; using Tango.SQLExaminer; using Tango.Transport.Web; -using System.Data.Entity; namespace Tango.PPC.Common.MachineSetup { @@ -46,9 +42,6 @@ namespace Tango.PPC.Common.MachineSetup private IUnifiedWriteFilterManager _uwf; private IOperationSystemManager _windows_manager; private PPCWebClient _client; - private List<LogItemBase> _logs; - private bool _isUpdating; - private DateTime _setupStartDate; #region Events @@ -87,21 +80,6 @@ namespace Tango.PPC.Common.MachineSetup _remoteAssistance = remoteAssistance; _uwf = unifiedWriterFilterManager; _windows_manager = operationSystemManager; - - _logs = new List<LogItemBase>(); - LogManager.NewLog += LogManager_NewLog; - } - - #endregion - - #region Event Handlers - - private void LogManager_NewLog(object sender, LogItemBase e) - { - if (_isUpdating) - { - _logs.Add(e); - } } #endregion @@ -121,82 +99,6 @@ namespace Tango.PPC.Common.MachineSetup }); } - private async void OnFailed(Exception ex, TaskCompletionSource<MachineSetupResult> completionSource, MachineSetupResponse response) - { - LogManager.Log(ex, "An error occurred in machine setup."); - - completionSource.SetException(ex); - - if (response != null) - { - try - { - var result = await _client.NotifyUpdateCompleted(new MachineUpdateCompletedRequest() - { - Token = response.NotifyCompletedToken, - Status = BL.Enumerations.TangoUpdateStatuses.SetupFailed, - FailedReason = ex.FlattenMessage(), - FailedLog = GetLogsStringAndClear(), - }); - } - catch (Exception xx) - { - LogManager.Log(xx, "Error notifying setup completed."); - } - } - - _isUpdating = false; - } - - private async void OnCompleted(MachineSetupResult result, TaskCompletionSource<MachineSetupResult> completionSource, MachineSetupResponse response) - { - completionSource.SetResult(result); - - if (response != null) - { - try - { - var r = await _client.NotifyUpdateCompleted(new MachineUpdateCompletedRequest() - { - Token = response.NotifyCompletedToken, - Status = BL.Enumerations.TangoUpdateStatuses.SetupCompleted, - }); - } - catch (Exception xx) - { - LogManager.Log(xx, "Error notifying setup completed."); - } - - try - { - using (ObservablesContext db = ObservablesContext.CreateDefault()) - { - TangoUpdate update = new TangoUpdate(); - update.ApplicationVersion = response.Version; - update.FirmwareVersion = response.FirmwareVersion; - update.MachineGuid = (await db.Machines.FirstAsync()).Guid; - update.UpdateStatus = BL.Enumerations.TangoUpdateStatuses.SetupCompleted; - update.StartDate = _setupStartDate; - update.EndDate = DateTime.UtcNow; - await db.SaveChangesAsync(); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error saving tango setup information to database."); - } - } - - _isUpdating = false; - } - - private String GetLogsStringAndClear() - { - String logsString = String.Join(Environment.NewLine, _logs.ToList().Select(x => x.ToString())); - _logs.Clear(); - return logsString; - } - #endregion #region Public Methods @@ -209,17 +111,10 @@ namespace Tango.PPC.Common.MachineSetup /// <returns></returns> public async Task<MachineSetupResult> Setup(string serialNumber) { - _logs.Clear(); - TaskCompletionSource<MachineSetupResult> result = new TaskCompletionSource<MachineSetupResult>(); - MachineSetupResponse setup_response = null; - _setupStartDate = DateTime.UtcNow; - try { - _isUpdating = true; - LogManager.Log($"Starting machine setup for serial number {serialNumber}..."); var machineServiceAddress = SettingsManager.Default.GetOrCreate<PPCSettings>().GetMachineServiceAddress(); @@ -235,24 +130,16 @@ namespace Tango.PPC.Common.MachineSetup Login(serialNumber).Wait(); - String deviceName = $"Tango-{serialNumber}-{settings.DeploymentSlot.ToString()}"; - LogManager.Log($"Settings device name: '{deviceName}'..."); - try - { - await _windows_manager.SetDeviceName(deviceName); - } - catch - { - throw new IOException("Error setting device name."); - } - MachineSetupRequest request = new MachineSetupRequest(); + request.SerialNumber = serialNumber; request.DeviceID = await _windows_manager.GetDeviceId(); - request.DeviceName = deviceName; + request.DeviceName = await _windows_manager.GetDeviceName(); + + + MachineSetupResponse setup_response = null; try { - LogManager.Log($"Sending setup request...\n{request.ToJsonString()}"); setup_response = await _client.MachineSetup(request); } catch (Exception ex) @@ -288,20 +175,20 @@ namespace Tango.PPC.Common.MachineSetup UpdateProgress("Activating operation system license", "Activating..."); await _windows_manager.Activate(setup_response.OSKey); } - } - if (setup_response.SetupRemoteAssistance) - { - LogManager.Log("Installing remote assistance..."); - UpdateProgress("Installing remote assistance", "Installing..."); - await _remoteAssistance.InstallRemoteAssistance(serialNumber, setup_response.Organization, settings.DeploymentSlot.ToString()); - } + if (setup_response.SetupRemoteAssistance) + { + LogManager.Log("Installing remote assistance..."); + UpdateProgress("Installing remote assistance", "Installing..."); + await _remoteAssistance.InstallRemoteAssistance(serialNumber); + } - if (setup_response.SetupUWF) - { - LogManager.Log("Activating unified write filter..."); - UpdateProgress("Activating disk protection", "Activating..."); - await _uwf.Setup(); + if (setup_response.SetupUWF) + { + LogManager.Log("Activating unified write filter..."); + UpdateProgress("Activating disk protection", "Activating..."); + await _uwf.Setup(); + } } //Create temporary folders for packages. @@ -317,29 +204,27 @@ namespace Tango.PPC.Common.MachineSetup LogManager.Log("Downloading software package..."); - using (AutoFileDownloader downloader = new AutoFileDownloader(setup_response.BlobAddress, setup_response.CdnAddress, tempFile)) - { - await downloader.ResolveMode(); + long fileSize = 0; + UpdateProgress("Downloading software package", "Downloading...", false); - if (downloader.Mode == AutoFileDownloader.DownloadMode.Standard) + await Task.Factory.StartNew(() => + { + using (FileStreamWrapper fs = new FileStreamWrapper(tempFile.Path, FileMode.Create, (current) => { - LogManager.Log($"Connecting to storage CDN with address {downloader.Address}"); - } - else + UpdateProgress("Downloading software package", "Downloading...", false, current, fileSize); + })) { - LogManager.Log($"Connecting to storage blob with address {downloader.Address}"); - } - downloader.Progress += (x, e) => - { - UpdateProgress("Downloading software package", "Downloading...", false, e.Current, e.Total); - }; - - var size = await downloader.GetFileSize(); - LogManager.Log("Download size: " + size + " bytes."); - LogManager.Log("Starting file download..."); - await downloader.Download(); - } + LogManager.Log($"Connecting to storage blob with address {setup_response.BlobAddress}"); + CloudBlockBlob blob = new CloudBlockBlob(new Uri(setup_response.BlobAddress)); + LogManager.Log("Fetching blob attributes..."); + blob.FetchAttributes(); + fileSize = blob.Properties.Length; + LogManager.Log("Download size: " + fileSize + " bytes."); + LogManager.Log("Starting blob download..."); + blob.DownloadToStream(fs); + } + }); UpdateProgress("Downloading software package", "Extracting package..."); @@ -435,25 +320,25 @@ namespace Tango.PPC.Common.MachineSetup UpdateProgress("Updating Firmware", "Loading firmware package..."); var tfpPath = Path.Combine(_newPackageTempFolder, "firmware_package.tfp"); var stream = new FileStream(tfpPath, FileMode.Open); - var handler = await op.UpgradeFirmware(stream, setup_response.IsDemo); + var handler = await op.UpgradeFirmware(stream); handler.Failed += (_, ex) => { stream.Dispose(); - OnFailed(ex, result, setup_response); + result.SetException(ex); }; handler.Completed += (_, __) => { UpdateProgress("Updating Firmware", "Firmware update completed successfully."); stream.Dispose(); - OnCompleted(new MachineSetupResult() + result.SetResult(new MachineSetupResult() { UpdatePackagePath = _newPackageTempFolder, - }, result, setup_response); + }); }; handler.Canceled += (_, __) => { stream.Dispose(); - OnFailed(new Exception("The operation has been canceled."), result, setup_response); + result.SetException(new Exception("The operation has been canceled.")); }; handler.Progress += (_, e) => { @@ -462,15 +347,16 @@ namespace Tango.PPC.Common.MachineSetup } else { - OnCompleted(new MachineSetupResult() + result.SetResult(new MachineSetupResult() { UpdatePackagePath = _newPackageTempFolder, - }, result, setup_response); + }); } } catch (Exception ex) { - OnFailed(ex, result, setup_response); + LogManager.Log(ex, "An error occurred in machine setup."); + result.SetException(ex); } return await result.Task; |
