@page "/monitoring/event-logs" @attribute [Authorize] @using ScadaLink.Commons.Entities.Sites @using ScadaLink.Commons.Interfaces.Repositories @using ScadaLink.Commons.Messages.RemoteQuery @using ScadaLink.Communication @inject ISiteRepository SiteRepository @inject CommunicationService CommunicationService

Site Event Logs

@if (_errorMessage != null) {
@_errorMessage
} @if (_entries != null) { @if (_entries.Count == 0) { } @foreach (var entry in _entries) { }
Timestamp Type Severity Instance Source Message
No events found.
@entry.EventType @entry.Severity @(entry.InstanceId ?? "—") @entry.Source @entry.Message
@_entries.Count entries loaded @if (_hasMore) { }
}
@code { private List _sites = new(); private string _selectedSiteId = string.Empty; private string? _filterEventType; private string _filterSeverity = string.Empty; private DateTime? _filterFrom; private DateTime? _filterTo; private string? _filterKeyword; private string? _filterInstanceName; private List? _entries; private bool _hasMore; private long? _continuationToken; private bool _searching; private string? _errorMessage; private ToastNotification _toast = default!; protected override async Task OnInitializedAsync() { _sites = (await SiteRepository.GetAllSitesAsync()).ToList(); } private async Task Search() { _entries = new(); _continuationToken = null; await FetchPage(); } private async Task LoadMore() => await FetchPage(); private async Task FetchPage() { _searching = true; _errorMessage = null; try { var request = new EventLogQueryRequest( CorrelationId: Guid.NewGuid().ToString("N"), SiteId: _selectedSiteId, From: _filterFrom.HasValue ? new DateTimeOffset(_filterFrom.Value, TimeSpan.Zero) : null, To: _filterTo.HasValue ? new DateTimeOffset(_filterTo.Value, TimeSpan.Zero) : null, EventType: string.IsNullOrWhiteSpace(_filterEventType) ? null : _filterEventType.Trim(), Severity: string.IsNullOrWhiteSpace(_filterSeverity) ? null : _filterSeverity, InstanceId: string.IsNullOrWhiteSpace(_filterInstanceName) ? null : _filterInstanceName.Trim(), KeywordFilter: string.IsNullOrWhiteSpace(_filterKeyword) ? null : _filterKeyword.Trim(), ContinuationToken: _continuationToken, PageSize: 50, Timestamp: DateTimeOffset.UtcNow); var response = await CommunicationService.QueryEventLogsAsync(_selectedSiteId, request); if (response.Success) { _entries ??= new(); _entries.AddRange(response.Entries); _hasMore = response.HasMore; _continuationToken = response.ContinuationToken; } else { _errorMessage = response.ErrorMessage ?? "Query failed."; } } catch (Exception ex) { _errorMessage = $"Query failed: {ex.Message}"; } _searching = false; } private static string GetSeverityBadge(string severity) => severity switch { "Error" => "bg-danger", "Warning" => "bg-warning text-dark", "Info" => "bg-info text-dark", _ => "bg-secondary" }; }