Files
mapo-core/MP.Prog/Components/ArchiveStatus.razor.cs
Samuele E. Locatelli 57c41c7a60 MP-PROG
- fix naming DbModels
2025-03-08 10:48:56 +01:00

187 lines
5.6 KiB
C#

using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Configuration;
using MP.FileData.DbModels;
using MP.FileData.DTO;
using MP.Prog.Data;
using NLog;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace MP.Prog.Components
{
public partial class ArchiveStatus : IDisposable
{
#region Public Methods
public void Dispose()
{
ListRecords = null;
GC.Collect();
}
#endregion Public Methods
#region Protected Properties
[Inject]
protected IConfiguration Configuration { get; set; }
[Inject]
protected FileArchDataService FDService { get; set; }
[Inject]
protected MessageService MServ { get; set; }
protected int percLoading { get; set; } = 0;
protected bool showProgress { get; set; } = false;
#endregion Protected Properties
#region Protected Methods
protected void AddNew()
{
DateTime adesso = DateTime.Now;
SelRecord = new ArchMaccModel()
{
IdxMacchina = $"ID_{adesso:yyMMd_HHmmss}",
RuleName = "Rule05.json",
Nome = "Nuova Folder",
Descrizione = "Backup folder",
BasePath = Configuration.GetValue<string>("ServerConf:FolderBasePath"),
ImgUrl = "Steamware.png",
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<string>();
}
protected async Task ForceCheck(int maxHour)
{
ListRecords = null;
await InvokeAsync(StateHasChanged);
setupMessages.Add("Inizio Analisi Archivio...");
await InvokeAsync(StateHasChanged);
await ArchiveCheck(maxHour);
await Task.Delay(200);
ClearMessage();
await ReloadData();
}
protected async Task ForceCheckMacchina(string idxMacchina)
{
ListRecords = null;
await InvokeAsync(StateHasChanged);
setupMessages.Add($"Inizio Analisi Archivio | Archivio {idxMacchina}");
await InvokeAsync(StateHasChanged);
await ArchiveSingleCheck(idxMacchina, 0);
await Task.Delay(200);
ClearMessage();
await ReloadData();
}
protected override async Task OnInitializedAsync()
{
ListRecords = null;
await ReloadData();
}
protected async Task ReloadData()
{
ListRecords = null;
await Task.Delay(1);
numChecks = 0;
ListRecords = await FDService.GetArchiveStatus();
totalCount = ListRecords.Count;
await Task.Delay(1);
setupMessages = new List<string>();
showProgress = false;
percLoading = 0;
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<ArchiveStatusDTO> ListRecords;
private int numChecks = 0;
private Stopwatch sw = new Stopwatch();
private int totalCount = 0;
#endregion Private Fields
#region Private Properties
private ArchMaccModel? SelRecord { get; set; } = null;
private List<string> setupMessages { get; set; } = new List<string>();
#endregion Private Properties
#region Private Methods
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, "", false);
await Task.Delay(1);
setupMessages.Add($"{idxMacchina}: {numChecks} files");
await InvokeAsync(StateHasChanged);
await Task.Delay(1);
sw.Stop();
Log.Info($"VerificaSingola | idxMacchina: {idxMacchina} | {sw.ElapsedMilliseconds:N0}ms");
}
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);
}
}
#endregion Private Methods
}
}