aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs181
1 files changed, 160 insertions, 21 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs
index 088e80f61..666b6813c 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/MachineUpdate/MachineUpdateManager.cs
@@ -10,6 +10,7 @@ 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;
@@ -29,6 +30,7 @@ using Tango.Settings;
using Tango.SharedUI.Helpers;
using Tango.SQLExaminer;
using Tango.Transport.Web;
+using System.Data.Entity;
namespace Tango.PPC.Common.MachineUpdate
{
@@ -42,6 +44,7 @@ namespace Tango.PPC.Common.MachineUpdate
private System.Timers.Timer _checkForUpdateTimer;
private bool _isUpdating;
private PPCSettings _settings;
+ private DateTime _updateStartDate;
#region Events
@@ -140,7 +143,7 @@ namespace Tango.PPC.Common.MachineUpdate
});
}
- private async void OnFailed(Exception ex, TaskCompletionSource<MachineUpdateResult> completionSource, DownloadUpdateResponse response, bool performDatabaseRollback, String dbBackupFile, String backupsFolder, String tempDbName, Tango.Core.DataSource localDataSource, String tempUpdatePackageFolder = null)
+ private async void OnFailed(Exception ex, TaskCompletionSource<MachineUpdateResult> completionSource, DownloadUpdateResponse response, bool performDatabaseRollback, String dbBackupFile, String backupsFolder, String tempDbName, Tango.Core.DataSource localDataSource, String tempUpdatePackageFolder = null, PublishInfo tupPublishInfo = null)
{
LogManager.Log(ex, "An error occurred in machine update.");
@@ -217,6 +220,8 @@ namespace Tango.PPC.Common.MachineUpdate
completionSource.SetException(ex);
+ String logs = GetLogsStringAndClear();
+
if (response != null)
{
try
@@ -226,19 +231,65 @@ namespace Tango.PPC.Common.MachineUpdate
Token = response.NotifyCompletedToken,
Status = BL.Enumerations.TangoUpdateStatuses.UpdateFailed,
FailedReason = ex.FlattenMessage(),
- FailedLog = GetLogsStringAndClear(),
+ FailedLog = logs,
});
}
catch (Exception xx)
{
LogManager.Log(xx, "Error notifying update failed.");
}
+
+ try
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ TangoUpdate update = new TangoUpdate();
+ update.ApplicationVersion = response.Version;
+ update.FirmwareVersion = response.FirmwareVersion;
+ update.MachineGuid = _machineProvider.Machine.Guid;
+ update.UpdateStatus = BL.Enumerations.TangoUpdateStatuses.UpdateFailed;
+ update.StartDate = _updateStartDate;
+ update.EndDate = DateTime.UtcNow;
+ update.FailedReason = ex.FlattenMessage();
+ update.FailedLog = logs;
+ await db.SaveChangesAsync();
+ }
+ }
+ catch (Exception xxx)
+ {
+ LogManager.Log(xxx, "Error saving tango update information to database.");
+ }
+ }
+
+
+ if (tupPublishInfo != null)
+ {
+ try
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ TangoUpdate update = new TangoUpdate();
+ update.ApplicationVersion = tupPublishInfo.ApplicationVersion;
+ update.FirmwareVersion = tupPublishInfo.GetFirmwareVersion();
+ update.MachineGuid = _machineProvider.Machine.Guid;
+ update.UpdateStatus = BL.Enumerations.TangoUpdateStatuses.OfflineUpdateFailed;
+ update.StartDate = _updateStartDate;
+ update.EndDate = DateTime.UtcNow;
+ update.FailedReason = ex.FlattenMessage();
+ update.FailedLog = logs;
+ await db.SaveChangesAsync();
+ }
+ }
+ catch (Exception xxx)
+ {
+ LogManager.Log(xxx, "Error saving tango offline update information to database.");
+ }
}
_isUpdating = false;
}
- private async void OnCompleted(MachineUpdateResult result, TaskCompletionSource<MachineUpdateResult> completionSource, DownloadUpdateResponse response, String tempDbName, String backupsFolder, Core.DataSource localDataSource)
+ private async void OnCompleted(MachineUpdateResult result, TaskCompletionSource<MachineUpdateResult> completionSource, DownloadUpdateResponse response, String tempDbName, String backupsFolder, Core.DataSource localDataSource, PublishInfo tupPublishInfo = null)
{
await Task.Factory.StartNew(() =>
{
@@ -299,26 +350,47 @@ namespace Tango.PPC.Common.MachineUpdate
{
LogManager.Log(ex, "Error notifying update 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.UpdateCompleted;
+ update.StartDate = _updateStartDate;
+ update.EndDate = DateTime.UtcNow;
+ await db.SaveChangesAsync();
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error saving tango update information to database.");
+ }
}
- _isUpdating = false;
- }
- private void OnCompleted(UpdateDBResponse response)
- {
- if (response != null)
+ if (tupPublishInfo != null)
{
try
{
- var r = _client.NotifyUpdateCompleted(new MachineUpdateCompletedRequest()
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- Token = response.NotifyCompletedToken,
- Status = BL.Enumerations.TangoUpdateStatuses.DatabaseCompleted,
- }).Result;
+ TangoUpdate update = new TangoUpdate();
+ update.ApplicationVersion = tupPublishInfo.ApplicationVersion;
+ update.FirmwareVersion = tupPublishInfo.GetFirmwareVersion();
+ update.MachineGuid = _machineProvider.Machine.Guid;
+ update.UpdateStatus = BL.Enumerations.TangoUpdateStatuses.OfflineUpdateCompleted;
+ update.StartDate = _updateStartDate;
+ update.EndDate = DateTime.UtcNow;
+ await db.SaveChangesAsync();
+ }
}
- catch (Exception ex)
+ catch (Exception xxx)
{
- LogManager.Log(ex, "Error notifying database completed.");
+ LogManager.Log(xxx, "Error saving tango offline update information to database.");
}
}
@@ -357,6 +429,8 @@ namespace Tango.PPC.Common.MachineUpdate
}
}
+ String logs = GetLogsStringAndClear();
+
if (response != null)
{
try
@@ -366,13 +440,74 @@ namespace Tango.PPC.Common.MachineUpdate
Token = response.NotifyCompletedToken,
Status = BL.Enumerations.TangoUpdateStatuses.DatabaseFailed,
FailedReason = ex.FlattenMessage(),
- FailedLog = GetLogsStringAndClear(),
+ FailedLog = logs,
}).Result;
}
catch (Exception xx)
{
LogManager.Log(xx, "Error notifying database failed.");
}
+
+ try
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ TangoUpdate update = new TangoUpdate();
+ update.ApplicationVersion = _app_manager.Version.ToString();
+ update.FirmwareVersion = _app_manager.FirmwareVersion.ToString();
+ update.MachineGuid = _machineProvider.Machine.Guid;
+ update.UpdateStatus = BL.Enumerations.TangoUpdateStatuses.DatabaseFailed;
+ update.StartDate = _updateStartDate;
+ update.EndDate = DateTime.UtcNow;
+ update.FailedReason = ex.FlattenMessage();
+ update.FailedLog = logs;
+ db.SaveChanges();
+ }
+ }
+ catch (Exception exx)
+ {
+ LogManager.Log(exx, "Error saving database update information to database.");
+ }
+ }
+
+ _isUpdating = false;
+ }
+
+ private void OnCompleted(UpdateDBResponse response)
+ {
+ if (response != null)
+ {
+ try
+ {
+ var r = _client.NotifyUpdateCompleted(new MachineUpdateCompletedRequest()
+ {
+ Token = response.NotifyCompletedToken,
+ Status = BL.Enumerations.TangoUpdateStatuses.DatabaseCompleted,
+ }).Result;
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error notifying database completed.");
+ }
+
+ try
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ TangoUpdate update = new TangoUpdate();
+ update.ApplicationVersion = _app_manager.Version.ToString();
+ update.FirmwareVersion = _app_manager.FirmwareVersion.ToString();
+ update.MachineGuid = _machineProvider.Machine.Guid;
+ update.UpdateStatus = BL.Enumerations.TangoUpdateStatuses.DatabaseCompleted;
+ update.StartDate = _updateStartDate;
+ update.EndDate = DateTime.UtcNow;
+ db.SaveChanges();
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error saving database update information to database.");
+ }
}
_isUpdating = false;
@@ -404,6 +539,7 @@ namespace Tango.PPC.Common.MachineUpdate
/// <exception cref="System.InvalidProgramException">Database tango does not exists.</exception>
public async Task<MachineUpdateResult> Update(bool setupFirmware, bool setupFPGA)
{
+ _updateStartDate = DateTime.UtcNow;
_logs.Clear();
TaskCompletionSource<MachineUpdateResult> result = new TaskCompletionSource<MachineUpdateResult>();
@@ -739,6 +875,7 @@ namespace Tango.PPC.Common.MachineUpdate
/// <returns></returns>
public Task UpdateDB(DbCompareResult dbCompareResult, String serialNumber)
{
+ _updateStartDate = DateTime.UtcNow;
_logs.Clear();
return Task.Factory.StartNew(() =>
@@ -975,6 +1112,7 @@ namespace Tango.PPC.Common.MachineUpdate
/// <returns></returns>
public async Task<MachineUpdateResult> UpdateFromTUP(string fileName, bool setupFirmware, bool setupFPGA)
{
+ _updateStartDate = DateTime.UtcNow;
_logs.Clear();
TaskCompletionSource<MachineUpdateResult> result = new TaskCompletionSource<MachineUpdateResult>();
@@ -986,6 +1124,7 @@ namespace Tango.PPC.Common.MachineUpdate
String tempDbFileName = tempDbName + ".bak";
String backupsFolder = "C:\\Backups";
bool replaceBinaries = false;
+ PublishInfo publishInfo = null;
String serialNumber = _machineProvider.Machine.SerialNumber;
@@ -1035,7 +1174,7 @@ namespace Tango.PPC.Common.MachineUpdate
//Extracting publish info
UpdateProgress("Exploring package", "Verifying...");
- PublishInfo publishInfo = PublishInfo.FromJson(File.ReadAllText(Path.Combine(_newPackageTempFolder, "version.json")));
+ publishInfo = PublishInfo.FromJson(File.ReadAllText(Path.Combine(_newPackageTempFolder, "version.json")));
if (!publishInfo.IsMachineTupPackage)
{
@@ -1214,7 +1353,7 @@ namespace Tango.PPC.Common.MachineUpdate
handler.Failed += (_, ex) =>
{
stream.Dispose();
- OnFailed(ex, result, null, performDatabaseRollback, dbBackupFile, backupsFolder, tempDbName, localDataSource, _newPackageTempFolder);
+ OnFailed(ex, result, null, performDatabaseRollback, dbBackupFile, backupsFolder, tempDbName, localDataSource, _newPackageTempFolder, publishInfo);
};
handler.Completed += (_, __) =>
{
@@ -1224,12 +1363,12 @@ namespace Tango.PPC.Common.MachineUpdate
{
UpdatePackagePath = _newPackageTempFolder,
RequiresBinariesUpdate = replaceBinaries,
- }, result, null, tempDbName, backupsFolder, localDataSource);
+ }, result, null, tempDbName, backupsFolder, localDataSource, publishInfo);
};
handler.Canceled += (_, __) =>
{
stream.Dispose();
- OnFailed(new Exception("The operation has been canceled."), result, null, performDatabaseRollback, dbBackupFile, backupsFolder, tempDbName, localDataSource, _newPackageTempFolder);
+ OnFailed(new Exception("The operation has been canceled."), result, null, performDatabaseRollback, dbBackupFile, backupsFolder, tempDbName, localDataSource, _newPackageTempFolder, publishInfo);
};
handler.Progress += (_, e) =>
{
@@ -1242,12 +1381,12 @@ namespace Tango.PPC.Common.MachineUpdate
{
UpdatePackagePath = _newPackageTempFolder,
RequiresBinariesUpdate = replaceBinaries,
- }, result, null, tempDbName, backupsFolder, localDataSource);
+ }, result, null, tempDbName, backupsFolder, localDataSource, publishInfo);
}
}
catch (Exception ex)
{
- OnFailed(ex, result, null, performDatabaseRollback, dbBackupFile, backupsFolder, tempDbName, localDataSource, _newPackageTempFolder);
+ OnFailed(ex, result, null, performDatabaseRollback, dbBackupFile, backupsFolder, tempDbName, localDataSource, _newPackageTempFolder, publishInfo);
}
return await result.Task;