aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/MachineSetup/MachineSetupManager.cs200
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;