From 59f4c6a9d29109dfe3f36d655476bebf303de58c Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 15 Jun 2020 19:26:29 +0000 Subject: [PATCH] auto license fetching now and generator more solid --- .../AyaNova/ControllerHelpers/ApiServerState.cs | 5 ++--- server/AyaNova/Program.cs | 6 +++++- server/AyaNova/Startup.cs | 7 ++++++- server/AyaNova/biz/JobsBiz.cs | 17 +++++++++-------- server/AyaNova/generator/Generate.cs | 14 +++++++++----- server/AyaNova/models/GlobalBizSettings.cs | 3 +++ .../util/ServerGlobalOpsSettingsCache.cs | 4 ++++ 7 files changed, 38 insertions(+), 18 deletions(-) diff --git a/server/AyaNova/ControllerHelpers/ApiServerState.cs b/server/AyaNova/ControllerHelpers/ApiServerState.cs index c61dfa68..5d5c53cd 100644 --- a/server/AyaNova/ControllerHelpers/ApiServerState.cs +++ b/server/AyaNova/ControllerHelpers/ApiServerState.cs @@ -1,5 +1,3 @@ -using System; -using Microsoft.Extensions.Logging; using AyaNova.Biz; namespace AyaNova.Api.ControllerHelpers { @@ -35,6 +33,7 @@ namespace AyaNova.Api.ControllerHelpers public ApiServerState() { + } @@ -45,7 +44,7 @@ namespace AyaNova.Api.ControllerHelpers //Only SuperUser account (id=1) can login or do anything, treats as if server was set to closed even if they change it to open //only way to reset it is to fetch a valid license // - var msg=$"{reason}\r\nOnly *the* SuperUser account can login to make changes"; + var msg = $"{reason}\r\nOnly *the* SuperUser account can login to make changes"; SetState(ServerState.OpsOnly, msg); SYSTEM_LOCK = true; } diff --git a/server/AyaNova/Program.cs b/server/AyaNova/Program.cs index 37166cd3..f89b1a41 100644 --- a/server/AyaNova/Program.cs +++ b/server/AyaNova/Program.cs @@ -21,11 +21,15 @@ namespace AyaNova public static void Main(string[] args) { - + //Boot lock for generator + ServerGlobalOpsSettingsCache.BOOTING = true; + //Get config var config = new ConfigurationBuilder().AddEnvironmentVariables().AddCommandLine(args).Build(); ServerBootConfig.SetConfiguration(config); + + #region Initialize Logging //NOTE: there is a logging issue that breaks all this with .net 3.1 hostbuilder vs webhostbuilder but webhostbuilder will be deprecated so we need to work around it //the discussion about that is here: https://github.com/aspnet/AspNetCore/issues/9337 diff --git a/server/AyaNova/Startup.cs b/server/AyaNova/Startup.cs index 0f1e0af1..67e6ed27 100644 --- a/server/AyaNova/Startup.cs +++ b/server/AyaNova/Startup.cs @@ -305,7 +305,8 @@ namespace AyaNova // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // public void Configure(IApplicationBuilder app, Microsoft.AspNetCore.Hosting.IWebHostEnvironment env, - AyContext dbContext, IApiVersionDescriptionProvider provider, AyaNova.Api.ControllerHelpers.ApiServerState apiServerState, IServiceProvider serviceProvider) + AyContext dbContext, IApiVersionDescriptionProvider provider, AyaNova.Api.ControllerHelpers.ApiServerState apiServerState, + IServiceProvider serviceProvider) { _newLog.LogDebug("Configuring request pipeline..."); @@ -601,10 +602,14 @@ namespace AyaNova _newLog.LogInformation($"License - [{AyaNova.Core.License.LicenseInfoLogFormat}]"); + //Boot lock for generator + ServerGlobalOpsSettingsCache.BOOTING=false; //Open up the server for visitors + _newLog.LogDebug("Setting server state open"); apiServerState.SetOpen(); + //final startup log _newLog.LogInformation("Boot complete - server open"); diff --git a/server/AyaNova/biz/JobsBiz.cs b/server/AyaNova/biz/JobsBiz.cs index baf92541..2a63cb87 100644 --- a/server/AyaNova/biz/JobsBiz.cs +++ b/server/AyaNova/biz/JobsBiz.cs @@ -161,14 +161,7 @@ namespace AyaNova.Biz //### Critical internal jobs, these run even if there is a license related serverlock //LICENSE FETCH await CoreJobLicense.DoWorkAsync(); - //"SHENANIGAN" CHECK - if (await UserBiz.ActiveCountAsync() > AyaNova.Core.License.ActiveKey.ActiveNumber) - { - var msg = $"E1020 - Active count exceeded capacity"; - ServiceProviderProvider.ServerState.SetSystemLock(msg); - log.LogCritical(msg); - return; - } + //METRICS CoreJobMetricsSnapshot.DoWork(); @@ -178,6 +171,14 @@ namespace AyaNova.Biz //system lock (no license) is a complete deal breaker for continuation beyond here if (serverState.IsSystemLocked) return; + //"SHENANIGAN" CHECK, note, must be here after systemlock because it relies on there being a license + if (await UserBiz.ActiveCountAsync() > AyaNova.Core.License.ActiveKey.ActiveNumber) + { + var msg = $"E1020 - Active count exceeded capacity"; + ServiceProviderProvider.ServerState.SetSystemLock(msg); + log.LogCritical(msg); + return; + } //TODO: NOTIFICATIONS //await CoreJobNotify.DoWorkAsync(); diff --git a/server/AyaNova/generator/Generate.cs b/server/AyaNova/generator/Generate.cs index c01ea8f3..8a70961a 100644 --- a/server/AyaNova/generator/Generate.cs +++ b/server/AyaNova/generator/Generate.cs @@ -3,6 +3,7 @@ using System; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using AyaNova.Biz; +using AyaNova.Util; namespace AyaNova.Generator { @@ -23,7 +24,11 @@ namespace AyaNova.Generator private const int GENERATE_SECONDS = 5; #else private const int GENERATE_SECONDS = 20; -#endif +#endif + + + + public GeneratorService(ILogger logger) { log = logger; @@ -37,16 +42,16 @@ namespace AyaNova.Generator protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - //don't immediately run the generator stuff on boot - bool justStarted = true; + log.LogDebug($"GeneratorService is starting."); stoppingToken.Register(() => log.LogDebug($" GeneratorService background task is stopping.")); + while (!stoppingToken.IsCancellationRequested) { - if (!justStarted)//give it a pause to settle on boot + if (!ServerGlobalOpsSettingsCache.BOOTING) { log.LogDebug($"GeneratorService running jobs"); @@ -62,7 +67,6 @@ namespace AyaNova.Generator //================================================================= } await Task.Delay((GENERATE_SECONDS * 1000), stoppingToken); - justStarted = false; } log.LogDebug($"GeneratorService is stopping"); } diff --git a/server/AyaNova/models/GlobalBizSettings.cs b/server/AyaNova/models/GlobalBizSettings.cs index a39cb6c7..c4574465 100644 --- a/server/AyaNova/models/GlobalBizSettings.cs +++ b/server/AyaNova/models/GlobalBizSettings.cs @@ -5,6 +5,9 @@ namespace AyaNova.Models public class GlobalBizSettings { + + + public long Id { get; set; }//this is always 1 as there is only ever one single global biz object public uint Concurrency { get; set; } diff --git a/server/AyaNova/util/ServerGlobalOpsSettingsCache.cs b/server/AyaNova/util/ServerGlobalOpsSettingsCache.cs index a2fb432b..6cb049a8 100644 --- a/server/AyaNova/util/ServerGlobalOpsSettingsCache.cs +++ b/server/AyaNova/util/ServerGlobalOpsSettingsCache.cs @@ -11,6 +11,10 @@ namespace AyaNova.Util /// internal static class ServerGlobalOpsSettingsCache { + //BOOT flag, set during boot and + //is used to control generator from starting + internal static bool BOOTING { get; set; } + internal static GlobalOpsBackupSettings Backup { get; set; } internal static DateTime NextBackup { get; set; } ///