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

Server Logs

@if (User?.IsAdministrator == true) {
Type:
Filter:
From:
To:
} else {
Only organization administrators can view this page.
} @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(-7); 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 RefreshLogs(); await base.OnInitializedAsync(); } private async Task ClearAllLogs() { var result = await JsInterop.Confirm("Are you sure you want to delete all logs?"); 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); } }