Merge branch 'release/NextSchedCalcUpdate_01'

This commit is contained in:
Samuele Locatelli
2025-06-05 09:09:44 +02:00
12 changed files with 105 additions and 54 deletions
+45 -32
View File
@@ -20,10 +20,12 @@ namespace Maat.Data.Controllers
/// </summary>
/// <param name="threadName">nome del thread di esecuzione</param>
/// <param name="cString">stringa di connessione da impiegare</param>
public MsSqlController(string threadName, string cString)
/// <param name="cmdExecTOut">timeout esecuzione comandi (minuti)</param>
public MsSqlController(string threadName, string cString, int cmdExecTOut)
{
tName = threadName;
connString = cString;
cmdTimeout = cmdExecTOut;
Log.Info($"{tName} | Avviata classe MsSqlController");
}
@@ -34,51 +36,61 @@ namespace Maat.Data.Controllers
public DateTime CalcNextExe(TaskListModel taskRec)
{
DateTime dtNext = DateTime.Today;
DateTime adesso = DateTime.Now;
int maxIter = 1000;
try
{
// calcolo next exec da tipo...
switch (taskRec.Freq)
// prendo come partenza la DATA di fine a cui aggiungo l'ora/minuti schedulata precedentemente
TimeSpan oraSched = taskRec.DtNextExec.Subtract(taskRec.DtNextExec.Date);
DateTime baseDT = taskRec.DtLastExec.Date.Add(oraSched);
// calcolo next exec da tipo... con ciclo fino a quando supero dataora attuale...
while (dtNext < adesso && maxIter > 0)
{
case TaskFreqType.ND:
dtNext = taskRec.DtLastExec.AddDays(taskRec.Cad);
break;
switch (taskRec.Freq)
{
case TaskFreqType.ND:
dtNext = baseDT.AddDays(taskRec.Cad);
break;
case TaskFreqType.Sec:
dtNext = taskRec.DtLastExec.AddSeconds(taskRec.Cad);
break;
case TaskFreqType.Sec:
dtNext = baseDT.AddSeconds(taskRec.Cad);
break;
case TaskFreqType.Min:
dtNext = taskRec.DtLastExec.AddMinutes(taskRec.Cad);
break;
case TaskFreqType.Min:
dtNext = baseDT.AddMinutes(taskRec.Cad);
break;
case TaskFreqType.Hour:
dtNext = taskRec.DtLastExec.AddHours(taskRec.Cad);
break;
case TaskFreqType.Hour:
dtNext = baseDT.AddHours(taskRec.Cad);
break;
case TaskFreqType.Day:
dtNext = taskRec.DtLastExec.AddDays(taskRec.Cad);
break;
case TaskFreqType.Day:
dtNext = baseDT.AddDays(taskRec.Cad);
break;
case TaskFreqType.Week:
dtNext = taskRec.DtLastExec.AddDays(7 * taskRec.Cad);
break;
case TaskFreqType.Week:
dtNext = baseDT.AddDays(7 * taskRec.Cad);
break;
case TaskFreqType.Month:
dtNext = taskRec.DtLastExec.AddMonths(taskRec.Cad);
break;
case TaskFreqType.Month:
dtNext = baseDT.AddMonths(taskRec.Cad);
break;
case TaskFreqType.Year:
dtNext = taskRec.DtLastExec.AddYears(taskRec.Cad);
break;
case TaskFreqType.Year:
dtNext = baseDT.AddYears(taskRec.Cad);
break;
default:
dtNext = taskRec.DtLastExec.AddDays(taskRec.Cad);
break;
default:
dtNext = baseDT.AddDays(taskRec.Cad);
break;
}
baseDT = dtNext;
maxIter--;
}
}
catch (Exception exc)
{
Log.Error($"{tName} | Eccezione in CalcNextExe{Environment.NewLine}{exc}");
Log.Error($"Eccezione in CalcNextExe{Environment.NewLine}{exc}");
}
return dtNext;
}
@@ -99,7 +111,7 @@ namespace Maat.Data.Controllers
using (var dbCtx = new TaskRunContext(connString))
{
// imposto timeout a 5 min
dbCtx.Database.SetCommandTimeout(TimeSpan.FromMinutes(5));
dbCtx.Database.SetCommandTimeout(TimeSpan.FromMinutes(cmdTimeout));
string sqlCall = "";
try
{
@@ -243,6 +255,7 @@ namespace Maat.Data.Controllers
private static Logger Log = LogManager.GetCurrentClassLogger();
private string connString = "";
private string tName = "";
private int cmdTimeout = 0;
#endregion Private Fields
}
+2 -1
View File
@@ -64,8 +64,9 @@ namespace Maat.Data.DbModels
/// DataOra ultima esecuzione
/// </summary>
public DateTime DtLastExec { get; set; } = DateTime.Today.AddYears(-10);
/// <summary>
/// DataOra ultima esecuzione
/// DataOra prossima esecuzione (prevista)
/// </summary>
public DateTime DtNextExec { get; set; } = DateTime.Today.AddYears(-9);
+7 -6
View File
@@ -18,11 +18,12 @@ namespace Maat.Data.Services
/// <summary>
/// Servizio gestione Task su DB
/// </summary>
/// <param name="threadName"></param>
/// <param name="dbConnString"></param>
/// <param name="redisConnString"></param>
/// <param name="apiUrl"></param>
public MsSqlTaskService(string threadName, string dbConnString, string redisConnString, string apiUrl)
/// <param name="threadName">nome del thread</param>
/// <param name="dbConnString">stringa completa di connessione</param>
/// <param name="redisConnString">stringa completa REDIS</param>
/// <param name="apiUrl">url x chiamate api REST</param>
/// <param name="execTimeOut">timeout esecuzione comandi sql (in minuti)</param>
public MsSqlTaskService(string threadName, string dbConnString, string redisConnString, string apiUrl, int execTimeOut)
{
tName = threadName;
Log.Info($"{tName} | Starting MsSqlTaskService");
@@ -39,7 +40,7 @@ namespace Maat.Data.Services
}
else
{
dbController = new MsSqlController(tName, dbConnString);
dbController = new MsSqlController(tName, dbConnString, execTimeOut);
Log.Info($"{tName} | DbController OK");
}
+1 -1
View File
@@ -5,7 +5,7 @@
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version>1.2.2410.3011</Version>
<Version>1.2.2506.0509</Version>
</PropertyGroup>
<ItemGroup>
+5 -3
View File
@@ -52,6 +52,7 @@ bool verboseLog = false;
bool logWriting = false;
string appName = "Maat";
int MinSaveIntSec = 60;
int SqlCmdTimeoutMinutes = 10;
int StepSec = 60;
string JobConfigFile = "";
@@ -114,7 +115,7 @@ if (currConf != null)
// compongo connstring
string dbConnStr = $"Server={currSrv.ServerName}; Database={dbName}; User ID={currSrv.DbUser}; Password={currSrv.DbPasswd}; integrated security=False; MultipleActiveResultSets=True; App={appName}";
string threadName = $"ThdMsSql_{currSrv.ServerName}_{dbName}";
Thread newThread = new Thread(() => doCronDB(threadName, dbConnStr));
Thread newThread = new Thread(() => doCronDB(threadName, dbConnStr, SqlCmdTimeoutMinutes));
newThread.Name = threadName;
jobsThreadList.Add(newThread);
Log.Info($"Added {newThread.Name} to jobsThreadList");
@@ -192,6 +193,7 @@ void setupConf()
StepSec = config.GetValue<int>("SrvConf:StepSec");
MinSaveIntSec = config.GetValue<int>("SrvConf:MinSaveIntSec");
var rawJCF = config.GetValue<string>("SrvConf:JobConfigFile");
SqlCmdTimeoutMinutes = config.GetValue<int>("SrvConf:SqlCmdTimeoutMinutes");
if (string.IsNullOrEmpty(rawJCF))
{
Log.Error($"Cannot start: missing JobConfigFile configuration");
@@ -260,13 +262,13 @@ void saveAndSendMessage(string memKey, string channelName, string message)
}
void doCronDB(string threadName, string dbConnStr)
void doCronDB(string threadName, string dbConnStr, int cmdTimeOut)
{
string tName = threadName;
Log.Info($"{tName} | Starting dbCronDb task");
// periodo standard 1 minuto
int stepPeriod = 60000;
MsSqlTaskService tRun = new MsSqlTaskService(tName, dbConnStr, redisConf, apiUrlStd);
MsSqlTaskService tRun = new MsSqlTaskService(tName, dbConnStr, redisConf, apiUrlStd, cmdTimeOut);
// ciclo infinito esegue task poi attende quanto manca a prox scadenza...
do
{
+16 -1
View File
@@ -2,4 +2,19 @@
IN particolare installare con
nssm.exe install MP-MONO-SIM
nssm.exe install MP-MONO-SIM
nota compilazione: aggiunta forzatura progetto a 64bit:
- vedere yaml
# creazione installer WIX
- dotnet build $env:INST_NAME/$env:INST_NAME.wixproj -p:Configuration=$env:APP_CONF -p:Platform=x64
- vedere wixproject
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platform)\$(Configuration)\</IntermediateOutputPath>
<SuppressPdbOutput>true</SuppressPdbOutput>
</PropertyGroup>
+8 -6
View File
@@ -7,7 +7,8 @@
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Redis": "localhost:26379, serviceName=devel, DefaultDatabase=15, connectTimeout=5000, syncTimeout=5000, asyncTimeout=5000, abortConnect=false, ssl=false, allowAdmin=true"
"Redis": "localhost:6379, DefaultDatabase=14, connectTimeout=5000, syncTimeout=5000, asyncTimeout=5000, abortConnect=false, ssl=false, allowAdmin=true"
//"Redis": "redis.ufficio:26379, serviceName=devel, DefaultDatabase=14, connectTimeout=5000, syncTimeout=5000, asyncTimeout=5000, abortConnect=false, ssl=false, allowAdmin=true"
},
"DbConfig": {
"Server": "localhost",
@@ -18,10 +19,10 @@
"MailKit": {
"SMTP": {
"Address": "smtp.gmail.com",
"Port": "465",
"Account": "steamwarebot@gmail.com",
"Password": "drmfsls16",
"SenderEmail": "steamwarebot@gmail.com",
"Port": "587",
"Account": "services@steamware.net",
"Password": "rzdwvdhvyxtbrzoq",
"SenderEmail": "services@steamware.net",
"SenderName": "Steamware Email BOT"
}
}
@@ -31,6 +32,7 @@
"StepSec": 60,
"MinSaveIntSec": 15,
"JobConfigFile": "JobConfig.json",
"Prog.ApiUrl": "https://office.egalware.com/MP/PROG"
"Prog.ApiUrl": "https://office.egalware.com/MP/PROG",
"SqlCmdTimeoutMinutes": 5
}
}
+1
View File
@@ -5,6 +5,7 @@
"CallMode": "TaskList",
"DbList": [
"MoonPro",
"MoonPro_PROG",
"MoonPro_STATS"
],
"DbPasswd": "db_password_here",
@@ -0,0 +1,16 @@
{
"MsSqlJobs": {
"ServerList": [
{
"CallMode": "TaskList",
"DbList": [
"MoonPro_PROG",
"MoonPro_STATS"
],
"DbPasswd": "viadante16",
"DbUser": "steamware",
"ServerName": "SQL2016DEV"
}
]
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
<body>
<i>Maat.Installer - Manager for Application & Applicative Task</i>
<h4>Versione: 1.2.2410.3011</h4>
<h4>Versione: 1.2.2506.0509</h4>
<br /> Note di rilascio:
<ul>
<li>
@@ -27,7 +27,7 @@
<img src="LogoEgw.png" />
</div>
<div style="float: right;">
<a href="https://www.egalware.net/support" target="_blank">&copy; EgalWare 2021-2024</a>
<a href="https://www.egalware.net/support" target="_blank">&copy; EgalWare 2021-2025</a>
</div>
</div>
</body>
+1 -1
View File
@@ -1 +1 @@
1.2.2410.3011
1.2.2506.0509
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>1.2.2410.3011</version>
<version>1.2.2506.0509</version>
<url>http://nexus.steamware.net/repository/SWS/Maat.Installer/stable/LAST/Maat.Installer.msi</url>
<changelog>http://nexus.steamware.net/repository/SWS/Maat.Installer/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>