using System; using System.Linq; using AyaNova.Models; namespace AyaNova.Util { /// /// Contains static mirror copy in memory of Operations related settings stored in db /// that are accessed frequently by server /// internal static class ServerGlobalOpsSettingsCache { //BOOT flag, set during boot and //is used to control generator from starting internal static bool BOOTING { get; set; } //False if db server is detected to be down //is used to control generator from processing internal static bool DBAVAILABLE { get; set; } internal static GlobalOpsBackupSettings Backup { get; set; } internal static GlobalOpsNotificationSettings Notify { get; set; } internal static DateTime NextBackup { get; set; } //VERSION CHECKING //set by CoreJobVersionCheck once daily and kept here statically while server is up internal static string LATEST_VERSION { get; set; } internal static string CHANGE_LOG_URL { get; set; } /// /// Populate and / or create the settings /// internal static void Initialize(AyContext ct = null) { //set to current servers boot version so as to not trigger messaging at client on login until job has had a chance to set LATEST_VERSION = Util.AyaNovaVersion.VersionString; CHANGE_LOG_URL = "https://ayanova.com/docs/changelog/";//just something to default to, should never come up as it's not a different version at this point //fetch or create as not provided (meaning this was called from Startup.cs) Backup = ct.GlobalOpsBackupSettings.FirstOrDefault(z => z.Id == 1); if (Backup == null) { Backup = new GlobalOpsBackupSettings(); ct.GlobalOpsBackupSettings.Add(Backup); ct.SaveChanges(); } NextBackup = FileUtil.MostRecentAutomatedBackupFileDate(); SetNextBackup(); Notify = ct.GlobalOpsNotificationSettings.FirstOrDefault(z => z.Id == 1); if (Notify == null) { Notify = new GlobalOpsNotificationSettings(); ct.GlobalOpsNotificationSettings.Add(Notify); ct.SaveChanges(); } } internal static void SetNextBackup() { DateTime utcNow = DateTime.UtcNow; //Has last backup run more than 24 hours ago? if (NextBackup < utcNow.AddHours(-24)) { //set it to today then NextBackup = new DateTime(utcNow.Year, utcNow.Month, utcNow.Day, Backup.BackupTime.Hour, Backup.BackupTime.Minute, 0, DateTimeKind.Utc); //Make sure next backup is in the future if (NextBackup < utcNow) NextBackup = NextBackup.AddDays(1); } else { //less than 24 hours, set it to tomorrow NextBackup = new DateTime(utcNow.Year, utcNow.Month, utcNow.Day, Backup.BackupTime.Hour, Backup.BackupTime.Minute, 0, DateTimeKind.Utc); NextBackup = NextBackup.AddDays(1); } } }//eoc }//eons