Update con gestione task da DB in formato REST (es PROG)
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user