using Manager.App.Extensions; using Manager.App.Services; using Microsoft.AspNetCore.Components; namespace Manager.App.Components.Pages; public partial class Services : ComponentBase { private string _searchText = ""; private List _backgroundServices = []; private readonly CancellationTokenSource _cts = new(); protected override void OnInitialized() { _backgroundServices = ServiceRegistry.GetServices(); } private Func QuickFilter => x => string.IsNullOrWhiteSpace(_searchText) || $"{x.Name} {x.Description} {x.State} {x.ExecuteInterval}".Contains(_searchText); private IAsyncEnumerable GetEventAsyncEnumerable() { var asyncEnumerators = _backgroundServices.Select(x => x.ProgressEvents.GetStreamAsync()); return AsyncEnumerableExtensions.Merge(asyncEnumerators, CancellationToken.None); } private List GetInitialEvents() { var totalToGet = 1000 / _backgroundServices.Count; var initial = _backgroundServices .SelectMany(x => x.ProgressEvents.Items.TakeLast(totalToGet)) .OrderBy(x => x.DateUtc); return initial.ToList(); } public void Dispose() { _cts.Cancel(); _cts.Dispose(); } }