();
int deletedCount = 0;
foreach (var key in keysToDelete)
{
- await batch.KeyDeleteAsync(key);
+ pendingOps.Add(batch.KeyDeleteAsync(key));
deletedCount++;
}
batch.Execute();
+ // attendo conclusione
+ await Task.WhenAll(pendingOps);
Log.Info($"[CLEANUP HOUR] Deleted {deletedCount} expired metric keys from Redis");
}
}
@@ -396,7 +459,7 @@ namespace MP.RIOC.Services
var p = relativeKey.Split(':');
if (p.Length < 4) return false;
- meta.IsHourType = p[1].Equals("hour", StringComparison.InvariantCultureIgnoreCase);
+ meta.IsHourType = p[1].Contains("hour", StringComparison.InvariantCultureIgnoreCase);
meta.Dest = p[2];
if (meta.IsHourType)
{
diff --git a/MP.RIOC/Services/RouteManager.cs b/MP.RIOC/Services/RouteManager.cs
index e6961d85..ce661fd0 100644
--- a/MP.RIOC/Services/RouteManager.cs
+++ b/MP.RIOC/Services/RouteManager.cs
@@ -98,9 +98,17 @@ namespace MP.RIOC.Services
// ESECUZIONE FORWARDING
var error = await _forwarder.SendAsync(context, destBase, _httpClientInvoker, _forwarderConfig, HttpTransformer.Default, context.RequestAborted);
- // commento transformer custom
- //var error = await _forwarder.SendAsync(context, destBase, _httpClientInvoker, _forwarderConfig, _transformer, context.RequestAborted);
-
+ // Se YARP fallisce per un problema di connessione interrotta (come l'errore 995)
+ // e NON è un problema di sintassi della richiesta o di autorizzazione
+ if (error != ForwarderError.None &&
+ error != ForwarderError.RequestBodyClient &&
+ error != ForwarderError.RequestCanceled &&
+ error != ForwarderError.NoAvailableDestinations)
+ {
+ // Fai un secondo e ultimo tentativo immediato prima di dare errore al client
+ Log.Warn($"Micro-reset di rete rilevato ({error}). Tento il secondo invio immediato...");
+ error = await _forwarder.SendAsync(context, destBase, _httpClientInvoker, _forwarderConfig, HttpTransformer.Default, context.RequestAborted);
+ }
sw.Stop();
_stats.RecordDuration(sKey, sw.Elapsed);
diff --git a/MP.RIOC/appsettings.Development.json b/MP.RIOC/appsettings.Development.json
index 0c208ae9..d7f9ed43 100644
--- a/MP.RIOC/appsettings.Development.json
+++ b/MP.RIOC/appsettings.Development.json
@@ -2,6 +2,7 @@
"Logging": {
"LogLevel": {
"Default": "Information",
+ "Yarp": "Warning",
"Microsoft.AspNetCore": "Warning"
}
}
diff --git a/MP.RIOC/appsettings.Production.json b/MP.RIOC/appsettings.Production.json
index 7a752d3d..7910e3ea 100644
--- a/MP.RIOC/appsettings.Production.json
+++ b/MP.RIOC/appsettings.Production.json
@@ -2,6 +2,7 @@
"Logging": {
"LogLevel": {
"Default": "Information",
+ "Yarp": "Warning",
"Microsoft.AspNetCore": "Warning"
}
},
diff --git a/MP.RIOC/appsettings.Staging-silent.json b/MP.RIOC/appsettings.Staging-silent.json
new file mode 100644
index 00000000..b68fbaa1
--- /dev/null
+++ b/MP.RIOC/appsettings.Staging-silent.json
@@ -0,0 +1,35 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Warning",
+ "Yarp": "Warning",
+ "Microsoft": "Warning",
+ "Microsoft.AspNetCore": "Warning",
+ "Microsoft.AspNetCore.Hosting.Diagnostics": "Warning"
+ }
+ },
+ "NLog": {
+ "rules": [
+ {
+ "logger": "Microsoft.*",
+ "maxLevel": "Fatal",
+ "final": true
+ },
+ {
+ "logger": "Yarp.*",
+ "maxLevel": "Fatal",
+ "final": true
+ },
+ {
+ "logger": "*",
+ "minLevel": "Info",
+ "writeTo": "logconsole"
+ },
+ {
+ "logger": "*",
+ "minLevel": "Info",
+ "writeTo": "logfile"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/MP.RIOC/appsettings.Staging-verbose.json b/MP.RIOC/appsettings.Staging-verbose.json
new file mode 100644
index 00000000..cdb99149
--- /dev/null
+++ b/MP.RIOC/appsettings.Staging-verbose.json
@@ -0,0 +1,24 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Warning",
+ "Yarp": "Warning",
+ "Microsoft.EntityFrameworkCore": "Warning",
+ "Microsoft.AspNetCore.Hosting.Diagnostics": "Information"
+ }
+ },
+ "NLog": {
+ "rules": [
+ {
+ "logger": "Microsoft.AspNetCore.Hosting.Diagnostics",
+ "maxLevel": "Info",
+ "finalMinLevel": "Info"
+ },
+ {
+ "logger": "*",
+ "minLevel": "Info",
+ "writeTo": "logfile"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/MP.RIOC/appsettings.Staging.json b/MP.RIOC/appsettings.Staging.json
new file mode 100644
index 00000000..b68fbaa1
--- /dev/null
+++ b/MP.RIOC/appsettings.Staging.json
@@ -0,0 +1,35 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Warning",
+ "Yarp": "Warning",
+ "Microsoft": "Warning",
+ "Microsoft.AspNetCore": "Warning",
+ "Microsoft.AspNetCore.Hosting.Diagnostics": "Warning"
+ }
+ },
+ "NLog": {
+ "rules": [
+ {
+ "logger": "Microsoft.*",
+ "maxLevel": "Fatal",
+ "final": true
+ },
+ {
+ "logger": "Yarp.*",
+ "maxLevel": "Fatal",
+ "final": true
+ },
+ {
+ "logger": "*",
+ "minLevel": "Info",
+ "writeTo": "logconsole"
+ },
+ {
+ "logger": "*",
+ "minLevel": "Info",
+ "writeTo": "logfile"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/MP.RIOC/appsettings.json b/MP.RIOC/appsettings.json
index 958cb8ba..809c089c 100644
--- a/MP.RIOC/appsettings.json
+++ b/MP.RIOC/appsettings.json
@@ -2,10 +2,11 @@
"Logging": {
"LogLevel": {
"Default": "Information",
- "Yarp": "Debug",
- "Microsoft.AspNetCore": "Warning",
+ "Yarp": "Information",
+ "Microsoft.AspNetCore.Hosting.Diagnostics": "Information",
+ "Microsoft.EntityFrameworkCore.Database.Command": "Warning",
"Microsoft.EntityFrameworkCore": "Warning",
- "Microsoft.EntityFrameworkCore.Database.Command": "Warning"
+ "Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
@@ -24,7 +25,7 @@
"logfile": {
"type": "File",
"fileName": "${basedir}/logs/${shortdate}.log",
- "keepFileOpen": false,
+ "keepFileOpen": true,
"archiveEvery": "Day",
"archiveFileName": "${basedir}/logs/old/${shortdate}_{#}.log",
"archiveNumbering": "DateAndSequence",
@@ -39,9 +40,24 @@
}
},
"rules": [
+ {
+ "logger": "Microsoft.EntityFrameworkCore.*",
+ "maxLevel": "Info",
+ "final": true
+ },
+ {
+ "logger": "Microsoft.AspNetCore.Hosting.*",
+ "minLevel": "Info",
+ "finalMinLevel": "Info"
+ },
+ {
+ "logger": "Microsoft.AspNetCore.*",
+ "maxLevel": "Info",
+ "finalMinLevel": "Info"
+ },
{
"logger": "*",
- "minLevel": "Trace",
+ "minLevel": "Info",
"writeTo": "logconsole"
},
{
diff --git a/MP.SPEC/Components/CmpTop.razor.cs b/MP.SPEC/Components/CmpTop.razor.cs
index 2889baca..e7075b5c 100644
--- a/MP.SPEC/Components/CmpTop.razor.cs
+++ b/MP.SPEC/Components/CmpTop.razor.cs
@@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.JSInterop;
using MP.AppAuth.Services;
+using MP.Data.DbModels;
using MP.SPEC.Data;
using MP.SPEC.Extensions;
@@ -52,6 +53,14 @@ namespace MP.SPEC.Components
protected async Task FlushCache()
{
+
+ // svuoto cache redis...
+ ConfigModel updRec = new ConfigModel()
+ {
+ Chiave = "AZIENDA",
+ Valore = "*"
+ };
+ await MDService.ConfigUpdateAsync(updRec);
await MDService.ForceFlushRedisCache();
await MDService.ForceFlushFusionCacheAsync();
await ForceReload();
diff --git a/MP.SPEC/Components/ProdKit/GestKitPodl.razor.cs b/MP.SPEC/Components/ProdKit/GestKitPodl.razor.cs
index e15fd13e..4492444f 100644
--- a/MP.SPEC/Components/ProdKit/GestKitPodl.razor.cs
+++ b/MP.SPEC/Components/ProdKit/GestKitPodl.razor.cs
@@ -169,6 +169,7 @@ namespace MP.SPEC.Components.ProdKit
protected async Task toggleClosed()
{
hasOdl = !hasOdl;
+ currPage = 1;
await EC_HasOdl.InvokeAsync(hasOdl);
}
diff --git a/MP.SPEC/Components/ProdKit/KitPodlMan.razor.cs b/MP.SPEC/Components/ProdKit/KitPodlMan.razor.cs
index 0bb9c05f..bde8feb5 100644
--- a/MP.SPEC/Components/ProdKit/KitPodlMan.razor.cs
+++ b/MP.SPEC/Components/ProdKit/KitPodlMan.razor.cs
@@ -220,12 +220,6 @@ namespace MP.SPEC.Components.ProdKit
set => ActFilter.CurrPage = value;
}
- private bool hasOdl
- {
- get => ActFilter.HasOdl;
- set => ActFilter.HasOdl = value;
- }
-
private bool isLoading { get; set; } = false;
private SelectXdlParams lastFilter { get; set; } = new SelectXdlParams() { CurrPage = -1 };
diff --git a/MP.SPEC/Components/ProdKit/KitVerify.razor b/MP.SPEC/Components/ProdKit/KitVerify.razor
index 6ead57b4..c64b9677 100644
--- a/MP.SPEC/Components/ProdKit/KitVerify.razor
+++ b/MP.SPEC/Components/ProdKit/KitVerify.razor
@@ -54,10 +54,10 @@
}
-
Elenco promesse per KIT (100%)
+
Elenco promesse KIT (100%) da produrre
@if (ListRecPODL == null || ListRecPODL.Count == 0)
{
-
Nessuna PODL compatibile presente
+
Nessuna PODL KIT presente
}
else
{
diff --git a/MP.SPEC/Components/ProdKit/Manager.razor.cs b/MP.SPEC/Components/ProdKit/Manager.razor.cs
index afaa0533..3dbc1355 100644
--- a/MP.SPEC/Components/ProdKit/Manager.razor.cs
+++ b/MP.SPEC/Components/ProdKit/Manager.razor.cs
@@ -188,7 +188,7 @@ namespace MP.SPEC.Components.ProdKit
{
listPOdlCheck = new List
();
listPOdlAct = await MDService.POdlListGetFiltAsync(ActFilt.HasOdl, ActFilt.CodFase, ActFilt.IdxMacchina, ActFilt.CodReparto, ActFilt.DtStart, ActFilt.DtEnd);
- listPOdl2Kit = await MDService.POdlToKitListGetFiltAsync(ActFilt.HasOdl, ActFilt.CodFase, ActFilt.IdxMacchina, ActFilt.CodReparto, ActFilt.DtStart, ActFilt.DtEnd, true, true);
+ listPOdl2Kit = await MDService.POdlToKitListGetFiltAsync(false, ActFilt.CodFase, ActFilt.IdxMacchina, ActFilt.CodReparto, ActFilt.DtStart, ActFilt.DtEnd, true, false);
listWSM = await MDService.WipKitFiltAsync(keyFilt);
listTSM = await MDService.TksScoreAsync(keyFilt, 1000, true);
listIKP = await MDService.IstKitFiltAsync("", "");
diff --git a/MP.SPEC/Components/SelFilterXDL.razor b/MP.SPEC/Components/SelFilterXDL.razor
index fd67cd66..0ee83b92 100644
--- a/MP.SPEC/Components/SelFilterXDL.razor
+++ b/MP.SPEC/Components/SelFilterXDL.razor
@@ -87,7 +87,7 @@
}
- @if (!isActive || hasOdl)
+ @if (true || !isActive || hasOdl)
{
diff --git a/MP.SPEC/Data/MpDataService.cs b/MP.SPEC/Data/MpDataService.cs
index 65cee36d..19ead2ec 100644
--- a/MP.SPEC/Data/MpDataService.cs
+++ b/MP.SPEC/Data/MpDataService.cs
@@ -1926,7 +1926,7 @@ namespace MP.SPEC.Data
return await GetOrFetchAsync(
operationName: "TksScoreAsync",
cacheKey: currKey,
- expiration: TimeSpan.FromMinutes(redisLongTimeCache),
+ expiration: GetRandTOut(redisLongTimeCache),
fetchFunc: async () => await _productionRepository.TksScoreAsync(KeyFilt, MaxResult) ?? new List(),
tagList: [Utils.redisKitScore]
);
@@ -2016,7 +2016,7 @@ namespace MP.SPEC.Data
return await GetOrFetchAsync(
operationName: "WipKitFiltAsync",
cacheKey: currKey,
- expiration: TimeSpan.FromMinutes(redisLongTimeCache),
+ expiration: GetRandTOut(redisLongTimeCache),
fetchFunc: async () => await _productionRepository.WipKitFiltAsync(KeyFilt) ?? new List(),
tagList: [Utils.redisKitWip]
);
@@ -2035,6 +2035,7 @@ namespace MP.SPEC.Data
fatto = await _productionRepository.WipKitUpsertAsync(currRecord);
// svuoto cache KitWip
await FlushFusionCacheAsync(Utils.redisKitWip);
+ await FlushFusionCacheAsync(Utils.redisKitScore);
activity?.SetTag("data.source", source);
activity?.Stop();
LogTrace($"WipKitUpsertAsync | {source} | {activity?.Duration.TotalMilliseconds}ms");
diff --git a/MP.SPEC/MP.SPEC.csproj b/MP.SPEC/MP.SPEC.csproj
index 49f371ab..906a6c6d 100644
--- a/MP.SPEC/MP.SPEC.csproj
+++ b/MP.SPEC/MP.SPEC.csproj
@@ -5,7 +5,7 @@
enable
enable
MP.SPEC
- 8.16.2606.1117
+ 8.16.2606.1312
1800a78a-6ff1-40f9-b490-87fb8bfc1394
en
diff --git a/MP.SPEC/Pages/ForceReset.razor b/MP.SPEC/Pages/ForceReset.razor
index 3d209938..073e56e3 100644
--- a/MP.SPEC/Pages/ForceReset.razor
+++ b/MP.SPEC/Pages/ForceReset.razor
@@ -1,4 +1,5 @@
@page "/force-reset"
+@page "/ForceReset"
@using MP.AppAuth.Services
@using MP.SPEC.Data
@@ -47,6 +48,13 @@
nextVal = 10;
await InvokeAsync(StateHasChanged);
await Task.Delay(bDelay);
+ // svuoto cache redis...
+ ConfigModel updRec = new ConfigModel()
+ {
+ Chiave = "AZIENDA",
+ Valore = "*"
+ };
+ await MDService.ConfigUpdateAsync(updRec);
title = "UserDataReload...";
currVal = 50;
nextVal = 80;
diff --git a/MP.SPEC/Pages/Giacenze.razor b/MP.SPEC/Pages/Giacenze.razor
index 7970bc22..70400660 100644
--- a/MP.SPEC/Pages/Giacenze.razor
+++ b/MP.SPEC/Pages/Giacenze.razor
@@ -68,8 +68,6 @@ else
}
- @**@
}
diff --git a/MP.SPEC/Pages/Giacenze.razor.cs b/MP.SPEC/Pages/Giacenze.razor.cs
index 06cf32da..a109da04 100644
--- a/MP.SPEC/Pages/Giacenze.razor.cs
+++ b/MP.SPEC/Pages/Giacenze.razor.cs
@@ -1,27 +1,13 @@
-using Blazored.SessionStorage;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.WebUtilities;
using MP.Data.DbModels;
+using MP.Data.Services;
using MP.SPEC.Data;
namespace MP.SPEC.Pages
{
public partial class Giacenze
{
- #region Protected Fields
-
- protected List? elencoOdl;
-
- #endregion Protected Fields
-
- #region Protected Properties
-
- protected int IdxOdl { get; set; } = 0;
-
- protected ODLExpModel? odlExp { get; set; } = null!;
-
- #endregion Protected Properties
-
#region Protected Methods
protected override async Task OnInitializedAsync()
@@ -41,34 +27,43 @@ namespace MP.SPEC.Pages
odlExp = await MDService.OdlByKeyAsync(IdxOdl);
}
+ protected void saveBatch(string newBatch)
+ {
+ BatchSel = newBatch;
+ }
+
#endregion Protected Methods
+ #region Private Fields
+
+ private List? elencoOdl;
+
+ private string giacenzeConf = "false";
+
+ #endregion Private Fields
+
#region Private Properties
+ private string BatchSel { get; set; } = "";
+ private int IdxOdl { get; set; } = 0;
+
+ private string mainTabCss
+ {
+ get => !string.IsNullOrEmpty(BatchSel) ? "col-10" : "col-12";
+ }
+
[Inject]
private MpDataService MDService { get; set; } = null!;
[Inject]
private NavigationManager NavManager { get; set; } = null!;
+ private ODLExpModel? odlExp { get; set; } = null!;
private string padCodXdl { get; set; } = "00000";
- private string giacenzeConf = "false";
[Inject]
private ISessionStorageService sessionStorage { get; set; } = null!;
- private string BatchSel { get; set; } = "";
-
- private string mainTabCss
- {
- get => !string.IsNullOrEmpty(BatchSel) ? "col-10" : "col-12";
- }
-
- protected void saveBatch(string newBatch)
- {
- BatchSel = newBatch;
- }
-
#endregion Private Properties
}
}
\ No newline at end of file
diff --git a/MP.SPEC/Pages/PODL.razor b/MP.SPEC/Pages/PODL.razor
index 0b88ee99..a122e1a9 100644
--- a/MP.SPEC/Pages/PODL.razor
+++ b/MP.SPEC/Pages/PODL.razor
@@ -33,7 +33,7 @@