LANCommander/LANCommander.Server/UI/Pages/Settings/Logs/Index.razor
2026-05-28 20:44:35 -05:00

118 lines
No EOL
3.5 KiB
Text

@page "/Settings/Logs"
@using LANCommander.Server.Settings
@using LANCommander.Server.Settings.Enums
@using LANCommander.Server.Settings.Models
@using LANCommander.Server.UI.Pages.Settings.Logs.Components
@using Microsoft.Extensions.Options
@inject IOptions<Settings> Settings
@inject SettingsProvider<Settings> SettingsProvider
@inject IMessageService MessageService
@inject NavigationManager NavigationManager
@inject ILogger<Index> Logger
<PageHeader Title="Logs">
<PageHeaderExtra>
@if (FileProvider != null)
{
<Button OnClick="DownloadLog" Icon="@IconType.Outline.Download">Download Log</Button>
}
<Button OnClick="Save" Type="@ButtonType.Primary">Save</Button>
</PageHeaderExtra>
</PageHeader>
<PageContent>
<Flex Direction="FlexDirection.Vertical" Gap="FlexGap.Large">
<Collapse>
@foreach (var provider in Providers)
{
<Panel Header="@provider.Name">
<ExtraTemplate>
<Flex Gap="FlexGap.Small">
<Switch @bind-Checked="provider.Enabled" />
<Button Type="ButtonType.Text" Icon="@IconType.Outline.Close" Size="ButtonSize.Small" Danger OnClick="() => RemoveProvider(provider)"/>
</Flex>
</ExtraTemplate>
<ChildContent>
<ProviderEditorPanel Provider="provider" />
</ChildContent>
</Panel>
}
</Collapse>
<Flex Justify="FlexJustify.End">
<Button OnClick="AddProvider">Add Provider</Button>
</Flex>
</Flex>
</PageContent>
@if (Providers.Any(p => p.Type == LoggingProviderType.SignalR && p.Enabled))
{
<PageHeader Title="Log Viewer" />
<PageContent Style="padding-bottom: 24px;">
<div style="padding: 8px; background: #000">
<LANCommander.Server.UI.Pages.Settings.Logs.Components.LogViewer/>
</div>
</PageContent>
}
@code {
List<LoggingProvider> Providers = new();
LoggingProvider? FileProvider => Providers.FirstOrDefault(p => p.Type == LoggingProviderType.File && p.Enabled);
protected override void OnInitialized()
{
Providers = Settings.Value.Server.Logs.Providers.ToList();
}
void Save()
{
try
{
Settings.Value.Server.Logs.Providers = Providers;
SettingsProvider.Update(s =>
{
s.Server.Logs = Settings.Value.Server.Logs;
});
MessageService.Success("Settings saved!");
}
catch (Exception ex)
{
MessageService.Error("An unknown error occurred.");
Logger.LogError(ex, "An unknown error occurred.");
}
}
void AddProvider()
{
Providers.Add(new LoggingProvider()
{
Type = LoggingProviderType.Console,
Enabled = true,
Name = "Console"
});
}
void RemoveProvider(LoggingProvider provider)
{
Providers.Remove(provider);
}
void DownloadLog()
{
if (FileProvider == null)
return;
var logFileName = $"log-{DateTime.Now:yyyy-MM-dd}.txt";
var logFilePath = Path.Combine(FileProvider.ConnectionString, logFileName);
if (!File.Exists(logFilePath))
{
MessageService.Warning("No log file exists for today.");
return;
}
NavigationManager.NavigateTo($"/api/Logs/Download/{logFileName}", true);
}
}