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("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(); } 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(); 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 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 setupMessages { get; set; } = new List(); #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 } }