@if (SelRecord != null)
{
-
+
}
else
{
diff --git a/MP.Prog/Components/ArchiveStatus.razor.cs b/MP.Prog/Components/ArchiveStatus.razor.cs
index 8e08c289..34826bae 100644
--- a/MP.Prog/Components/ArchiveStatus.razor.cs
+++ b/MP.Prog/Components/ArchiveStatus.razor.cs
@@ -66,23 +66,24 @@ namespace MP.Prog.Components
protected async Task SelEdit(string idxMacc)
{
// recupero macchina e mando a edit!
- SelRecord = await FDService.MacchinaGetByKey(idxMacc);
+ SelRecord = await FDService.ArchMaccGetByKey(idxMacc);
}
- protected void ResetSel()
+ protected async void ResetSel()
{
SelRecord = null;
+ await ReloadData();
}
protected void AddNew()
{
DateTime adesso = DateTime.Now;
- SelRecord = new MacchinaModel()
+ SelRecord = new ArchMaccModel()
{
IdxMacchina = $"ID_{adesso:yyMMd_HHmmss}",
RuleName = "Rule05.json",
Nome = "Nuova Folder",
- Descrizione = "Nuova folder",
+ Descrizione = "Backup folder",
BasePath = Configuration.GetValue
("ServerConf:FolderBasePath"),
ImgUrl = "Steamware.png",
Note = ""
@@ -116,7 +117,7 @@ namespace MP.Prog.Components
protected async Task ReloadData()
{
- //sw.Restart();
+ ListRecords = null;
await Task.Delay(1);
numChecks = 0;
ListRecords = await FDService.GetArchiveStatus();
@@ -125,6 +126,7 @@ namespace MP.Prog.Components
setupMessages = new List();
showProgress = false;
percLoading = 0;
+ await InvokeAsync(StateHasChanged);
}
#endregion Protected Methods
@@ -133,7 +135,7 @@ namespace MP.Prog.Components
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private List ListRecords;
- private MacchinaModel? SelRecord { get; set; } = null;
+ private ArchMaccModel? SelRecord { get; set; } = null;
private int numChecks = 0;
@@ -168,7 +170,7 @@ namespace MP.Prog.Components
private async Task verificaTutte(int numDays)
{
// recupero elenco macchine
- var listaMacchine = await FDService.MacchineGetAll();
+ var listaMacchine = await FDService.ArchMaccGetAll();
int numMacchine = listaMacchine.Count();
foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList())
{
diff --git a/MP.Prog/Components/FileEditor.razor.cs b/MP.Prog/Components/FileEditor.razor.cs
index d612e1ab..bb5420a8 100644
--- a/MP.Prog/Components/FileEditor.razor.cs
+++ b/MP.Prog/Components/FileEditor.razor.cs
@@ -56,7 +56,7 @@ namespace MP.Prog.Components
public EventCallback DataUpdated { get; set; }
[Parameter]
- public List MacList { get; set; }
+ public List MacList { get; set; }
[Parameter]
public List TagList { get; set; }
diff --git a/MP.Prog/Data/FileArchDataService.cs b/MP.Prog/Data/FileArchDataService.cs
index f6e5472c..cfd6740c 100644
--- a/MP.Prog/Data/FileArchDataService.cs
+++ b/MP.Prog/Data/FileArchDataService.cs
@@ -15,6 +15,7 @@ using System.Diagnostics;
using MP.FileData.Controllers;
using MP.FileData.DTO;
using StackExchange.Redis;
+using MP.FileData.DatabaseModels;
namespace MP.Prog.Data
{
@@ -37,6 +38,12 @@ namespace MP.Prog.Data
redisConn = redisConnMult;
redisDb = this.redisConn.GetDatabase();
+ // json serializer... FIX errore loop circolare https://www.ryadel.com/en/jsonserializationexception-self-referencing-loop-detected-error-fix-entity-framework-asp-net-core/
+ JSSettings = new JsonSerializerSettings()
+ {
+ ReferenceLoopHandling = ReferenceLoopHandling.Ignore
+ };
+
// conf DB
string connStr = _configuration.GetConnectionString("MP.Prog");
if (string.IsNullOrEmpty(connStr))
@@ -54,6 +61,93 @@ namespace MP.Prog.Data
#region Public Methods
+ ///
+ /// Esegue Upsert record ArchivioMacchina
+ ///
+ ///
+ ///
+ public async Task ArchivioMaccUpsert(ArchMaccModel currRec)
+ {
+ bool fatto = await dbController.ArchMaccUpsert(currRec);
+ await ExecFlushRedisPattern($"{redisBaseAddr}:ArchMacc:*");
+ await ExecFlushRedisPattern($"{redisBaseAddr}:ArchStatus:*");
+ return fatto;
+ }
+
+ public async Task> ArchMaccGetAll()
+ {
+ string source = "DB";
+ List dbResult = new List();
+ string currKey = $"{redisBaseAddr}:ArchMacc:ALL";
+ Stopwatch stopWatch = new Stopwatch();
+ stopWatch.Start();
+ string? rawData = await redisDb.StringGetAsync(currKey);
+ if (!string.IsNullOrEmpty(rawData))
+ {
+ source = "REDIS";
+ var tempResult = JsonConvert.DeserializeObject>(rawData);
+ if (tempResult == null)
+ {
+ dbResult = new List();
+ }
+ else
+ {
+ dbResult = tempResult;
+ }
+ }
+ else
+ {
+ dbResult = dbController.ArchMaccGetAll();
+ rawData = JsonConvert.SerializeObject(dbResult, JSSettings);
+ await redisDb.StringSetAsync(currKey, rawData, LongCache);
+ }
+ if (dbResult == null)
+ {
+ dbResult = new List();
+ }
+ stopWatch.Stop();
+ TimeSpan ts = stopWatch.Elapsed;
+ Log.Info($"ArchMaccGetAll | {source} in: {ts.TotalMilliseconds} ms");
+ return dbResult;
+ }
+
+ public async Task ArchMaccGetByKey(string idxMacchina)
+ {
+ string source = "DB";
+ ArchMaccModel dbResult = new ArchMaccModel();
+ string currKey = $"{redisBaseAddr}:ArchMacc:{idxMacchina}";
+ Stopwatch stopWatch = new Stopwatch();
+ stopWatch.Start();
+ string? rawData = await redisDb.StringGetAsync(currKey);
+ if (!string.IsNullOrEmpty(rawData))
+ {
+ source = "REDIS";
+ var tempResult = JsonConvert.DeserializeObject(rawData);
+ if (tempResult == null)
+ {
+ dbResult = new ArchMaccModel();
+ }
+ else
+ {
+ dbResult = tempResult;
+ }
+ }
+ else
+ {
+ dbResult = dbController.ArchMaccGetByKey(idxMacchina);
+ rawData = JsonConvert.SerializeObject(dbResult, JSSettings);
+ await redisDb.StringSetAsync(currKey, rawData, LongCache);
+ }
+ if (dbResult == null)
+ {
+ dbResult = new ArchMaccModel();
+ }
+ stopWatch.Stop();
+ TimeSpan ts = stopWatch.Elapsed;
+ Log.Info($"ArchMaccGetByKey | {source} in: {ts.TotalMilliseconds} ms");
+ return dbResult;
+ }
+
public void Dispose()
{
// Clear database controller
@@ -72,14 +166,14 @@ namespace MP.Prog.Data
return await Task.FromResult(numCount);
}
- public Task FileGetByKey(int FileId)
+ public Task FileGetByKey(int FileId)
{
return Task.FromResult(dbController.FileGetByKey(FileId));
}
- public async Task> FileGetFilt(SelectData CurrFilter)
+ public async Task> FileGetFilt(SelectData CurrFilter)
{
- List dbResult = new List();
+ List dbResult = new List();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
dbResult = dbController.FileGetFilt(CurrFilter.IdxMacchina, CurrFilter.OnlyActive, CurrFilter.OnlyMod, CurrFilter.OnlyNoTag, CurrFilter.FileName, CurrFilter.Tag, CurrFilter.SearchVal, CurrFilter.NumSkip, CurrFilter.PageSize).ToList();
@@ -98,31 +192,46 @@ namespace MP.Prog.Data
public async Task> GetArchiveStatus()
{
+ string source = "DB";
List dbResult = new List();
+ string currKey = $"{redisBaseAddr}:ArchStatus:ALL";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
- dbResult = dbController.GetArchiveStatus();
+ string? rawData = await redisDb.StringGetAsync(currKey);
+ if (!string.IsNullOrEmpty(rawData))
+ {
+ source = "REDIS";
+ var tempResult = JsonConvert.DeserializeObject>(rawData);
+ if (tempResult == null)
+ {
+ dbResult = new List();
+ }
+ else
+ {
+ dbResult = tempResult;
+ }
+ }
+ else
+ {
+ dbResult = dbController.GetArchiveStatus();
+ rawData = JsonConvert.SerializeObject(dbResult, JSSettings);
+ await redisDb.StringSetAsync(currKey, rawData, LongCache);
+ }
+ if (dbResult == null)
+ {
+ dbResult = new List();
+ }
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
- Log.Trace($"Effettuata lettura da DB per GetArchiveStatus: {ts.TotalMilliseconds} ms");
- return await Task.FromResult(dbResult);
- }
-
- public Task MacchinaGetByKey(string idxMacchina)
- {
- return Task.FromResult(dbController.MacchinaGetByKey(idxMacchina));
- }
-
- public Task> MacchineGetAll()
- {
- return Task.FromResult(dbController.MacchineGetAll().ToList());
+ Log.Info($"GetArchiveStatus | {source} in: {ts.TotalMilliseconds} ms");
+ return dbResult;
}
public async Task> MachineList()
{
List answ = new List();
answ.Add(new AutocompleteModel { LabelField = "--- TUTTE ---", ValueField = "*" });
- answ.AddRange(dbController.MacchineGetAll().Select(x => new AutocompleteModel { LabelField = $"{x.IdxMacchina} | {x.Nome} {x.Descrizione} ", ValueField = x.IdxMacchina }).ToList());
+ answ.AddRange(dbController.ArchMaccGetAll().Select(x => new AutocompleteModel { LabelField = $"{x.IdxMacchina} | {x.Nome} {x.Descrizione} ", ValueField = x.IdxMacchina }).ToList());
return await Task.FromResult(answ);
}
@@ -131,7 +240,7 @@ namespace MP.Prog.Data
dbController.RollBackEntity(item);
}
- public async Task> TagGetFilt(string SearchVal)
+ public async Task> TagGetFilt(string SearchVal)
{
return await Task.FromResult(dbController.TagGetFilt(SearchVal, 200).ToList());
}
@@ -157,7 +266,7 @@ namespace MP.Prog.Data
public async Task updateAllArchive(int numDayPre, bool forceTag)
{
int checkDone = 0;
- var listaMacchine = await MacchineGetAll();
+ var listaMacchine = await ArchMaccGetAll();
foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList())
{
checkDone += await updateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false);
@@ -184,7 +293,7 @@ namespace MP.Prog.Data
string ruleName = "Rule00.json";
try
{
- var macchina = MacchinaGetByKey(idxMacchina).Result;
+ var macchina = ArchMaccGetByKey(idxMacchina).Result;
if (macchina != null && !string.IsNullOrEmpty(macchina.BasePath))
{
if (!string.IsNullOrEmpty(macchina.RuleName))
@@ -255,27 +364,27 @@ namespace MP.Prog.Data
#region Internal Methods
- internal Task FileApprove(FileData.DatabaseModels.FileModel currItem)
+ internal Task FileApprove(FileModel currItem)
{
return Task.FromResult(dbController.FileModApprove(currItem));
}
- internal Task FileDelete(FileData.DatabaseModels.FileModel currItem)
+ internal Task FileDelete(FileModel currItem)
{
return Task.FromResult(dbController.FileDelete(currItem));
}
- internal Task FileExport(FileData.DatabaseModels.FileModel currItem)
+ internal Task FileExport(FileModel currItem)
{
return Task.FromResult(dbController.FileExport(currItem));
}
- internal Task FileReject(FileData.DatabaseModels.FileModel currItem)
+ internal Task FileReject(FileModel currItem)
{
return Task.FromResult(dbController.FileModReject(currItem));
}
- internal Task FileUpdate(FileData.DatabaseModels.FileModel updItem)
+ internal Task FileUpdate(FileModel updItem)
{
return Task.FromResult(dbController.FileUpdate(updItem));
}
@@ -290,7 +399,6 @@ namespace MP.Prog.Data
#region Protected Fields
protected static string connStringBBM = "";
-
protected static string connStringFatt = "";
#endregion Protected Fields
@@ -303,11 +411,9 @@ namespace MP.Prog.Data
private const string redisBaseAddr = "MP:PROG";
private static IConfiguration _configuration;
-
private static ILogger _logger;
-
- private static List ElencoMacchine = new List();
-
+ private static List ElencoMacchine = new List();
+ private static JsonSerializerSettings? JSSettings;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
///
diff --git a/MP.Prog/MP.Prog.csproj b/MP.Prog/MP.Prog.csproj
index 322d4bf8..fc54a3b8 100644
--- a/MP.Prog/MP.Prog.csproj
+++ b/MP.Prog/MP.Prog.csproj
@@ -3,7 +3,7 @@
net6.0
MP.Prog
- 6.16.2410.2109
+ 6.16.2410.2112
diff --git a/MP.Prog/Pages/Archive.razor.cs b/MP.Prog/Pages/Archive.razor.cs
index 2fcf8f70..d5203f1b 100644
--- a/MP.Prog/Pages/Archive.razor.cs
+++ b/MP.Prog/Pages/Archive.razor.cs
@@ -18,7 +18,7 @@ namespace MP.Prog.Pages
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private FileModel currRecord = null;
private List ListRecords;
- private List MacList;
+ private List MacList;
private List TagList;
#endregion Private Fields
@@ -423,7 +423,7 @@ namespace MP.Prog.Pages
protected async Task ReloadAllData()
{
isLoading = true;
- MacList = await DataService.MacchineGetAll();
+ MacList = await DataService.ArchMaccGetAll();
SelIdxMacc = "0";
SearchTag = defTag;
TagList = await DataService.TagGetFilt(SearchTag);
diff --git a/MP.Prog/Program.cs b/MP.Prog/Program.cs
index 904ca0f8..e5b33f61 100644
--- a/MP.Prog/Program.cs
+++ b/MP.Prog/Program.cs
@@ -24,7 +24,7 @@ namespace MP.Prog
.ConfigureLogging(logging =>
{
logging.ClearProviders();
- logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
+ logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Error);
})
.UseNLog();
diff --git a/MP.Prog/Resources/ChangeLog.html b/MP.Prog/Resources/ChangeLog.html
index 01be5e3f..57384cc7 100644
--- a/MP.Prog/Resources/ChangeLog.html
+++ b/MP.Prog/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo gestione Programmi MAPO
- Versione: 6.16.2410.2109
+ Versione: 6.16.2410.2112
Note di rilascio:
diff --git a/MP.Prog/Resources/VersNum.txt b/MP.Prog/Resources/VersNum.txt
index 9233ad8d..df973cd0 100644
--- a/MP.Prog/Resources/VersNum.txt
+++ b/MP.Prog/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2410.2109
+6.16.2410.2112
diff --git a/MP.Prog/Resources/manifest.xml b/MP.Prog/Resources/manifest.xml
index a7c66212..fd918475 100644
--- a/MP.Prog/Resources/manifest.xml
+++ b/MP.Prog/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2410.2109
+ 6.16.2410.2112
https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/MP.Prog.zip
https://nexus.steamware.net/repository/SWS/MP-PROG/stable/LAST/ChangeLog.html
false
diff --git a/MP.Prog/appsettings.json b/MP.Prog/appsettings.json
index 397f561f..3f754328 100644
--- a/MP.Prog/appsettings.json
+++ b/MP.Prog/appsettings.json
@@ -39,7 +39,7 @@
"rules": [
{
"logger": "*",
- "minLevel": "Trace",
+ "minLevel": "Info",
"writeTo": "logconsole"
},
{