@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
@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);
}
}