From eeb5e12bf021a377ab360e65a380985889cdde12 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 20 May 2021 18:08:55 +0200 Subject: [PATCH] Cache management refinement --- MP.Stats/Data/MpStatsService.cs | 45 +++++++++++++---- MP.Stats/Data/SelectData.cs | 19 +++++++ MP.Stats/Pages/Oee.razor | 89 +++++++++++++++++---------------- MP.Stats/Pages/Oee.razor.cs | 3 +- 4 files changed, 102 insertions(+), 54 deletions(-) diff --git a/MP.Stats/Data/MpStatsService.cs b/MP.Stats/Data/MpStatsService.cs index ce338d85..f13d3571 100644 --- a/MP.Stats/Data/MpStatsService.cs +++ b/MP.Stats/Data/MpStatsService.cs @@ -24,6 +24,19 @@ namespace MP.Stats.Data private readonly IDistributedCache distributedCache; private readonly IMemoryCache memoryCache; + private DistributedCacheEntryOptions cacheOpt; + + /// + /// Durata assoluta massima della cache + /// + private int chAbsExp = 15; + + /// + /// Durata della cache in modalità inattiva (non acceduta) prima di venire rimossa + /// NON estende oltre il tempo massimo di validità Abs della cache + /// + private int chSliExp = 5; + #endregion Private Fields #region Protected Fields @@ -45,8 +58,11 @@ namespace MP.Stats.Data { _logger = logger; _configuration = configuration; + // conf cache this.memoryCache = memoryCache; this.distributedCache = distributedCache; + cacheOpt = new DistributedCacheEntryOptions().SetAbsoluteExpiration(DateTime.Now.AddMinutes(chAbsExp)).SetSlidingExpiration(TimeSpan.FromMinutes(chSliExp)); + // conf DB string connStr = _configuration.GetConnectionString("Mp.Stats"); if (string.IsNullOrEmpty(connStr)) { @@ -64,6 +80,16 @@ namespace MP.Stats.Data #endregion Public Constructors + #region Protected Methods + + protected string getCacheKey(string TableName, SelectData CurrFilter) + { + string answ = $"{TableName}:M_{CurrFilter.IdxMacchina}:A_{CurrFilter.CodArticolo}:K_{CurrFilter.KeyRichiesta}:O_{CurrFilter.IdxOdl}:D_{CurrFilter.DateStart:yyyyMMddHHmm}_{CurrFilter.DateEnd:yyyyMMddHHmm}"; + return answ; + } + + #endregion Protected Methods + #region Public Methods public Task ActionsGetAll() @@ -112,26 +138,23 @@ namespace MP.Stats.Data return await Task.FromResult(dbController.StatTurniOeeGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo)); } - public async Task> StatTurniOeeGetAllCached(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo, string searchVal = "") + public async Task> StatTurniOeeGetAllCached(SelectData CurrFilter, string searchVal = "") { List dbResult = new List(); - var cacheKey = "oeeData"; + string cacheKey = getCacheKey("MP:STATS:OEE", CurrFilter); string rawData; - var redisCustomerList = await distributedCache.GetAsync(cacheKey); - if (redisCustomerList != null) + var redisDataList = await distributedCache.GetAsync(cacheKey); + if (redisDataList != null) { - rawData = Encoding.UTF8.GetString(redisCustomerList); + rawData = Encoding.UTF8.GetString(redisDataList); dbResult = JsonConvert.DeserializeObject>(rawData); } else { - dbResult = dbController.StatTurniOeeGetAll(DataStart, DataEnd, IdxMacchina, IdxODL, KeyRichiesta, CodArticolo); + dbResult = dbController.StatTurniOeeGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); rawData = JsonConvert.SerializeObject(dbResult); - redisCustomerList = Encoding.UTF8.GetBytes(rawData); - var options = new DistributedCacheEntryOptions() - .SetAbsoluteExpiration(DateTime.Now.AddMinutes(10)) - .SetSlidingExpiration(TimeSpan.FromMinutes(2)); - await distributedCache.SetAsync(cacheKey, redisCustomerList, options); + redisDataList = Encoding.UTF8.GetBytes(rawData); + await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); } return await Task.FromResult(dbResult); } diff --git a/MP.Stats/Data/SelectData.cs b/MP.Stats/Data/SelectData.cs index 05be9c99..546014d8 100644 --- a/MP.Stats/Data/SelectData.cs +++ b/MP.Stats/Data/SelectData.cs @@ -20,6 +20,25 @@ namespace MP.Stats.Data #region Public Methods + /// + /// Inizializzazione con periodo e arrotondamento + /// + /// + /// + /// + public static SelectData Init(int minRound, int numDayPrev) + { + TimeSpan DayElapsed = DateTime.Now.Subtract(DateTime.Today); + int minDay = (int)(DayElapsed.TotalMinutes / minRound) * minRound; + DateTime endRounded = DateTime.Today.AddMinutes(minDay); + SelectData answ = new SelectData() + { + DateEnd = endRounded, + DateStart = endRounded.AddDays(-numDayPrev) + }; + return answ; + } + public override bool Equals(object obj) { if (!(obj is SelectData item)) diff --git a/MP.Stats/Pages/Oee.razor b/MP.Stats/Pages/Oee.razor index c974017b..db8b562a 100644 --- a/MP.Stats/Pages/Oee.razor +++ b/MP.Stats/Pages/Oee.razor @@ -14,55 +14,60 @@
@if (currRecord != null) { - @**@ + @**@ } @if (totalCount == 0 || ListRecords == null || ListRecords.Count() == 0) { -
+
+
+

loading data

+ +
+
} else { -
-
- -
-
- - - - @**@ - - - - - - - - - - - @foreach (var record in ListRecords) - { - - @**@ - - - - - - - - - } - -
DataTurnoMacchinaArticoloDurataPezziOEE %
  -
@record.DataRif.ToString("yyyy.MM.dd")
-
@record.Turno -
@record.CodMacchina
-
@record.IdxMacchina
-
@record.CodArticolo@record.TotPeriodo.ToString("N2")@record.TotPz@record.OEE.ToString("P2")
-
+
+
+
+
+ + + + @**@ + + + + + + + + + + + @foreach (var record in ListRecords) + { + + @**@ + + + + + + + + + } + +
DataTurnoMacchinaArticoloDurataPezziOEE %
  +
@record.DataRif.ToString("yyyy.MM.dd")
+
@record.Turno +
@record.CodMacchina
+
@record.IdxMacchina
+
@record.CodArticolo@record.TotPeriodo.ToString("N2")@record.TotPz@record.OEE.ToString("P2")
+
+
}