Update con gestione task da DB in formato REST (es PROG)

This commit is contained in:
Samuele Locatelli
2024-10-25 19:03:13 +02:00
parent 12ec44d9ba
commit b897c7fa53
16 changed files with 408 additions and 50 deletions
+66 -11
View File
@@ -7,6 +7,7 @@ using static Maat.Core.Enums;
using System.Diagnostics;
using Newtonsoft.Json;
using System.Xml.Linq;
using Newtonsoft.Json.Linq;
namespace Maat.Data.Services
{
@@ -20,13 +21,16 @@ namespace Maat.Data.Services
#region Public Constructors
private RestCallService RCallService { get; set; } = null!;
/// <summary>
/// Servizio gestione Task su DB
/// </summary>
/// <param name="threadName"></param>
/// <param name="dbConnString"></param>
/// <param name="redisConnString"></param>
public MsSqlTaskService(string threadName, string dbConnString, string redisConnString)
/// <param name="apiUrl"></param>
public MsSqlTaskService(string threadName, string dbConnString, string redisConnString, string apiUrl)
{
Log.Info($"{tName} | Starting MsSqlTaskService");
tName = threadName;
@@ -46,6 +50,9 @@ namespace Maat.Data.Services
dbController = new MsSqlController(tName, dbConnString);
Log.Info($"{tName} | DbController OK");
}
// conf rest call service
RCallService = new RestCallService(apiUrl);
}
#endregion Public Constructors
@@ -64,16 +71,16 @@ namespace Maat.Data.Services
public List<TaskResultModel> CheckExecute()
{
List<TaskResultModel> answ = new List<TaskResultModel>();
List<TaskListModel> listTask = TaskListAll(Enums.Task2ExeType.ND, "");
List<TaskListModel> listTask = TaskListAll(tName, Enums.Task2ExeType.ND, "");
// verifico SE ci siano task in scadenza...
DateTime adesso = DateTime.Now;
var task2exe = listTask.Where(x => x.DtNextExec <= adesso).ToList();
List<TaskListModel> task2exe = listTask.Where(x => x.DtNextExec <= adesso).ToList();
if (task2exe != null && task2exe.Count > 0)
{
Log.Info($"{tName} | Found {task2exe.Count} task to execute");
foreach (var taskRec in task2exe)
{
TaskResultModel result = ExecuteTask(taskRec.TaskId);
TaskResultModel result = ExecuteTask(taskRec);
answ.Add(result);
}
}
@@ -93,16 +100,64 @@ namespace Maat.Data.Services
redisConn.Dispose();
}
public string CheckRestServer()
{
return RCallService.CheckServer();
}
/// <summary>
/// Chiamata esecuzione di un singolo task programmato
/// </summary>
/// <param name="tName">Nome del thread</param>
/// <param name="TaskId">TaskId</param>
/// <param name="TaskRec">Task richiesto</param>
/// <returns></returns>
public TaskResultModel ExecuteTask(int TaskId)
public TaskResultModel ExecuteTask(TaskListModel TaskRec)
{
TaskResultModel dbResult = dbController.ExecuteTask(TaskId);
Log.Info($"{tName} | Executed | TaskId: {TaskId}");
TaskResultModel dbResult = new TaskResultModel()
{
Task = $"TaskId: {TaskRec.TaskId} | {TaskRec.TType}",
ExecResult = -1,
TextResult = "Task Not recognized"
};
// verifico tipo di task ed eseguo di conseguenza...
switch (TaskRec.TType)
{
//case Task2ExeType.ND:
// break;
//case Task2ExeType.Exe:
// break;
//case Task2ExeType.SqlCommand:
// break;
case Task2ExeType.SqlStored:
dbResult = dbController.ExecuteSqlTask(TaskRec.TaskId, true);
Log.Info($"{tName} | Executed | TaskRec: {TaskRec}");
break;
case Task2ExeType.RestCallGet:
// in primis testo la chiamata al servizio Health
string rAnsw = RCallService.CheckServer();
DateTime dtStart = DateTime.Now;
// se ok effettuo vera chiamata...
if (rAnsw.ToUpper() == "OK")
{
var callResp = RCallService.CallRestGet(TaskRec.Command, TaskRec.Args);
DateTime dtEnd = DateTime.Now;
// da verificare...
string formattedJson = JValue.Parse(callResp.Content).ToString(Formatting.Indented);
TaskExecModel tExeMod = new TaskExecModel()
{
DtEnd = dtEnd,
DtStart = dtStart,
IsError = callResp.StatusCode != System.Net.HttpStatusCode.OK,
TaskId = TaskRec.TaskId,
// deserializzazione come json indentato?!?
Result = formattedJson// $"{callResp.Content}".Replace("\"", ""),
};
// salvo su DB
dbResult = dbController.TaskExecSaveExecuted(TaskRec.TaskId, true, tExeMod);
}
break;
default:
break;
}
// svuoto cache!
FlushCache("Task");
return dbResult;
@@ -150,7 +205,7 @@ namespace Maat.Data.Services
/// <param name="CurrFilter"></param>
/// <param name="searchVal"></param>
/// <returns></returns>
public List<TaskListModel> TaskListAll(Task2ExeType TType, string searchVal = "")
public List<TaskListModel> TaskListAll(string threadName, Task2ExeType TType, string searchVal = "")
{
// setup parametri costanti
string source = "DB";
@@ -159,7 +214,7 @@ namespace Maat.Data.Services
List<TaskListModel> result = new List<TaskListModel>();
// cerco in redis...
DateTime adesso = DateTime.Now;
string currKey = $"{Const.RedisBaseKey}:Task:List:{TType}";
string currKey = $"{Const.RedisBaseKey}:Task:{threadName}:List:{TType}";
RedisValue rawData = redisDb.StringGet(currKey);
if (rawData.HasValue)
{