@using Microsoft.AspNetCore.Components.WebAssembly.Authentication @using RobotNet.MapShares.Models @inject IConfiguration Configuration @inject IJSRuntime JSRuntime @inject IHttpClientFactory HttpClientFactory
@foreach (var log in SearchLogs) {
@log.Time @log.Level @log.Message @if (log.HasException) {
                            @log.Exception
                                
}
}
Loadding...
@code { private DateTime DateLog = DateTime.Today; private bool IsLoading; private readonly List ShowLogs = new(); private readonly List SearchLogs = new(); private string? FilterLog { get; set; } private ElementReference LogContainerRef { get; set; } protected override async Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if (!firstRender) return; await LoadLogs(true); } private async Task LoadLogs(bool firstRender) { try { if(!firstRender) { IsLoading = true; ShowLogs.Clear(); StateHasChanged(); } var Http = HttpClientFactory.CreateClient("RobotManagerAPI"); var logs = await Http.GetFromJsonAsync>($"api/RobotManagerLogger/open-acs?date={DateLog}"); ShowLogs.AddRange(logs ?? []); IsLoading = false; StateHasChanged(); await ReloadLogs(); } catch (AccessTokenNotAvailableException ex) { ex.Redirect(); return; } } private async Task ReloadLogs() { IsLoading = true; SearchLogs.Clear(); StateHasChanged(); foreach (var line in ShowLogs.Where(log => string.IsNullOrEmpty(FilterLog) || log.Contains(FilterLog)).TakeLast(2000)) { try { var log = System.Text.Json.JsonSerializer.Deserialize(line); if (log is not null) SearchLogs.Add(log); } catch (System.Text.Json.JsonException) { continue; } } IsLoading = false; StateHasChanged(); await JSRuntime.InvokeVoidAsync("ScrollToBottom", LogContainerRef); } private async Task OnSearch(string text) { FilterLog = text; await ReloadLogs(); } private async Task OnDateChanged(DateTime? date) { if (date is not null && date.HasValue) { DateLog = date.Value; await LoadLogs(false); } } }