diff options
Diffstat (limited to 'Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs')
| -rw-r--r-- | Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs | 75 |
1 files changed, 74 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs index 4202b45a7..2ed20e91e 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs @@ -244,6 +244,21 @@ namespace Tango.AzureUtils.Database } } + public async Task UpgradeEurekaVersion(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) + { + var latestEurekaVersion = await GetLatestEurekaVersion(sourceApp, versionTag); + + var targetDataSource = (await targetApp.GetMachineServiceSettingsAsync()).ToDataSource(); + + OnProgress(AzureUtilsStage.Database, $"Adding Twine X4 database entry for version '{latestEurekaVersion.VersionAndTag}'..."); + + using (var db = ObservablesContext.CreateDefault(targetDataSource)) + { + db.TangoVersions.Add(latestEurekaVersion); + await db.SaveChangesAsync(); + } + } + public async Task UpgradeFSEVersion(IWebAppBase sourceApp, IWebAppBase targetApp, FSEBuildVariants build) { var latestFSEVersion = await GetLatestFSEVersion(sourceApp, build); @@ -342,7 +357,8 @@ namespace Tango.AzureUtils.Database using (var db = ObservablesContext.CreateDefault(dataSource)) { - var versions = await db.TangoVersions.Where(x => x.Tag == versionTag).ToListAsync(); + var versions = await db.TangoVersions.Include(x => x.MachineVersion).Where(x => x.Tag == versionTag).ToListAsync(); + versions = versions.Where(x => x.MachineVersion.MachineType == MachineTypes.TS1800).ToList(); var latest_version = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); return latest_version; } @@ -353,6 +369,39 @@ namespace Tango.AzureUtils.Database } } + public async Task<TangoVersion> GetLatestEurekaVersion(IWebAppBase app, String versionTag) + { + OnProgress(AzureUtilsStage.Database, $"Getting latest Twine X4 version on '{app.Name}'..."); + + MachineServiceSettings settings = null; + + try + { + settings = await app.GetMachineServiceSettingsAsync(); + } + catch (Exception ex) + { + throw new ArgumentException("Could not fetch machine service settings. Please check that all settings are available.", ex); + } + + try + { + DataSource dataSource = settings.ToDataSource(); + + using (var db = ObservablesContext.CreateDefault(dataSource)) + { + var versions = await db.TangoVersions.Include(x => x.MachineVersion).Where(x => x.Tag == versionTag).ToListAsync(); + versions = versions.Where(x => x.MachineVersion.MachineType == MachineTypes.Eureka).ToList(); + var latest_version = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); + return latest_version; + } + } + catch (Exception ex) + { + throw new InvalidDataException($"Could not retrieve '{app.Name}' latest Twine X4 version from database.", ex); + } + } + public async Task<FseVersion> GetLatestFSEVersion(IWebAppBase app, FSEBuildVariants build) { OnProgress(AzureUtilsStage.Database, $"Getting latest {build} version on '{app.Name}'..."); @@ -433,6 +482,30 @@ namespace Tango.AzureUtils.Database } } + public async Task ValidateEurekaDatabaseUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) + { + OnProgress(AzureUtilsStage.Validating, "Validating Twine X4 database upgrade..."); + + var sourceSettings = await sourceApp.GetMachineServiceSettingsAsync(); + var targetSettings = await targetApp.GetMachineServiceSettingsAsync(); + + var latestSourceEurekaVersion = await GetLatestEurekaVersion(sourceApp, versionTag); + + //Check if there is any source PPC version. + if (latestSourceEurekaVersion == null) + { + throw new ValidationException("Could not locate a Twine X4 version entry on the source database."); + } + + var latestTargetEurekaVersion = await GetLatestEurekaVersion(targetApp, versionTag); + + //Check target latest PPC version is older if there is any. + if (latestTargetEurekaVersion != null && Version.Parse(latestSourceEurekaVersion.Version) <= Version.Parse(latestTargetEurekaVersion.Version)) + { + throw new ValidationException($"Twine X4 source version is '{latestSourceEurekaVersion.VersionAndTag}' while target version is '{latestTargetEurekaVersion.VersionAndTag}'."); + } + } + public async Task ValidateFSEDatabaseUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, FSEBuildVariants build) { OnProgress(AzureUtilsStage.Validating, $"Validating {build} database upgrade..."); |
