From 69030bd767dfac8e35c23986c683ba53199a477a Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 15 Jun 2020 18:52:15 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- server/AyaNova/biz/JobsBiz.cs | 65 +++++++++---------- server/AyaNova/generator/CoreJobLicense.cs | 13 ++-- .../generator/CoreJobMetricsSnapshot.cs | 2 +- server/AyaNova/generator/CoreJobSweeper.cs | 2 +- server/AyaNova/generator/Generate.cs | 33 ++-------- 6 files changed, 51 insertions(+), 66 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 379d2046..47a5435c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -44,7 +44,7 @@ //"AYANOVA_LOG_LEVEL": "Debug", "AYANOVA_DEFAULT_TRANSLATION": "en", //TRANSLATION MUST BE en for Integration TESTING - //"AYANOVA_PERMANENTLY_ERASE_DATABASE": "true", + "AYANOVA_PERMANENTLY_ERASE_DATABASE": "true", "AYANOVA_DB_CONNECTION": "Server=localhost;Username=postgres;Password=raven;Database=AyaNova;", "AYANOVA_USE_URLS": "http://*:7575;", "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", diff --git a/server/AyaNova/biz/JobsBiz.cs b/server/AyaNova/biz/JobsBiz.cs index b455d24a..baf92541 100644 --- a/server/AyaNova/biz/JobsBiz.cs +++ b/server/AyaNova/biz/JobsBiz.cs @@ -7,6 +7,9 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using AyaNova.Models; using AyaNova.Util; +using AyaNova.Api.ControllerHelpers; +using AyaNova.Biz; +using AyaNova.Util; namespace AyaNova.Biz @@ -155,9 +158,36 @@ namespace AyaNova.Biz ActivelyProcessing = true; try { - //## Critical internal jobs - await CoreJobSweeper.DoSweepAsync(); + //### 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(); + + //### Server state dependent jobs + ApiServerState serverState = ServiceProviderProvider.ServerState; + + //system lock (no license) is a complete deal breaker for continuation beyond here + if (serverState.IsSystemLocked) return; + + //TODO: NOTIFICATIONS + //await CoreJobNotify.DoWorkAsync(); + + //BACKUP + await CoreJobBackup.DoWorkAsync(); + //JOB SWEEPER + await CoreJobSweeper.DoWorkAsync(); + + //### API Open only jobs + if (!serverState.IsOpen) return; //BIZOBJECT DYNAMIC JOBS //get a list of exclusive jobs that are due to happen @@ -167,10 +197,7 @@ namespace AyaNova.Biz { try { - //System.Diagnostics.Debug.WriteLine($"JobsBiz processing exclusive biz job {j.Name}"); await ProcessJobAsync(j); - //Capture metrics - CoreJobMetricsSnapshot.DoJob(); } catch (Exception ex) { @@ -181,26 +208,6 @@ namespace AyaNova.Biz } } - //System.Diagnostics.Debug.WriteLine($"JobsBiz processing exclusive license check"); - //License check - long CurrentActiveCount = await UserBiz.ActiveCountAsync(); - long LicensedUserCount = AyaNova.Core.License.ActiveKey.ActiveNumber; - // log.LogInformation("JobsBiz::Checking license active count"); - if (CurrentActiveCount > LicensedUserCount) - { - var msg = $"E1020 - Active count exceeded capacity"; - ServiceProviderProvider.ServerState.SetSystemLock(msg); - log.LogCritical(msg); - return; - } - //backup - //System.Diagnostics.Debug.WriteLine($"JobsBiz processing backup"); - await CoreJobBackup.DoWorkAsync();//sb exclusive - //System.Diagnostics.Debug.WriteLine($"JobsBiz processing metrics snapshotter"); - - //Capture metrics - CoreJobMetricsSnapshot.DoJob(); - /////////////////////////////////////// //NON-EXCLUSIVE JOBS @@ -223,14 +230,6 @@ namespace AyaNova.Biz await UpdateJobStatusAsync(j.GId, JobStatus.Failed); } } - - - //Capture metrics - CoreJobMetricsSnapshot.DoJob(); - - - //TODO: NOTIFICATIONS - } catch (Exception ex) { diff --git a/server/AyaNova/generator/CoreJobLicense.cs b/server/AyaNova/generator/CoreJobLicense.cs index 12bbc143..194153be 100644 --- a/server/AyaNova/generator/CoreJobLicense.cs +++ b/server/AyaNova/generator/CoreJobLicense.cs @@ -19,15 +19,20 @@ namespace AyaNova.Biz { private static ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("CoreJobLicense"); private static DateTime _lastCheck = DateTime.MinValue; - - private static TimeSpan FAST_TRACK = new TimeSpan(0, 0, 30, 0); + +#if (DEBUG) + private static TimeSpan FAST_TRACK = new TimeSpan(0, 1, 0); + private static TimeSpan SLOW_TRACK = new TimeSpan(0, 5, 0); +#else + private static TimeSpan FAST_TRACK = new TimeSpan(0, 30, 0); private static TimeSpan SLOW_TRACK = new TimeSpan(24, 0, 0); +#endif //////////////////////////////////////////////////////////////////////////////////////////////// // DoWork // public static async Task DoWorkAsync() - { + { log.LogTrace("Job starting"); var tsSinceLastCheck = DateTime.UtcNow - _lastCheck; //which track are we on? @@ -71,7 +76,7 @@ namespace AyaNova.Biz //Eventlog await EventLogProcessor.LogEventToDatabaseAsync(new Event(1, 0, AyaType.License, AyaEvent.LicenseFetch, "FromCoreJob"), ct); } - if(ret!="notfound") + if (ret != "notfound") { //I'm thinking do not log internally failed except as trace event as this would fill up log file //instead if they have a license issue they can do manual fetch and then that will log so they can see error diff --git a/server/AyaNova/generator/CoreJobMetricsSnapshot.cs b/server/AyaNova/generator/CoreJobMetricsSnapshot.cs index 938423ef..332ab31f 100644 --- a/server/AyaNova/generator/CoreJobMetricsSnapshot.cs +++ b/server/AyaNova/generator/CoreJobMetricsSnapshot.cs @@ -35,7 +35,7 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// // // - public static void DoJob() + public static void DoWork() { diff --git a/server/AyaNova/generator/CoreJobSweeper.cs b/server/AyaNova/generator/CoreJobSweeper.cs index 7c84f63a..7d74bbb8 100644 --- a/server/AyaNova/generator/CoreJobSweeper.cs +++ b/server/AyaNova/generator/CoreJobSweeper.cs @@ -27,7 +27,7 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// // DoSweep // - public static async Task DoSweepAsync() + public static async Task DoWorkAsync() { //This will get triggered roughly every minute, but we don't want to sweep that frequently if (DateTime.UtcNow - lastSweep < SWEEP_EVERY_INTERVAL) diff --git a/server/AyaNova/generator/Generate.cs b/server/AyaNova/generator/Generate.cs index 877afcbc..c01ea8f3 100644 --- a/server/AyaNova/generator/Generate.cs +++ b/server/AyaNova/generator/Generate.cs @@ -2,9 +2,7 @@ using System.Threading; using System; using System.Threading.Tasks; using Microsoft.Extensions.Logging; -using AyaNova.Api.ControllerHelpers; using AyaNova.Biz; -using AyaNova.Util; namespace AyaNova.Generator { @@ -48,49 +46,32 @@ namespace AyaNova.Generator while (!stoppingToken.IsCancellationRequested) { - if (!justStarted) + if (!justStarted)//give it a pause to settle on boot { - log.LogDebug($"GeneratorService task doing background work."); - ApiServerState serverState = ServiceProviderProvider.ServerState; + log.LogDebug($"GeneratorService running jobs"); + //================================================================= try { - if (!serverState.IsOpen) - { - log.LogDebug($"GeneratorService: ServerState is closed returning without processing jobs, will try again next iteration"); - } - else - { - //System.Diagnostics.Debug.WriteLine($"### GENERATE calling JobsBiz.ProcessJobs"); - //Capture metrics - CoreJobMetricsSnapshot.DoJob(); - await JobsBiz.ProcessJobsAsync(); - //Capture metrics again, (calling repeatedly won't increase metrics but will ensure it doesn't miss frequency of capturing) - CoreJobMetricsSnapshot.DoJob(); - //System.Diagnostics.Debug.WriteLine($"### GENERATE BACK FROM calling JobsBiz.ProcessJobs"); - } + await JobsBiz.ProcessJobsAsync(); } catch (Exception ex) { log.LogError(ex, "Generate::ProcessJobs result in exception error "); } //================================================================= - } await Task.Delay((GENERATE_SECONDS * 1000), stoppingToken); justStarted = false; } - - log.LogDebug($"GeneratorService background task is stopping."); - + log.LogDebug($"GeneratorService is stopping"); } public override Task StopAsync(CancellationToken stoppingToken) { - log.LogDebug($"GeneratorService StopAsync triggered."); + log.LogDebug($"GeneratorService StopAsync triggered"); return Task.FromResult(0); - // Run your graceful clean-up actions + // Run any needed clean-up actions } }//eoc - }//eons \ No newline at end of file