diff --git a/MP.WASM.Mon/Server/Controllers/MSEController.cs b/MP.WASM.Mon/Server/Controllers/MSEController.cs
index a1201fb6..072acb81 100644
--- a/MP.WASM.Mon/Server/Controllers/MSEController.cs
+++ b/MP.WASM.Mon/Server/Controllers/MSEController.cs
@@ -1,26 +1,18 @@
using Microsoft.AspNetCore.Mvc;
using MP.Data.Conf;
using MP.Data.DatabaseModels;
-using MP.WASM.Mon.Data;
+using MP.WASM.Mon.Server.Data;
using Newtonsoft.Json;
using NLog;
-using StackExchange.Redis;
namespace MP.WASM.Mon.Server.Controllers
{
[ApiController]
[Route("api/[controller]")]
- public class MSEController : ControllerBase, IDisposable
+ public class MSEController : ControllerBase //, IDisposable
{
#region Public Constructors
-
-
- ///
- /// Dataservice x accesso DB
- ///
- protected MpDataService _DataService { get; set; }
-
///
/// Avvio controller dei dati MSE
///
@@ -31,15 +23,6 @@ namespace MP.WASM.Mon.Server.Controllers
Log.Trace("Avviata classe MSEController");
}
- ///
- /// Dispone delle risorse quando non necessarie
- ///
- public void Dispose()
- {
- _DataService.Dispose();
- Log.Trace("Dispose classe MSEController");
- }
-
#endregion Public Constructors
#region Public Properties
@@ -53,12 +36,26 @@ namespace MP.WASM.Mon.Server.Controllers
#region Public Methods
+ [HttpGet("checkAlive")]
+ public Task checkAlive()
+ {
+ Log.Trace("Check Alive");
+ //string answ = (DateTime.Now.Second % 3 == 0) ? "KO": "OK";
+ return Task.FromResult(JsonConvert.SerializeObject("OK"));
+ }
+
[HttpGet("getConfig")]
public Task> ConfigGetAll()
{
return _DataService.ConfigGetAll();
}
+ [HttpGet("getAllTagConf")]
+ public Task>> getAllTags()
+ {
+ return _DataService.getAllTags();
+ }
+
///
/// restituisce il valore da REDIS associato al tag richeisto
///
@@ -76,35 +73,42 @@ namespace MP.WASM.Mon.Server.Controllers
return _DataService.MacchineGetAll();
}
- [HttpGet("getAllTagConf")]
- public Task>> getAllTags()
- {
- return _DataService.getAllTags();
- }
-
///
/// Metodo principale x ricevere tutte i dati MSE di tutti gli impianti
///
///
[HttpGet()]
- public Task> MseGetAll()
+ public async Task> MseGetAll()
{
- return _DataService.MseGetAll();
+ return await _DataService.MseGetAll();
}
#endregion Public Methods
+ #region Protected Properties
+
+ ///
+ /// Dataservice x accesso DB
+ ///
+ protected MpDataService _DataService { get; set; }
+
+ #endregion Protected Properties
+
+#if fase
+ ///
+ /// Dispone delle risorse quando non necessarie
+ ///
+ public void Dispose()
+ {
+ _DataService.Dispose();
+ Log.Trace("Dispose classe MSEController");
+ }
+#endif
+
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
-
#endregion Private Fields
-
- #region Private Methods
-
-
-
- #endregion Private Methods
}
}
\ No newline at end of file
diff --git a/MP.WASM.Mon/Server/Controllers/MessageService.cs b/MP.WASM.Mon/Server/Controllers/MessageService.cs
new file mode 100644
index 00000000..f6e7b0d0
--- /dev/null
+++ b/MP.WASM.Mon/Server/Controllers/MessageService.cs
@@ -0,0 +1,12 @@
+namespace MP.WASM.Mon.Server.Controllers
+{
+ public class MessageService
+ {
+ public static DateTime lastRead { get; set; }
+
+ public MessageService()
+ {
+ lastRead = DateTime.MinValue;
+ }
+ }
+}
diff --git a/MP.WASM.Mon/Server/Data/MpDataService.cs b/MP.WASM.Mon/Server/Data/MpDataService.cs
index 3bade9d2..921cb0c4 100644
--- a/MP.WASM.Mon/Server/Data/MpDataService.cs
+++ b/MP.WASM.Mon/Server/Data/MpDataService.cs
@@ -1,33 +1,28 @@
using MP.Data.Conf;
using MP.Data.DatabaseModels;
+using MP.WASM.Mon.Server.Controllers;
using Newtonsoft.Json;
using NLog;
using StackExchange.Redis;
using System.Diagnostics;
using System.Text;
-namespace MP.WASM.Mon.Data
+namespace MP.WASM.Mon.Server.Data
{
public class MpDataService : IDisposable
{
#region Public Constructors
- private int fastRefreshSec = 2;
-
-
- public MpDataService(IConfiguration configuration, ILogger logger)
+ public MpDataService(IConfiguration configuration, ILogger logger, IConnectionMultiplexer redConn, MessageService MServ)
{
_logger = logger;
_configuration = configuration;
+ _MServ = MServ;
// setup compoenti REDIS
+ //this.redisConn = redConn;
this.redisConn = ConnectionMultiplexer.Connect(_configuration.GetConnectionString("Redis"));
this.redisDb = this.redisConn.GetDatabase();
- //// setup canali pub/sub
- //actLogPipe = new MessagePipe(redisConn, Constants.ACT_LOG_M_QUEUE);
-
-
- //getConfValInt("MSE_cacheDuration", ref fastRefreshSec);
// conf DB
string connStr = _configuration.GetConnectionString("Mp.Mon");
@@ -39,11 +34,11 @@ namespace MP.WASM.Mon.Data
{
dbController = new MP.Data.Controllers.MpMonController(configuration);
StringBuilder sb = new StringBuilder();
- sb.AppendLine($"DbController OK");
- //sb.AppendLine($"CST: {dbController.CustomersCount()} | CNT: {dbController.CountersCount()} | BSK: {dbController.BasketsCount()} | NGT: {dbController.NegotiationsCount()} | DOC: {dbController.DocsCount()} | ITM: {dbController.ItemsCount()} | RES: {dbController.ResourcesCount()}");
+ sb.AppendLine($"MpDataService: DbController OK");
_logger.LogInformation(sb.ToString());
}
-
+ // setup parametri opzionali
+ setupConf();
// setup conf IOB da dizionario
tryLoadIobTags();
}
@@ -72,6 +67,7 @@ namespace MP.WASM.Mon.Data
{
// Clear database controller
dbController.Dispose();
+ _logger.LogInformation("MpDataService disposed!");
}
///
@@ -107,9 +103,16 @@ namespace MP.WASM.Mon.Data
public async Task> MseGetAll()
{
+ List result = new List();
+ // se lettura in corso... attendo 10..50ms...
+ if (DateTime.Now.Subtract(MessageService.lastRead).TotalMilliseconds < 100)
+ {
+ Random rnd = new Random();
+ await Task.Delay(rnd.Next(10, 50));
+ }
+
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
- List result = new List();
// cerco in redis...
var rawData = await redisDb.StringGetAsync(redisMseKey);
if (!string.IsNullOrEmpty(rawData))
@@ -117,40 +120,89 @@ namespace MP.WASM.Mon.Data
result = JsonConvert.DeserializeObject>(rawData);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
- Log.Trace($"Read from REDIS: {ts.TotalMilliseconds}ms");
+ Log.Trace($"REDIS Read: {ts.TotalMilliseconds:N2}ms");
}
else
{
result = await Task.FromResult(dbController.MseGetAll());
// serializzp e salvo...
rawData = JsonConvert.SerializeObject(result);
- await redisDb.StringSetAsync(redisMseKey, rawData, TimeSpan.FromSeconds(2));
+ await redisDb.StringSetAsync(redisMseKey, rawData, TimeSpan.FromSeconds(fastRefreshSec));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
- Log.Trace($"Read from DB: {ts.TotalMilliseconds}ms");
+ Log.Trace($"DB Read: {ts.TotalMilliseconds:N2}ms");
}
if (result == null)
{
result = new List();
}
+ MessageService.lastRead = DateTime.Now;
return result;
}
#endregion Public Methods
+ #region Protected Methods
+
+ ///
+ /// Recupera il valore e se trovato aggiorna
+ ///
+ /// Valore da cercare
+ /// String in cui salvare il valore se trovato
+ ///
+ protected bool getConfVal(string chiave, ref string varObj)
+ {
+ bool answ = false;
+ if (CurrConfig != null && CurrConfig.Count > 0)
+ {
+ // sistemo i parametri opzionali...
+ ConfigModel? risultato = CurrConfig.FirstOrDefault(x => x.Chiave == chiave);
+ if (risultato != null)
+ {
+ varObj = risultato.Valore;
+ answ = !string.IsNullOrEmpty(risultato.Valore);
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Recupera il valore e se trovato aggiorna
+ ///
+ /// Valore da cercare
+ /// Int in cui salvare il valore se trovato
+ ///
+ protected bool getConfValInt(string chiave, ref int varObj)
+ {
+ bool answ = false;
+ if (CurrConfig != null && CurrConfig.Count > 0)
+ {
+ // sistemo i parametri opzionali...
+ ConfigModel? risultato = CurrConfig.FirstOrDefault(x => x.Chiave == chiave);
+ if (risultato != null)
+ {
+ answ = int.TryParse(risultato.Valore, out varObj);
+ }
+ }
+ return answ;
+ }
+
+ #endregion Protected Methods
+
#region Private Fields
private static IConfiguration _configuration = null!;
private static ILogger _logger = null!;
-
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
+ private List? CurrConfig = null;
+ private int fastRefreshSec = 2;
+ private static MessageService _MServ = null!;
///
/// Oggetto per connessione a REDIS
///
private ConnectionMultiplexer redisConn = null!;
- //ISubscriber sub = redis.GetSubscriber();
///
/// Oggetto DB redis da impiegare x chiamate R/W
///
@@ -162,6 +214,17 @@ namespace MP.WASM.Mon.Data
#region Private Methods
+ private void setupConf()
+ {
+ CurrConfig = dbController.ConfigGetAll();
+ if (CurrConfig != null && CurrConfig.Count > 0)
+ {
+ // sistemo i parametri opzionali...
+ getConfValInt("MSE_cacheDuration", ref fastRefreshSec);
+ Log.Info($"Effettuato setup parametri | MSE_cacheDuration: {fastRefreshSec}");
+ }
+ }
+
///
/// Prova a caricare da file la conf degli IOB se presente
///
diff --git a/MP.WASM.Mon/Server/MP.WASM.Mon.Server.csproj b/MP.WASM.Mon/Server/MP.WASM.Mon.Server.csproj
index c4145dd1..95f59c6f 100644
--- a/MP.WASM.Mon/Server/MP.WASM.Mon.Server.csproj
+++ b/MP.WASM.Mon/Server/MP.WASM.Mon.Server.csproj
@@ -25,6 +25,12 @@
+
+
+ Always
+
+
+
diff --git a/MP.WASM.Mon/Server/NLog.config b/MP.WASM.Mon/Server/NLog.config
index b32ba10a..44dc667f 100644
--- a/MP.WASM.Mon/Server/NLog.config
+++ b/MP.WASM.Mon/Server/NLog.config
@@ -41,6 +41,6 @@
-->
-
+
\ No newline at end of file
diff --git a/MP.WASM.Mon/Server/Program.cs b/MP.WASM.Mon/Server/Program.cs
index cd8b0c3a..5f5eaf42 100644
--- a/MP.WASM.Mon/Server/Program.cs
+++ b/MP.WASM.Mon/Server/Program.cs
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.ResponseCompression;
-using MP.WASM.Mon.Data;
+using MP.WASM.Mon.Server.Controllers;
+using MP.WASM.Mon.Server.Data;
using StackExchange.Redis;
var builder = WebApplication.CreateBuilder(args);
@@ -21,6 +22,8 @@ var redisMultiplexer = ConnectionMultiplexer.Connect(connStringRedis);
// aggiunta oggetti Singleton
builder.Services.AddSingleton(redisMultiplexer);
builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+//builder.Services.AddScoped();
var app = builder.Build();
diff --git a/MP.WASM.Mon/Server/logs/.placeholder b/MP.WASM.Mon/Server/logs/.placeholder
new file mode 100644
index 00000000..5f282702
--- /dev/null
+++ b/MP.WASM.Mon/Server/logs/.placeholder
@@ -0,0 +1 @@
+
\ No newline at end of file