@page "/server-logs" @using System.Collections.ObjectModel; @attribute [Authorize(Policy = PolicyNames.ServerAdminRequired)] @inherits AuthComponentBase @inject IDataService DataService @inject IToastService ToastService @inject IJsInterop JsInterop @inject ILogsManager LogsManager @inject ILoaderService LoaderService

Server Logs

Type:
Filter:
From:
To:
@code { private readonly string _messageDebounceKey = Guid.NewGuid().ToString(); private readonly List _filteredLogs = new(); private LogLevel? _logLevel; private string _messageFilter = string.Empty; private DateTimeOffset _fromDate = DateTimeOffset.Now.AddDays(-1); private DateTimeOffset _toDate = DateTimeOffset.Now; private DateTimeOffset FromDate { get => _fromDate; set { if (value > _toDate) { ToastService.ShowToast("Invalid date range.", classString: "bg-warning"); return; } _fromDate = value; _ = RefreshLogs(); } } private LogLevel? LogLevel { get => _logLevel; set { _logLevel = value; _ = RefreshLogs(); } } private string MessageFilter { get => _messageFilter; set { _messageFilter = value; Debouncer.Debounce( TimeSpan.FromSeconds(1), () => _ = RefreshLogs(), _messageDebounceKey); } } private DateTimeOffset ToDate { get => _toDate; set { if (value < _fromDate) { ToastService.ShowToast("Invalid date range.", classString: "bg-warning"); return; } _toDate = value; _ = RefreshLogs(); } } protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); } protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if (firstRender) { await RefreshLogs(); } } private async Task ClearAllLogs() { var result = await JsInterop.Confirm("Are you sure you want to delete all previous logs? Today's logs are retained."); if (result) { using (var _ = LoaderService.ShowLoader("Deleting logs")) { await LogsManager.DeleteLogs(); } await RefreshLogs(); ToastService.ShowToast("Logs deleted."); } } private async Task RefreshLogs() { using var _ = await LoaderService.ShowLoader("Refreshing logs"); _filteredLogs.Clear(); var logsAsync = LogsManager.GetLogs( _fromDate, _toDate, _messageFilter, _logLevel); await foreach (var line in logsAsync) { _filteredLogs.Add(line); } await InvokeAsync(StateHasChanged); } }