diff --git a/MP.Data/Controllers/MpSpecController.cs b/MP.Data/Controllers/MpSpecController.cs
index ddf75ff4..e3cbc159 100644
--- a/MP.Data/Controllers/MpSpecController.cs
+++ b/MP.Data/Controllers/MpSpecController.cs
@@ -551,16 +551,16 @@ namespace MP.Data.Controllers
///
///
///
- ///
- public async Task FluxLogDataRedux(string idxMaccSel, List fluxList, Periodo currPeriodo, Enum.ValSelection valMode, Enum.DataInterval intReq, int maxItem)
+ /// Restitusice list dei record statistiche raccolti (da integrare a quelli rpesenti in Redis...)
+ public async Task> FluxLogDataRedux(string idxMaccSel, List fluxList, Periodo currPeriodo, Enum.ValSelection valMode, Enum.DataInterval intReq, int maxItem)
{
+ List procStats = new List();
Log.Info($"Inizio FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio} --> {currPeriodo.Fine}");
- bool fatto = false;
TimeSpan step = TimeSpan.FromHours(1);
switch (intReq)
{
case Enum.DataInterval.minute:
- step = TimeSpan.FromMinutes(1.00/ maxItem);
+ step = TimeSpan.FromMinutes(1.00 / maxItem);
break;
case Enum.DataInterval.hour:
step = TimeSpan.FromHours(1.00 / maxItem);
@@ -571,7 +571,6 @@ namespace MP.Data.Controllers
default:
break;
}
- List procStats = new List();
// setup parametri costanti x stored
var pIdxMacchina = new SqlParameter("@IdxMacchina", idxMaccSel);
@@ -628,9 +627,21 @@ namespace MP.Data.Controllers
listPeriodi.Add(new Periodo(dtCursStart, recEnd.dtEvento));
break;
case Enum.ValSelection.Center:
- var recCent = currFlux.Skip(numRec / 2).FirstOrDefault();
- // salvo 2 periodi!
+ int idx = 1;
+ // per iniziare mi metto a 1/(n+1) rec come step
+ var recCent = currFlux.Skip(idx / (maxItem + 1)).FirstOrDefault();
listPeriodi.Add(new Periodo(dtCursStart, recCent.dtEvento));
+ // salvo restanti periodi (se > 1)!
+ if (maxItem > 1)
+ {
+ for (int i = 2; i < maxItem; i++)
+ {
+ DateTime dtInizio = recCent.dtEvento;
+ recCent = currFlux.Skip(i / (maxItem + 1)).FirstOrDefault();
+ listPeriodi.Add(new Periodo(dtInizio, recCent.dtEvento));
+ }
+ }
+ // aggiungo ultimo...
listPeriodi.Add(new Periodo(recCent.dtEvento.AddSeconds(1), dtCursEnd));
break;
default:
@@ -656,21 +667,24 @@ namespace MP.Data.Controllers
}
// fermo cronometro e salvo su DB...
sw.Stop();
- LogFLDedupModel currStat = new LogFLDedupModel()
+ DTO.StatDedupDTO currStat = new DTO.StatDedupDTO()
{
IdxMacchina = idxMaccSel,
CodFlux = item,
- DtRif = DateTime.Now,
+ Interval = intReq,
+ Num4Int = maxItem,
NumRec = numRecProc,
ProcTime = sw.Elapsed.TotalSeconds
};
procStats.Add(currStat);
}
+#if false
// salvo le statistiche di processing...
- fatto = LogFLDedupInsert(procStats);
+ fatto = LogFLDedupInsert(procStats);
+#endif
Log.Info($"FINE FluxLogDataRedux | idxMaccSel: {idxMaccSel} | periodo: {currPeriodo.Inizio} --> {currPeriodo.Fine}");
- return fatto;
+ return procStats;
}
///
diff --git a/MP.Data/DTO/StatDedupDTO.cs b/MP.Data/DTO/StatDedupDTO.cs
new file mode 100644
index 00000000..076aca72
--- /dev/null
+++ b/MP.Data/DTO/StatDedupDTO.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+
+//
+// This is here so CodeMaid doesn't reorganize this document
+//
+namespace MP.Data.DTO
+{
+ public class StatDedupDTO
+ {
+ ///
+ /// Macchina
+ ///
+ public string IdxMacchina { get; set; } = "";
+
+ ///
+ /// Cod Flusso interessato
+ ///
+ public string CodFlux { get; set; } = "";
+
+ ///
+ /// Tipo di intervallo richiesto
+ ///
+ public Enum.DataInterval Interval { get; set; } = Enum.DataInterval.hour;
+
+ ///
+ /// num max di item per intervallo
+ ///
+ public int Num4Int { get; set; } = 1;
+
+ ///
+ /// Num record processati (iniziali)
+ ///
+ public int NumRec { get; set; } = 1;
+
+ ///
+ /// Tempo processing (secondi)
+ ///
+ public double ProcTime { get; set; } = 1;
+
+ ///
+ /// Tempo processing atteso in ms per record
+ ///
+ [NotMapped]
+ public double ProcTimeMs
+ {
+ get => (ProcTime * 1000) / (NumRec > 1 ? NumRec : 1);
+ }
+ }
+}
diff --git a/MP.Data/Utils.cs b/MP.Data/Utils.cs
index 4a4efbaf..5b89a344 100644
--- a/MP.Data/Utils.cs
+++ b/MP.Data/Utils.cs
@@ -232,6 +232,7 @@ namespace MP.Data
public const string redisConfKey = redisBaseAddr + "Cache:Config";
public const string redisAKVKey = redisBaseAddr + "Cache:AKV";
public const string redisParetoFLKey = redisBaseAddr + "Cache:ParetoFL";
+ public const string redisStatsProcFL = redisBaseAddr + "Stats:ProcessFL";
public const string redisDossByMac = redisBaseAddr + "Cache:DossByMac";
public const string redisFluxByMac = redisBaseAddr + "Cache:FluxByMac";
public const string redisFluxLogFilt = redisBaseAddr + "Cache:FluxLogFilt";
diff --git a/MP.SPEC/Data/MpDataService.cs b/MP.SPEC/Data/MpDataService.cs
index 90cf6134..a087def9 100644
--- a/MP.SPEC/Data/MpDataService.cs
+++ b/MP.SPEC/Data/MpDataService.cs
@@ -1785,10 +1785,72 @@ namespace MP.SPEC.Data
///
public async Task FluxLogDataRedux(string idxMaccSel, List fluxList, DtUtils.Periodo currPeriodo, ValSelection valMode, DataInterval intReq, int maxItem)
{
- await dbController.FluxLogDataRedux(idxMaccSel, fluxList, currPeriodo, valMode, intReq, maxItem);
+ List procStats = await dbController.FluxLogDataRedux(idxMaccSel, fluxList, currPeriodo, valMode, intReq, maxItem);
+ // effettuo merge statistiche...
+ ProcStatMerge(procStats);
await FlushCacheFluxLog();
}
+ ///
+ /// Restituisce le statistiche di processo correnti x depluplica FluxLog
+ ///
+ ///
+ public List ProcFLStats()
+ {
+ List actStats = new List();
+ string currKey = $"{Utils.redisStatsProcFL}";
+ // recupero i record statistiche correnti
+ RedisValue rawData = redisDb.StringGet(currKey);
+ if (rawData.HasValue)
+ {
+ var rawStats = JsonConvert.DeserializeObject>($"{rawData}");
+ if (rawStats != null)
+ {
+ actStats = rawStats;
+ }
+ }
+ return actStats;
+ }
+
+ protected bool ProcStatMerge(List procStats)
+ {
+ bool answ = false;
+ List actStats = ProcFLStats();
+ // se fosse vuoto --> add diretto
+ if (actStats.Count == 0)
+ {
+ actStats.AddRange(procStats);
+ }
+ else
+ {
+ // aggiorno su redis i record statistiche 1:1...
+ foreach (var recStat in procStats)
+ {
+ // cerco se ci fosse x aggiornare
+ var currRec = actStats.Where(x => x.IdxMacchina == recStat.IdxMacchina
+ && x.CodFlux == recStat.CodFlux
+ && x.Interval == recStat.Interval
+ && x.Num4Int == recStat.Num4Int).FirstOrDefault();
+ // se trovato aggiorno
+ if (currRec != null)
+ {
+ currRec.ProcTime += recStat.ProcTime;
+ currRec.NumRec += recStat.NumRec;
+ }
+ // altrimenti aggiungo
+ else
+ {
+ actStats.Add(recStat);
+ }
+ }
+ }
+ // salvo record statistiche
+ var rawData = JsonConvert.SerializeObject(actStats);
+ string currKey = $"{Utils.redisStatsProcFL}";
+ redisDb.StringSet(currKey, rawData);
+ return answ;
+ }
+
///
/// Stored manutenzione del DB
///
diff --git a/MP.SPEC/MP.SPEC.csproj b/MP.SPEC/MP.SPEC.csproj
index 0e53782a..0180a490 100644
--- a/MP.SPEC/MP.SPEC.csproj
+++ b/MP.SPEC/MP.SPEC.csproj
@@ -5,7 +5,7 @@
enable
enable
MP.SPEC
- 6.16.2310.2312
+ 6.16.2310.2318
diff --git a/MP.SPEC/Pages/FluxLogStatus.razor.cs b/MP.SPEC/Pages/FluxLogStatus.razor.cs
index 6bb67276..7de016a4 100644
--- a/MP.SPEC/Pages/FluxLogStatus.razor.cs
+++ b/MP.SPEC/Pages/FluxLogStatus.razor.cs
@@ -91,9 +91,17 @@ namespace MP.SPEC.Pages
protected override async Task OnInitializedAsync()
{
+ ReloadStats();
await ReloadData();
}
+ private void ReloadStats()
+ {
+ actStats = MDataServ.ProcFLStats();
+ }
+
+ protected List actStats { get; set; } = new List();
+
protected async Task ReloadMacchine()
{
if (ListMacchineAll == null || ListMacchineAll.Count == 0)
@@ -187,6 +195,8 @@ namespace MP.SPEC.Pages
DateTime dtEnd = DateTime.Today.AddDays(1);
DateTime dtStart = dtEnd.AddMonths(-1);
CurrPeriodo = new Periodo(dtStart, dtEnd);
+ // calcolo tempo stimato e mostro...
+
}
#endregion Private Methods
diff --git a/MP.SPEC/Resources/ChangeLog.html b/MP.SPEC/Resources/ChangeLog.html
index 09ad6fb2..c1566c2e 100644
--- a/MP.SPEC/Resources/ChangeLog.html
+++ b/MP.SPEC/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo MAPOSPEC
- Versione: 6.16.2310.2312
+ Versione: 6.16.2310.2318
Note di rilascio:
-
diff --git a/MP.SPEC/Resources/VersNum.txt b/MP.SPEC/Resources/VersNum.txt
index d90133b4..3c671d09 100644
--- a/MP.SPEC/Resources/VersNum.txt
+++ b/MP.SPEC/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2310.2312
+6.16.2310.2318
diff --git a/MP.SPEC/Resources/manifest.xml b/MP.SPEC/Resources/manifest.xml
index b4c63949..72a5afcd 100644
--- a/MP.SPEC/Resources/manifest.xml
+++ b/MP.SPEC/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2310.2312
+ 6.16.2310.2318
https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip
https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html
false