@page "/logs" @using Microsoft.EntityFrameworkCore @inject IDbContextFactory DbFactory Logs Logs Alle OK Error Filtern Logs löschen Timestamp Land TSC Status Rows Dauer Fehler Dateiname @context.Timestamp.ToLocalTime().ToString("dd.MM.yyyy HH:mm:ss") @context.Land @context.TSC @context.Status @context.RowCount @($"{context.DurationSeconds:F1}s") @context.ErrorMessage @context.FileName @code { private List logs = []; private string filterLand = string.Empty; private string filterStatus = string.Empty; private DateTime? filterFromDate; private int deleteOlderThanDays = 30; protected override async Task OnInitializedAsync() => await LoadAsync(); private async Task LoadAsync() { await using var db = await DbFactory.CreateDbContextAsync(); var query = db.ExportLogs.AsQueryable(); if (!string.IsNullOrWhiteSpace(filterLand)) { query = query.Where(x => x.Land.Contains(filterLand)); } if (!string.IsNullOrWhiteSpace(filterStatus)) { query = query.Where(x => x.Status == filterStatus); } if (filterFromDate.HasValue) { var fromUtc = filterFromDate.Value.Date.ToUniversalTime(); query = query.Where(x => x.Timestamp >= fromUtc); } logs = await query.OrderByDescending(x => x.Timestamp).ToListAsync(); } private string GetRowClass(ExportLog log, int _) => log.Status == "Error" ? "mud-theme-error" : string.Empty; private async Task DeleteOlderAsync() { var threshold = DateTime.UtcNow.AddDays(-deleteOlderThanDays); await using var db = await DbFactory.CreateDbContextAsync(); var oldLogs = await db.ExportLogs.Where(x => x.Timestamp < threshold).ToListAsync(); db.ExportLogs.RemoveRange(oldLogs); await db.SaveChangesAsync(); await LoadAsync(); } }