From 02c91a2508293fdca3536beed86c0bcce88c3434 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 3 Apr 2024 09:45:16 +0200 Subject: [PATCH] STATS: - Aggiunta pagina ForceReset - completato porting cache redis standard --- MP.Stats/Data/MpStatsService.cs | 319 +++++++++++++++++++++++++++-- MP.Stats/Pages/ForceReset.razor | 3 + MP.Stats/Pages/ForceReset.razor.cs | 21 ++ MP.Stats/Shared/NavMenu.razor | 5 + 4 files changed, 329 insertions(+), 19 deletions(-) create mode 100644 MP.Stats/Pages/ForceReset.razor create mode 100644 MP.Stats/Pages/ForceReset.razor.cs diff --git a/MP.Stats/Data/MpStatsService.cs b/MP.Stats/Data/MpStatsService.cs index 601acccc..021ad252 100644 --- a/MP.Stats/Data/MpStatsService.cs +++ b/MP.Stats/Data/MpStatsService.cs @@ -72,29 +72,34 @@ namespace MP.Stats.Data public async Task> ActionsGetAll() { - //return Task.FromResult(dbController.ActionsGetAll()); - List dbResult = new List(); - string cacheKey = "MP:STATS:AZIONI_ALL"; - string rawData; - var redisDataList = await distributedCache.GetAsync(cacheKey); - if (redisDataList != null) + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = $"{redisBaseKey}:Cache:AZIONI_ALL"; + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) { - rawData = Encoding.UTF8.GetString(redisDataList); - dbResult = JsonConvert.DeserializeObject>(rawData); + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; } else { - Stopwatch stopWatch = new Stopwatch(); - stopWatch.Start(); - dbResult = dbController.ActionsGetAll(); - rawData = JsonConvert.SerializeObject(dbResult); - redisDataList = Encoding.UTF8.GetBytes(rawData); - await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); - stopWatch.Stop(); - TimeSpan ts = stopWatch.Elapsed; - _logger.LogTrace($"Effettuata lettura da DB + caching per AzioniUL: {ts.TotalMilliseconds} ms"); + result = dbController.ActionsGetAll(); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); } - return await Task.FromResult(dbResult); + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"ActionsGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; } public Task> ArticoliGetSearch(int numRecord, string searchVal = "") @@ -207,9 +212,39 @@ namespace MP.Stats.Data return answ; } - public Task> MacchineGetAll() + public async Task> MacchineGetAll() { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = $"{redisBaseKey}:Cache:Macchine"; + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.MacchineGetAll().ToList(); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"MacchineGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; +#if false return Task.FromResult(dbController.MacchineGetAll().ToList()); +#endif } public Task> MachineList() @@ -248,6 +283,42 @@ namespace MP.Stats.Data public async Task> StatControlliGetAll(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKey($"{redisBaseKey}:CONTROLLI", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.StatControlliGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + // se necessario filtro.. + if (!string.IsNullOrEmpty(searchVal)) + { + result = result + .Where(x => x.Note.Contains(searchVal, StringComparison.InvariantCultureIgnoreCase)) + .ToList(); + } + sw.Stop(); + _logger.LogDebug($"StatControlliGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; +#if false //return Task.FromResult(dbController.StatControlliGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray()); List dbResult = new List(); string cacheKey = getCacheKey("MP:STATS:CONTROLLI", CurrFilter); @@ -271,10 +342,40 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per ResControlli: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); +#endif } public async Task> StatDdbGetAll(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKeyPaged($"{redisBaseKey}:DDBT", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.StatDdbGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo, CurrFilter.FirstRecord, CurrFilter.NumRecord); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"StatDdbGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; +#if false //return Task.FromResult(dbController.StatDdbGetAll(numRecord, searchVal).ToArray()); List dbResult = new List(); string cacheKey = getCacheKeyPaged("MP:STATS:DDBT", CurrFilter); @@ -298,6 +399,7 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per DdbTurni: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); +#endif } /// @@ -321,6 +423,31 @@ namespace MP.Stats.Data public async Task StatDdbGetCount(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + int numRec = 0; + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKey($"{redisBaseKey}:DDBT-COUNT", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + numRec = JsonConvert.DeserializeObject($"{rawData}"); + source = "REDIS"; + } + else + { + numRec = dbController.StatDdbGetCount(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(numRec); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + sw.Stop(); + _logger.LogDebug($"StatDdbGetCount | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return numRec; +#if false int numRec = 0; string cacheKey = getCacheKey("MP:STATS:DDBT-COUNT", CurrFilter); string rawData; @@ -343,6 +470,7 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per DdbTurni: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(numRec); +#endif } /// @@ -353,6 +481,35 @@ namespace MP.Stats.Data /// public async Task> StatOdlEnergyGetAll(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKey($"{redisBaseKey}:ODL_ENERGY", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.StatOdlEnergyGetFilt(CurrFilter.IdxMacchina, CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"StatOdlEnergyGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; +#if false List dbResult = new List(); string cacheKey = getCacheKey("MP:STATS:ODL_ENERGY", CurrFilter); string rawData; @@ -375,6 +532,7 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per ODL_Energy: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); +#endif } /// @@ -385,6 +543,35 @@ namespace MP.Stats.Data /// public async Task> StatOdlGetAll(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKey($"{redisBaseKey}:ODL", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.StatOdlGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"StatOdlEnergyGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; +#if false List dbResult = new List(); string cacheKey = getCacheKey("MP:STATS:ODL", CurrFilter); string rawData; @@ -407,10 +594,40 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per ODL: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); +#endif } public async Task> StatScartiGetAll(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKey($"{redisBaseKey}:SCARTI:RAW", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.StatScartiGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"StatScartiGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; +#if false //return Task.FromResult(dbController.StatScartiGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray()); List dbResult = new List(); string cacheKey = getCacheKey("MP:STATS:SCARTI:RAW", CurrFilter); @@ -434,6 +651,7 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per ResScarti: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); +#endif } public async Task> StatTurniOeeGetAllAsync(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, string searchVal = "") @@ -443,6 +661,36 @@ namespace MP.Stats.Data public async Task> StatTurniOeeGetAllCached(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKey($"{redisBaseKey}:OEE", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.StatTurniOeeGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"StatTurniOeeGetAllCached | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; + +#if false List dbResult = new List(); string cacheKey = getCacheKey("MP:STATS:OEE", CurrFilter); string rawData; @@ -465,10 +713,40 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per TurniOee: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); +#endif } public async Task> StatUserLogGetAll(SelectData CurrFilter, string searchVal = "") { + // setup parametri costanti + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List result = new List(); + // cerco in redis... + DateTime adesso = DateTime.Now; + string currKey = getCacheKey($"{redisBaseKey}:USRACTLOG", CurrFilter); + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (rawData.HasValue) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = dbController.StatUserLogGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, FastCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + _logger.LogDebug($"StatUserLogGetAll | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; +#if false //return Task.FromResult(dbController.StatUserLogGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo).ToArray()); List dbResult = new List(); string cacheKey = getCacheKey("MP:STATS:USRACTLOG", CurrFilter); @@ -497,6 +775,7 @@ namespace MP.Stats.Data _logger.LogTrace($"Effettuata lettura da DB + caching per UserActionLog: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); +#endif } /// @@ -637,7 +916,9 @@ namespace MP.Stats.Data private static ILogger _logger; +#if false private static List ActionsList = new List(); +#endif private readonly IDistributedCache distributedCache; diff --git a/MP.Stats/Pages/ForceReset.razor b/MP.Stats/Pages/ForceReset.razor new file mode 100644 index 00000000..07dcbc87 --- /dev/null +++ b/MP.Stats/Pages/ForceReset.razor @@ -0,0 +1,3 @@ +@page "/ForceReset" + + \ No newline at end of file diff --git a/MP.Stats/Pages/ForceReset.razor.cs b/MP.Stats/Pages/ForceReset.razor.cs new file mode 100644 index 00000000..72ea3c83 --- /dev/null +++ b/MP.Stats/Pages/ForceReset.razor.cs @@ -0,0 +1,21 @@ +using Microsoft.AspNetCore.Components; +using MP.Data.Services; +using MP.Stats.Data; +using System.Threading.Tasks; + +namespace MP.Stats.Pages +{ + public partial class ForceReset + { + [Inject] + protected MpStatsService StatService { get; set; } + protected override async Task OnInitializedAsync() + { + await StatService.FlushCache(); + await Task.Delay(500); + NavManager.NavigateTo("/", true); + } + [Inject] + protected NavigationManager NavManager { get; set; } + } +} \ No newline at end of file diff --git a/MP.Stats/Shared/NavMenu.razor b/MP.Stats/Shared/NavMenu.razor index 6c4c0254..db02b103 100644 --- a/MP.Stats/Shared/NavMenu.razor +++ b/MP.Stats/Shared/NavMenu.razor @@ -52,6 +52,11 @@ Task Scheduler +