@inject ILogger Logger

Manutenzione Sistema

Strumenti per la manutenzione e l'ottimizzazione del sistema.

Database

Operazioni di manutenzione del database.

Stato Database
Dimensione: @databaseStats.SizeMB MB
Ultima ottimizzazione: @databaseStats.LastOptimization.ToString("dd/MM/yyyy HH:mm")
Pulizia Sistema

Strumenti per la pulizia dei dati temporanei.

File temporanei
Dimensione cache: @cleanupStats.CacheSizeMB MB
File di log: @cleanupStats.LogFileCount file
Monitoraggio Performance
Memoria Utilizzata
@performanceStats.MemoryUsageMB MB / @performanceStats.TotalMemoryMB MB
CPU
@performanceStats.CpuUsagePercent%
Connessioni Attive

@performanceStats.ActiveConnections

di @performanceStats.MaxConnections max
Uptime

@performanceStats.UptimeHours h

@performanceStats.StartTime.ToString("dd/MM HH:mm")
Manutenzione Programmata

Configurazione delle attività automatiche.

Storico Attività

Ultime operazioni di manutenzione.

@foreach (var activity in maintenanceHistory) {
@activity.Description
@activity.Timestamp.ToString("dd/MM HH:mm")
}
@if (!maintenanceHistory.Any()) {
Nessuna attività di manutenzione recente
}
@code { [Parameter] public EventCallback<(string message, string type)> OnShowToast { get; set; } private bool isOptimizing = false; private bool isAnalyzing = false; private bool isCompacting = false; private bool isClearingTemp = false; private bool isClearingLogs = false; private DatabaseStats databaseStats = new() { SizeMB = 12.5, LastOptimization = DateTime.Now.AddDays(-3) }; private CleanupStats cleanupStats = new() { CacheSizeMB = 45.2, LogFileCount = 127 }; private PerformanceStats performanceStats = new() { MemoryUsageMB = 234, TotalMemoryMB = 512, MemoryUsagePercent = 45, CpuUsagePercent = 12, ActiveConnections = 3, MaxConnections = 100, UptimeHours = 72, StartTime = DateTime.Now.AddHours(-72) }; private MaintenanceSettings maintenanceSettings = new() { AutoOptimizeEnabled = true, AutoCleanupEnabled = true, ScheduledTime = new TimeOnly(2, 0), Frequency = "Weekly" }; private List maintenanceHistory = new() { new MaintenanceActivity { Type = "Optimization", Description = "Database ottimizzato", Timestamp = DateTime.Now.AddHours(-6) }, new MaintenanceActivity { Type = "Cleanup", Description = "File temporanei rimossi", Timestamp = DateTime.Now.AddDays(-1) }, new MaintenanceActivity { Type = "Backup", Description = "Backup automatico completato", Timestamp = DateTime.Now.AddDays(-2) } }; protected override async Task OnInitializedAsync() { await RefreshStats(); } private async Task OptimizeDatabase() { try { isOptimizing = true; StateHasChanged(); await Task.Delay(3000); // Simula ottimizzazione databaseStats.LastOptimization = DateTime.Now; AddMaintenanceActivity("Optimization", "Database ottimizzato"); await OnShowToast.InvokeAsync(("Database ottimizzato con successo", "success")); } catch (Exception ex) { Logger.LogError(ex, "Errore ottimizzazione database"); await OnShowToast.InvokeAsync(("Errore durante l'ottimizzazione", "error")); } finally { isOptimizing = false; StateHasChanged(); } } private async Task AnalyzeDatabase() { try { isAnalyzing = true; StateHasChanged(); await Task.Delay(2000); await OnShowToast.InvokeAsync(("Analisi completata: nessun problema rilevato", "success")); } catch (Exception ex) { Logger.LogError(ex, "Errore analisi database"); await OnShowToast.InvokeAsync(("Errore durante l'analisi", "error")); } finally { isAnalyzing = false; StateHasChanged(); } } private async Task CompactDatabase() { try { isCompacting = true; StateHasChanged(); await Task.Delay(4000); databaseStats.SizeMB *= 0.8; // Simula riduzione dimensioni AddMaintenanceActivity("Compact", "Database compattato"); await OnShowToast.InvokeAsync(("Database compattato con successo", "success")); } catch (Exception ex) { Logger.LogError(ex, "Errore compattazione database"); await OnShowToast.InvokeAsync(("Errore durante la compattazione", "error")); } finally { isCompacting = false; StateHasChanged(); } } private async Task ClearTempFiles() { try { isClearingTemp = true; StateHasChanged(); await Task.Delay(1500); cleanupStats.CacheSizeMB = 0; AddMaintenanceActivity("Cleanup", "File temporanei rimossi"); await OnShowToast.InvokeAsync(("File temporanei rimossi", "success")); } catch (Exception ex) { Logger.LogError(ex, "Errore pulizia file temporanei"); await OnShowToast.InvokeAsync(("Errore durante la pulizia", "error")); } finally { isClearingTemp = false; StateHasChanged(); } } private async Task ClearOldLogs() { try { isClearingLogs = true; StateHasChanged(); await Task.Delay(1000); cleanupStats.LogFileCount = Math.Max(0, cleanupStats.LogFileCount - 50); AddMaintenanceActivity("LogCleanup", "Log vecchi rimossi"); await OnShowToast.InvokeAsync(("Log vecchi rimossi", "success")); } catch (Exception ex) { Logger.LogError(ex, "Errore pulizia log"); await OnShowToast.InvokeAsync(("Errore durante la pulizia log", "error")); } finally { isClearingLogs = false; StateHasChanged(); } } private async Task RefreshStats() { await Task.Delay(300); // Simula aggiornamento statistiche cleanupStats.CacheSizeMB = Random.Shared.Next(20, 80); cleanupStats.LogFileCount = Random.Shared.Next(50, 200); StateHasChanged(); } private async Task RefreshPerformanceStats() { await Task.Delay(500); // Simula aggiornamento performance performanceStats.MemoryUsagePercent = Random.Shared.Next(30, 70); performanceStats.CpuUsagePercent = Random.Shared.Next(5, 25); performanceStats.ActiveConnections = Random.Shared.Next(1, 10); StateHasChanged(); } private async Task GeneratePerformanceReport() { await OnShowToast.InvokeAsync(("Report performance generato", "info")); } private async Task SaveMaintenanceSettings() { try { await Task.Delay(300); await OnShowToast.InvokeAsync(("Configurazione manutenzione salvata", "success")); } catch (Exception ex) { Logger.LogError(ex, "Errore salvataggio configurazione"); await OnShowToast.InvokeAsync(("Errore salvataggio configurazione", "error")); } } private async Task ClearMaintenanceHistory() { maintenanceHistory.Clear(); await OnShowToast.InvokeAsync(("Storico attività pulito", "info")); StateHasChanged(); } private void AddMaintenanceActivity(string type, string description) { maintenanceHistory.Insert(0, new MaintenanceActivity { Type = type, Description = description, Timestamp = DateTime.Now }); // Mantieni solo le ultime 10 attività if (maintenanceHistory.Count > 10) { maintenanceHistory.RemoveAt(maintenanceHistory.Count - 1); } } private string GetActivityIcon(string type) => type switch { "Optimization" => "fas fa-cogs text-primary", "Cleanup" => "fas fa-broom text-warning", "Backup" => "fas fa-download text-success", "Compact" => "fas fa-compress-alt text-info", "LogCleanup" => "fas fa-file-alt text-secondary", _ => "fas fa-cog text-muted" }; private class DatabaseStats { public double SizeMB { get; set; } public DateTime LastOptimization { get; set; } } private class CleanupStats { public double CacheSizeMB { get; set; } public int LogFileCount { get; set; } } private class PerformanceStats { public int MemoryUsageMB { get; set; } public int TotalMemoryMB { get; set; } public int MemoryUsagePercent { get; set; } public int CpuUsagePercent { get; set; } public int ActiveConnections { get; set; } public int MaxConnections { get; set; } public int UptimeHours { get; set; } public DateTime StartTime { get; set; } } private class MaintenanceSettings { public bool AutoOptimizeEnabled { get; set; } public bool AutoCleanupEnabled { get; set; } public TimeOnly ScheduledTime { get; set; } public string Frequency { get; set; } = "Weekly"; } private class MaintenanceActivity { public string Type { get; set; } = ""; public string Description { get; set; } = ""; public DateTime Timestamp { get; set; } } }