This commit is contained in:
@@ -1090,6 +1090,9 @@ https://www.ayanova.com/download/next/ayanova-linux-x64-server.zip
|
|||||||
https://www.ayanova.com/download/next/ayanova-windows-x64-lan-setup.exe
|
https://www.ayanova.com/download/next/ayanova-windows-x64-lan-setup.exe
|
||||||
Current v8 docs home: https://www.ayanova.com/docs/next
|
Current v8 docs home: https://www.ayanova.com/docs/next
|
||||||
|
|
||||||
BUILD 8.0.0 CHANGES OF NOTE
|
BUILD 8.0.0 rc2 CHANGES OF NOTE
|
||||||
|
|
||||||
|
Added integration back end feature for integration of external applications with AyaNova 8
|
||||||
|
Added front end administrative UI for viewing and controlling integrated applications and their logs
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -239,6 +239,11 @@ namespace AyaNova.Biz
|
|||||||
//CUSTOMER NOTIFICATIONS
|
//CUSTOMER NOTIFICATIONS
|
||||||
TaskUtil.Forget(Task.Run(() => CoreJobCustomerNotify.DoWorkAsync()));//must fire and forget as it will call a report render job. In fact probably all of these can be fire and forget
|
TaskUtil.Forget(Task.Run(() => CoreJobCustomerNotify.DoWorkAsync()));//must fire and forget as it will call a report render job. In fact probably all of these can be fire and forget
|
||||||
|
|
||||||
|
//INTEGRATION LOG SWEEP
|
||||||
|
await CoreIntegrationLogSweeper.DoWorkAsync();
|
||||||
|
if (!KeepOnWorking()) return;
|
||||||
|
|
||||||
|
|
||||||
log.LogTrace("Processing exclusive dynamic jobs");
|
log.LogTrace("Processing exclusive dynamic jobs");
|
||||||
|
|
||||||
//BIZOBJECT DYNAMIC JOBS
|
//BIZOBJECT DYNAMIC JOBS
|
||||||
|
|||||||
48
server/AyaNova/generator/CoreIntegrationLogSweeper.cs
Normal file
48
server/AyaNova/generator/CoreIntegrationLogSweeper.cs
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using AyaNova.Models;
|
||||||
|
|
||||||
|
namespace AyaNova.Biz
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clear out old integration log data
|
||||||
|
/// </summary>
|
||||||
|
internal static class CoreIntegrationLogSweeper
|
||||||
|
{
|
||||||
|
private static ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("CoreIntegrationLogSweeper");
|
||||||
|
private static DateTime lastSweep = DateTime.MinValue;
|
||||||
|
private static TimeSpan DELETE_AFTER_AGE = new TimeSpan(90, 0, 0, 0);//The same typical 90 days as everything uses
|
||||||
|
private static TimeSpan SWEEP_EVERY_INTERVAL = new TimeSpan(8, 0, 0);//once every 8 hours, three times a day
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// DoSweep
|
||||||
|
//
|
||||||
|
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)
|
||||||
|
return;
|
||||||
|
DateTime dtDeleteCutoff = DateTime.UtcNow - DELETE_AFTER_AGE;
|
||||||
|
DateTime dtPastEventCutoff = DateTime.UtcNow - SWEEP_EVERY_INTERVAL;
|
||||||
|
|
||||||
|
log.LogDebug("Sweep starting");
|
||||||
|
using (AyContext ct = AyaNova.Util.ServiceProviderProvider.DBContext)
|
||||||
|
{
|
||||||
|
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from aintegrationlog where created < {dtDeleteCutoff}");
|
||||||
|
|
||||||
|
}
|
||||||
|
lastSweep = DateTime.UtcNow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
}//eoc
|
||||||
|
|
||||||
|
|
||||||
|
}//eons
|
||||||
|
|
||||||
@@ -26,3 +26,9 @@ namespace AyaNova.Models
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CREATE TABLE [dbo].[AINTEGRATIONLOG](
|
||||||
|
// [ACREATED] [datetime] NOT NULL,
|
||||||
|
// [ACREATOR] [uniqueidentifier] NOT NULL,
|
||||||
|
// [AINTEGRATIONID] [uniqueidentifier] NOT NULL,
|
||||||
|
// [AMESSAGE] [nvarchar](500) NOT NULL
|
||||||
@@ -1326,7 +1326,9 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
|
|||||||
await SetSchemaLevelAsync(++currentSchema);
|
await SetSchemaLevelAsync(++currentSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////
|
||||||
|
// rc 2 integration objects for QBI etc
|
||||||
|
//
|
||||||
if (currentSchema < 4)
|
if (currentSchema < 4)
|
||||||
{
|
{
|
||||||
LogUpdateMessage(log);
|
LogUpdateMessage(log);
|
||||||
@@ -1340,7 +1342,12 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
|
|||||||
+ "atype INTEGER NOT NULL, objectid BIGINT NOT NULL, integrationitemid TEXT NOT NULL, lastsync TIMESTAMPTZ, integrationitemdata TEXT "
|
+ "atype INTEGER NOT NULL, objectid BIGINT NOT NULL, integrationitemid TEXT NOT NULL, lastsync TIMESTAMPTZ, integrationitemdata TEXT "
|
||||||
+ ")");
|
+ ")");
|
||||||
|
|
||||||
|
//INTEGRATIONLOG
|
||||||
|
await ExecQueryAsync("CREATE TABLE aintegrationlog (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, integrationappid uuid NOT NULL, created TIMESTAMPTZ NOT NULL, statustext TEXT NOT NULL)");
|
||||||
|
|
||||||
|
//Trans keys must come in a subsequent schema update when get to front end UI code
|
||||||
|
|
||||||
|
//UPDATED NAME FETCHER FOR INTEGRATION
|
||||||
await ExecQueryAsync(@"
|
await ExecQueryAsync(@"
|
||||||
CREATE OR REPLACE FUNCTION PUBLIC.AYGETNAME(IN AYOBJECTID BIGINT, IN AYATYPE INTEGER,TRANSLATIONID integer) RETURNS TEXT AS $BODY$
|
CREATE OR REPLACE FUNCTION PUBLIC.AYGETNAME(IN AYOBJECTID BIGINT, IN AYATYPE INTEGER,TRANSLATIONID integer) RETURNS TEXT AS $BODY$
|
||||||
DECLARE
|
DECLARE
|
||||||
|
|||||||
Reference in New Issue
Block a user