From 9fad86eb1785eaf5b4d4dfcbfbb814a9c9acde56 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 21 Oct 2024 20:09:28 +0200 Subject: [PATCH] PROG - correzione tag extraction - correzione indentazione json --- MP.FileData/Controllers/FileController.cs | 38 +++++--- MP.FileData/DatabaseModels/FileModel.cs | 17 +++- MP.FileData/TagsUtils.cs | 15 ++-- MP.Prog/Components/ArchiveStatus.razor.cs | 105 +++++++++++----------- MP.Prog/Components/DiffView.razor | 4 +- MP.Prog/Components/FileEditor.razor.cs | 2 +- MP.Prog/Conf/Rule05.json | 3 +- MP.Prog/Data/FileArchDataService.cs | 25 ++++-- MP.Prog/MP.Prog.csproj | 2 +- MP.Prog/Pages/Archive.razor | 4 +- MP.Prog/Pages/Archive.razor.cs | 7 +- MP.Prog/Program.cs | 5 +- MP.Prog/Resources/ChangeLog.html | 2 +- MP.Prog/Resources/VersNum.txt | 2 +- MP.Prog/Resources/manifest.xml | 2 +- MP.Prog/appsettings.json | 2 +- 16 files changed, 137 insertions(+), 98 deletions(-) diff --git a/MP.FileData/Controllers/FileController.cs b/MP.FileData/Controllers/FileController.cs index 93038046..a244408d 100644 --- a/MP.FileData/Controllers/FileController.cs +++ b/MP.FileData/Controllers/FileController.cs @@ -138,13 +138,27 @@ namespace MP.FileData.Controllers { fileList = fileListRaw.ToList(); } - Log.Trace($"CheckFileArchived S01 | file trovati: {fileList.Count()}"); + Log.Debug($"CheckFileArchived S01 | file trovati: {fileList.Count()}"); List fileNew = new List(); List fileChecked = new List(); List fileMod = new List(); // recupera elenco file nel DB - var archivedFile = FileGetByPath(path, true); + List archivedFile = new List(); + List foundFile = FileGetByPath(path, true); + // rimuovo eventuali file con estensioni escluse... + foreach (var fRec in foundFile) + { + if (!string.IsNullOrEmpty(fRec.Extension) && currRule.ExcludedFileExt.Contains(fRec.Extension)) + { + Log.Trace($"CheckFileArchived S01.B: escluso {fRec.Name} | estensione {fRec.Extension}"); + } + else + { + archivedFile.Add(fRec); + } + } + Log.Debug($"CheckFileArchived S01.C | Recuperati {archivedFile.Count()} da DB per confronto"); using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) { // verifica i file @@ -159,9 +173,9 @@ namespace MP.FileData.Controllers { // cerca nel DB... FileModel currRecord = archivedFile - .Where(x => x.Active && x.Path == file.FullName) - .OrderByDescending(y => y.Rev) - .FirstOrDefault(); + .Where(x => x.Active && x.Path == file.FullName) + .OrderByDescending(y => y.Rev) + .FirstOrDefault(); // se NON trova lo crea if (currRecord == null) { @@ -389,7 +403,7 @@ namespace MP.FileData.Controllers using (MoonPro_ProgContext localDbCtx = new MoonPro_ProgContext(_configuration)) { // converto - List newRec = newFiles.Select(o => new DatabaseModels.FileModel() + List newRec = newFiles.Select(o => new FileModel() { Active = true, DiskStatus = FileState.Ok, @@ -427,15 +441,15 @@ namespace MP.FileData.Controllers // cerco codice tag da configurazione if (currRule.Mode == SearchMode.StringOnFile) { - Tags = TagsUtils.searchProgComment(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchProgComment(fileName, item.FileStringContent, currRule); } else if (currRule.Mode == SearchMode.TagListed) { - Tags = TagsUtils.searchTagListed(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchTagListed(fileName, item.FileStringContent, currRule); } else { - Tags = TagsUtils.searchPathName(item.Path, basePath, currRule); + Tags = TagsUtils.SearchPathName(item.Path, basePath, currRule); } foreach (var tag in Tags) @@ -594,15 +608,15 @@ namespace MP.FileData.Controllers // cerco codice tag da configurazione if (currRule.Mode == SearchMode.StringOnFile) { - Tags = TagsUtils.searchProgComment(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchProgComment(fileName, item.FileStringContent, currRule); } else if (currRule.Mode == SearchMode.TagListed) { - Tags = TagsUtils.searchTagListed(fileName, item.FileStringContent, currRule); + Tags = TagsUtils.SearchTagListed(fileName, item.FileStringContent, currRule); } else { - Tags = TagsUtils.searchPathName(item.Path, basePath, currRule); + Tags = TagsUtils.SearchPathName(item.Path, basePath, currRule); } foreach (var tag in Tags) diff --git a/MP.FileData/DatabaseModels/FileModel.cs b/MP.FileData/DatabaseModels/FileModel.cs index 206eaf3b..120fb8ee 100644 --- a/MP.FileData/DatabaseModels/FileModel.cs +++ b/MP.FileData/DatabaseModels/FileModel.cs @@ -48,7 +48,22 @@ namespace MP.FileData.DatabaseModels set { // serializzo a byte - FileContent = Encoding.ASCII.GetBytes(value); + //FileContent = Encoding.ASCII.GetBytes(value); + FileContent = Encoding.UTF8.GetBytes(value); + } + } + [NotMapped] + public string Extension + { + get + { + string answ = ""; + if(!string.IsNullOrEmpty(Name)) + { + int sPos = Name.LastIndexOf('.'); + answ = Name.Substring(sPos); + } + return answ; } } diff --git a/MP.FileData/TagsUtils.cs b/MP.FileData/TagsUtils.cs index eae78062..5fa5e69d 100644 --- a/MP.FileData/TagsUtils.cs +++ b/MP.FileData/TagsUtils.cs @@ -36,7 +36,7 @@ namespace MP.FileData /// Nome del file (path completo) /// Parametri analisi /// - public static List searchPathName(string filePath, string basePath, SearchRules currRule) + public static List SearchPathName(string filePath, string basePath, SearchRules currRule) { List answ = new List(); string fileName = Path.GetFileName(filePath); @@ -74,7 +74,7 @@ namespace MP.FileData // se nullo --> segnalo! if (answ.Count == 0) { - Log.Warn($"searchPathName Attenzione Tag non trovati | {filePath} | basePath: {basePath}"); + Log.Warn($"SearchPathName Attenzione Tag non trovati | {filePath} | basePath: {basePath}"); } return answ; } @@ -89,7 +89,7 @@ namespace MP.FileData /// Contenuto del file da analizzare /// Parametri analisi /// - public static List searchProgComment(string fileName, string fileContent, SearchRules currRule) + public static List SearchProgComment(string fileName, string fileContent, SearchRules currRule) { // verifico se trimmare contenuto file if (fileContent.Length > currRule.MaxChar2Search && currRule.MaxChar2Search > 0) @@ -148,7 +148,7 @@ namespace MP.FileData // se nullo --> segnalo! if (answ.Count == 0) { - Log.Warn($"searchProgComment Attenzione Tag non trovati | {fileName} | pattern: {pattern}"); + Log.Warn($"SearchProgComment Attenzione Tag non trovati | {fileName} | pattern: {pattern}"); //Log.Trace($"{fileName}:{Environment.NewLine}{fileContent}"); } return answ; @@ -164,7 +164,7 @@ namespace MP.FileData /// Contenuto del file da analizzare /// Parametri analisi /// - public static List searchTagListed(string fileName, string fileContent, SearchRules currRule) + public static List SearchTagListed(string fileName, string fileContent, SearchRules currRule) { // verifico se trimmare contenuto file if (fileContent.Length > currRule.MaxChar2Search && currRule.MaxChar2Search > 0) @@ -183,7 +183,7 @@ namespace MP.FileData { foreach (var row in fileRows) { - if (row.StartsWith(tag2check)) + if (row.StartsWith(tag2check) || row.Contains(tag2check)) { answ.Add(row.Trim()); break; @@ -195,8 +195,7 @@ namespace MP.FileData // se nullo --> segnalo! if (answ.Count == 0) { - Log.Warn($"searchTagListed Attenzione Tag non trovati | {fileName} | tags cercati: {currRule.Tag2Collect.Count}"); - //Log.Trace($"{Environment.NewLine}{fileContent}"); + Log.Warn($"SearchTagListed Attenzione Tag non trovati | {fileName} | tags cercati: {currRule.Tag2Collect.Count}"); } return answ; } diff --git a/MP.Prog/Components/ArchiveStatus.razor.cs b/MP.Prog/Components/ArchiveStatus.razor.cs index 301b9255..6a82f597 100644 --- a/MP.Prog/Components/ArchiveStatus.razor.cs +++ b/MP.Prog/Components/ArchiveStatus.razor.cs @@ -27,10 +27,10 @@ namespace MP.Prog.Components #region Protected Properties [Inject] - protected FileArchDataService FDService { get; set; } + protected IConfiguration Configuration { get; set; } [Inject] - protected IConfiguration Configuration { get; set; } + protected FileArchDataService FDService { get; set; } protected int percLoading { get; set; } = 0; protected bool showProgress { get; set; } = false; @@ -39,42 +39,6 @@ namespace MP.Prog.Components #region Protected Methods - protected async Task ArchiveCheck(int maxHour) - { - showProgress = true; - percLoading = 0; - await verificaTutte(maxHour); - - setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); - } - - protected async Task ArchiveSingleCheck(string idxMacchina, int maxHour) - { - showProgress = true; - percLoading = 0; - await verificaSingola(idxMacchina, maxHour, 2); - - setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); - } - - protected async Task ClearMessage() - { - await Task.Delay(10); - setupMessages = new List(); - } - - protected async Task SelEdit(string idxMacc) - { - // recupero macchina e mando a edit! - SelRecord = await FDService.ArchMaccGetByKey(idxMacc); - } - - protected async void ResetSel() - { - SelRecord = null; - await ReloadData(); - } - protected void AddNew() { DateTime adesso = DateTime.Now; @@ -89,25 +53,51 @@ namespace MP.Prog.Components Note = "" }; } + + protected async Task ArchiveCheck(int maxHour) + { + showProgress = true; + percLoading = 0; + await VerificaTutte(maxHour); + + setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); + } + + protected async Task ArchiveSingleCheck(string idxMacchina, int maxHour) + { + showProgress = true; + percLoading = 0; + await VerificaSingola(idxMacchina, maxHour, 2); + + setupMessages.Add($"Effettuata verifica e rilettura di {numChecks} files!"); + } + + protected void ClearMessage() + { + setupMessages = new List(); + } + protected async Task ForceCheck(int maxHour) { + ListRecords = null; + await InvokeAsync(StateHasChanged); setupMessages.Add("Inizio Analisi Archivio..."); await InvokeAsync(StateHasChanged); - ListRecords = null; - await Task.Delay(1); await ArchiveCheck(maxHour); - await ClearMessage(); + await Task.Delay(400); + ClearMessage(); await ReloadData(); } protected async Task ForceCheckMacchina(string idxMacchina) { + ListRecords = null; + await InvokeAsync(StateHasChanged); setupMessages.Add($"Inizio Analisi Archivio | Archivio {idxMacchina}"); await InvokeAsync(StateHasChanged); - ListRecords = null; - await Task.Delay(1); await ArchiveSingleCheck(idxMacchina, 0); - await ClearMessage(); + await Task.Delay(400); + ClearMessage(); await ReloadData(); } @@ -131,16 +121,25 @@ namespace MP.Prog.Components await InvokeAsync(StateHasChanged); } + protected async void ResetSel() + { + SelRecord = null; + await ReloadData(); + } + + protected async Task SelEdit(string idxMacc) + { + // recupero macchina e mando a edit! + SelRecord = await FDService.ArchMaccGetByKey(idxMacc); + } + #endregion Protected Methods #region Private Fields private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); private List ListRecords; - private ArchMaccModel? SelRecord { get; set; } = null; - private int numChecks = 0; - private Stopwatch sw = new Stopwatch(); private int totalCount = 0; @@ -148,35 +147,35 @@ namespace MP.Prog.Components #region Private Properties + private ArchMaccModel? SelRecord { get; set; } = null; private List setupMessages { get; set; } = new List(); #endregion Private Properties #region Private Methods - private async Task verificaSingola(string idxMacchina, int numDays, int numMacchine) + private async Task VerificaSingola(string idxMacchina, int numDays, int numMacchine) { sw.Restart(); // recupero elenco macchine percLoading += 100 / numMacchine; - numChecks = await FDService.updateMachineArchive(idxMacchina, numDays, true, false); + numChecks = await FDService.UpdateMachineArchive(idxMacchina, numDays, true, false); await Task.Delay(1); setupMessages.Add($"{idxMacchina}: {numChecks} files"); await InvokeAsync(StateHasChanged); await Task.Delay(1); sw.Stop(); - var elapsTime = sw.Elapsed; - Log.Trace($"verificaSingola | idxMacchina: {idxMacchina} | {elapsTime.TotalMilliseconds}ms"); + Log.Info($"VerificaSingola | idxMacchina: {idxMacchina} | {sw.ElapsedMilliseconds:N0}ms"); } - private async Task verificaTutte(int numDays) + private async Task VerificaTutte(int numDays) { // recupero elenco macchine var listaMacchine = await FDService.ArchMaccGetAll(); int numMacchine = listaMacchine.Count(); foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList()) { - await verificaSingola(item.IdxMacchina, numDays, numMacchine); + await VerificaSingola(item.IdxMacchina, numDays, numMacchine); } } diff --git a/MP.Prog/Components/DiffView.razor b/MP.Prog/Components/DiffView.razor index 3120bfdd..600ec22d 100644 --- a/MP.Prog/Components/DiffView.razor +++ b/MP.Prog/Components/DiffView.razor @@ -75,7 +75,7 @@ { get { - return _oldText.Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); + return _oldText.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); } } @@ -83,7 +83,7 @@ { get { - return _newText.Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); + return _newText.Replace(" ", " ").Replace(Environment.NewLine, sepDest).Replace("\n", sepDest).Replace("\r", sepDest); } } [Parameter] diff --git a/MP.Prog/Components/FileEditor.razor.cs b/MP.Prog/Components/FileEditor.razor.cs index bb5420a8..5abe2ba4 100644 --- a/MP.Prog/Components/FileEditor.razor.cs +++ b/MP.Prog/Components/FileEditor.razor.cs @@ -116,7 +116,7 @@ namespace MP.Prog.Components await DataReset.InvokeAsync(0); await DataService.FileExport(_currItem); await DataReset.InvokeAsync(0); - await DataService.updateMachineArchive(_currItem.IdxMacchina, 1, false, false); + await DataService.UpdateMachineArchive(_currItem.IdxMacchina, 1, false, false); await DataUpdated.InvokeAsync(1); } else diff --git a/MP.Prog/Conf/Rule05.json b/MP.Prog/Conf/Rule05.json index 11c042fe..8607aced 100644 --- a/MP.Prog/Conf/Rule05.json +++ b/MP.Prog/Conf/Rule05.json @@ -2,7 +2,8 @@ "ExcludedTags": [ ], "ExcludedFileExt": [ ".bak", - ".bck" + ".bck", + ".file" ], "FileNameExtReplace": { }, diff --git a/MP.Prog/Data/FileArchDataService.cs b/MP.Prog/Data/FileArchDataService.cs index cfd6740c..48e00d90 100644 --- a/MP.Prog/Data/FileArchDataService.cs +++ b/MP.Prog/Data/FileArchDataService.cs @@ -69,9 +69,17 @@ namespace MP.Prog.Data public async Task ArchivioMaccUpsert(ArchMaccModel currRec) { bool fatto = await dbController.ArchMaccUpsert(currRec); + await ResetArchiveCache(); + return fatto; + } + /// + /// Reset della cache dati ArchivioMacchine in redis + /// + /// + private async Task ResetArchiveCache() + { await ExecFlushRedisPattern($"{redisBaseAddr}:ArchMacc:*"); await ExecFlushRedisPattern($"{redisBaseAddr}:ArchStatus:*"); - return fatto; } public async Task> ArchMaccGetAll() @@ -263,13 +271,13 @@ namespace MP.Prog.Data /// Numero giorni x ricerca all'indietro da data corrente / 0 = nessun limite /// /// - public async Task updateAllArchive(int numDayPre, bool forceTag) + public async Task UpdateAllArchive(int numDayPre, bool forceTag) { int checkDone = 0; var listaMacchine = await ArchMaccGetAll(); foreach (var item in listaMacchine.Where(x => !string.IsNullOrEmpty(x.BasePath)).ToList()) { - checkDone += await updateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false); + checkDone += await UpdateMachineArchive(item.IdxMacchina, numDayPre, forceTag, false); } return await Task.FromResult(checkDone); @@ -285,7 +293,7 @@ namespace MP.Prog.Data /// Forza la riverifica dei tags (x update da setup) /// Scrittura log verboso macchina /// - public async Task updateMachineArchive(string idxMacchina, int numDayPre, bool forceTag, bool fullLog) + public async Task UpdateMachineArchive(string idxMacchina, int numDayPre, bool forceTag, bool fullLog) { int checkDone = 0; Stopwatch stopWatch = new Stopwatch(); @@ -293,7 +301,7 @@ namespace MP.Prog.Data string ruleName = "Rule00.json"; try { - var macchina = ArchMaccGetByKey(idxMacchina).Result; + ArchMaccModel macchina = await ArchMaccGetByKey(idxMacchina); if (macchina != null && !string.IsNullOrEmpty(macchina.BasePath)) { if (!string.IsNullOrEmpty(macchina.RuleName)) @@ -351,13 +359,16 @@ namespace MP.Prog.Data } catch (Exception exc) { - Log.Error($"Eccezione in updateMachineArchive{Environment.NewLine}{exc}{Environment.NewLine}{exc.InnerException}"); + Log.Error($"Eccezione in UpdateMachineArchive{Environment.NewLine}{exc}{Environment.NewLine}{exc.InnerException}"); } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Log.Info($"Effettuato update archivio file MACCHINA | last {numDayPre} days | {checkDone} checked | {ts.TotalMilliseconds} ms"); - return await Task.FromResult(checkDone); + // svuoto cache! + await ResetArchiveCache(); + // restituisco conteggio + return checkDone; } #endregion Public Methods diff --git a/MP.Prog/MP.Prog.csproj b/MP.Prog/MP.Prog.csproj index 2c515213..de16f6e2 100644 --- a/MP.Prog/MP.Prog.csproj +++ b/MP.Prog/MP.Prog.csproj @@ -3,7 +3,7 @@ net6.0 MP.Prog - 6.16.2410.2116 + 6.16.2410.2120 diff --git a/MP.Prog/Pages/Archive.razor b/MP.Prog/Pages/Archive.razor index 0eb25b9e..e4b457ab 100644 --- a/MP.Prog/Pages/Archive.razor +++ b/MP.Prog/Pages/Archive.razor @@ -1,7 +1,5 @@ @page "/Archive" -@using MP.Prog.Components -
@@ -83,7 +81,7 @@
@if (DeleteDialogOpen) { - + }
diff --git a/MP.Prog/Pages/Archive.razor.cs b/MP.Prog/Pages/Archive.razor.cs index d5203f1b..22fae417 100644 --- a/MP.Prog/Pages/Archive.razor.cs +++ b/MP.Prog/Pages/Archive.razor.cs @@ -5,10 +5,9 @@ using MP.Prog.Data; using NLog; using System; using System.Collections.Generic; -using System.Linq; -using System.Threading; using System.Threading.Tasks; + namespace MP.Prog.Pages { public partial class Archive : ComponentBase, IDisposable @@ -371,7 +370,7 @@ namespace MP.Prog.Pages { SelTag = searchVal; currPage = 1; - await ReloadAllData(); + await ReloadData(); isLoading = false; } @@ -382,7 +381,7 @@ namespace MP.Prog.Pages // importante altrimenti NON mostra update UI await Task.Delay(1); //AppMService.File_Filter = SelectData.Init(5, 10); - var numCheck = await DataService.updateAllArchive(numDays, false); + var numCheck = await DataService.UpdateAllArchive(numDays, false); await ReloadAllData(); await Task.Delay(1); await RefreshDisplayLoading(); diff --git a/MP.Prog/Program.cs b/MP.Prog/Program.cs index e5b33f61..592ac919 100644 --- a/MP.Prog/Program.cs +++ b/MP.Prog/Program.cs @@ -23,10 +23,13 @@ namespace MP.Prog }) .ConfigureLogging(logging => { + // impostante per non perdere le regole di log logging.ClearProviders(); logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Error); }) - .UseNLog(); + // importante per eseguire la conf regike logging + .UseNLog(new NLogAspNetCoreOptions() { RemoveLoggerFactoryFilter = false }); + //.UseNLog(); public static void Main(string[] args) { diff --git a/MP.Prog/Resources/ChangeLog.html b/MP.Prog/Resources/ChangeLog.html index dc5c645b..414f0fd9 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.2116

+

Versione: 6.16.2410.2120


Note di rilascio:
    diff --git a/MP.Prog/Resources/VersNum.txt b/MP.Prog/Resources/VersNum.txt index 7c94c9f8..2fd4f529 100644 --- a/MP.Prog/Resources/VersNum.txt +++ b/MP.Prog/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2410.2116 +6.16.2410.2120 diff --git a/MP.Prog/Resources/manifest.xml b/MP.Prog/Resources/manifest.xml index b774c00c..94b2e066 100644 --- a/MP.Prog/Resources/manifest.xml +++ b/MP.Prog/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2410.2116 + 6.16.2410.2120 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 3f754328..397f561f 100644 --- a/MP.Prog/appsettings.json +++ b/MP.Prog/appsettings.json @@ -39,7 +39,7 @@ "rules": [ { "logger": "*", - "minLevel": "Info", + "minLevel": "Trace", "writeTo": "logconsole" }, {