@page "/collection" @attribute [Authorize] @using QuantEngine.Web.Client.Services @inject ApiClient ApiClient @inject ILogger Logger QuantEngine - Collection

Data Collection

KIS API data collection dashboard. Monitor runs, snapshots, and error trends.

@if (IsProcessing) { Running... } else { Start Collection } Refresh @if (IsLoading) { } else if (DashboardState != null) {

Last Run

@(DashboardState.LastRunStatus ?? "N/A")

@(DashboardState.LastFinishedAt ?? "Not finished")

Total Snapshots

@DashboardState.TotalSnapshots

Total Errors

@DashboardState.TotalErrors

@if (DashboardState.RecentErrors.Count > 0) {

Recent Errors

@foreach (var error in DashboardState.RecentErrors) { }
Source Kind Ticker Message
@error.SourceName @error.ErrorKind @error.Ticker @error.ErrorMessage
} @if (RecentRuns != null && RecentRuns.Count > 0) {

Recent Runs

@foreach (var run in RecentRuns) { }
Run ID Status Started Finished Snapshots Errors
@run.RunId @run.Status @run.StartedAt @run.FinishedAt @run.TotalSnapshots @run.TotalErrors
} } @code { private CollectionDashboardStateDto? DashboardState; private List? RecentRuns; private bool IsLoading = true; private bool IsProcessing = false; protected override async Task OnInitializedAsync() { await LoadDashboardStateAsync(); } private async Task LoadDashboardStateAsync() { IsLoading = true; try { DashboardState = await ApiClient.GetCollectionStateAsync(); var runsResponse = await ApiClient.GetCollectionRunsAsync(10); RecentRuns = runsResponse?.Runs ?? new(); } catch (Exception ex) { Logger.LogError(ex, "Error loading dashboard"); } finally { IsLoading = false; } } private async Task StartCollectionAsync() { IsProcessing = true; try { var result = await ApiClient.StartCollectionRunAsync(); if (result != null) { await LoadDashboardStateAsync(); } } catch (Exception ex) { Logger.LogError(ex, "Error starting collection"); } finally { IsProcessing = false; } } private async Task RefreshAsync() { await LoadDashboardStateAsync(); } }