LANCommander/LANCommander.Server/UI/Pages/Settings/Logs/Components/LogViewer.razor
2024-08-29 00:19:56 -05:00

86 lines
2.3 KiB
Text

@using LANCommander.Server.Logging
@using Microsoft.AspNetCore.SignalR.Client
@using Serilog.Events
@using XtermBlazor
@inject NavigationManager NavigationManager
<Xterm @ref="Terminal" Options="TerminalOptions" Addons="@Addons" />
@code {
Xterm? Terminal;
HubConnection? HubConnection;
TerminalOptions TerminalOptions = new TerminalOptions
{
CursorBlink = true,
CursorStyle = CursorStyle.Bar
};
HashSet<string> Addons = new HashSet<string>()
{
"addon-fit"
};
protected override async Task OnInitializedAsync()
{
await Connect();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await Task.Delay(100);
await Terminal.Addon("addon-fit").InvokeVoidAsync("fit");
}
}
async Task Connect()
{
HubConnection = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("/logging"))
.Build();
HubConnection.On<string, LogEventLevel, DateTime>("Log", (message, level, timestamp) =>
{
var parts = new string[]
{
TerminalColor.BrightBlack,
"[",
TerminalColor.White,
timestamp.ToString("HH:mm:ss"),
TerminalColor.BrightBlack,
"]",
GetColorCode(level),
" ",
message,
TerminalColor.Default
};
Terminal?.WriteLine(String.Join("", parts));
});
await HubConnection.StartAsync();
}
string GetColorCode(LogEventLevel level)
{
return level switch
{
LogEventLevel.Verbose => TerminalColor.BrightBlack,
LogEventLevel.Debug => TerminalColor.BrightCyan,
LogEventLevel.Information => TerminalColor.BrightGreen,
LogEventLevel.Warning => TerminalColor.BrightYellow,
LogEventLevel.Error => TerminalColor.BrightRed,
LogEventLevel.Fatal => TerminalColor.BrightMagenta,
_ => TerminalColor.Default,
};
}
public async ValueTask DisposeAsync()
{
if (HubConnection is not null)
await HubConnection.DisposeAsync();
}
}