auto license fetching now and generator more solid

This commit is contained in:
2020-06-15 19:26:29 +00:00
parent 69030bd767
commit 59f4c6a9d2
7 changed files with 38 additions and 18 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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");

View File

@@ -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();

View File

@@ -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<GeneratorService> 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");
}

View File

@@ -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; }

View File

@@ -11,6 +11,10 @@ namespace AyaNova.Util
/// </summary>
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; }
/// <summary>