@page @model IndexModel @{ ViewData["Title"] = "Dashboard"; ViewData["Page"] = "dashboard"; }
0 ? "up" : "neutral")">
Overall
@if (Model.Stats.DownCount > 0) { DEGRADED } else if (Model.Stats.WarnCount > 0) { WARNING } else if (Model.Stats.UpCount > 0) { OPERATIONAL } else { UNKNOWN }
@Model.Stats.TotalMonitors monitor(s) active
Online
@Model.Stats.UpCount
monitors up
Offline
@Model.Stats.DownCount
monitors down
Warnings
@Model.Stats.WarnCount
monitors degraded
@if (Model.ShowUptime) {
Uptime
@Model.Stats.OverallUptime.ToString("F1")%
overall availability
}
0 ? "warn" : "neutral")">
Certificates
@Model.Stats.CertCount
@if (Model.Stats.CertExpired > 0) { @Model.Stats.CertExpired expired } else if (Model.Stats.CertExpiringSoon > 0) { @Model.Stats.CertExpiringSoon expiring soon } else { all valid }
@if (Model.IsAdmin) {
Log Errors
@Model.Stats.ErrorLogs
@Model.Stats.TotalLogs total entries
}
@if (Model.Monitors.Any()) { var groups = Model.Monitors.GroupBy(m => m.GroupName ?? "General"); foreach (var group in groups) {
@group.Key @group.Count() services
@foreach (var m in group) { var badgeClass = m.LastStatus switch { MonitorStatus.Up => "badge-up", MonitorStatus.Down => "badge-down", MonitorStatus.Warning or MonitorStatus.Degraded => "badge-warn", _ => "badge-unknown" }; var checks = Model.RecentChecks.ContainsKey(m.Id) ? Model.RecentChecks[m.Id] : new();
@m.Name @if (!m.IsPublic && Model.IsAdmin) { PRIVATE }
@(m.Url ?? (m.Host + (m.Port.HasValue ? ":" + m.Port : "")))
@m.Type.ToString().ToUpper()
@if (Model.ShowUptime && checks.Any()) {
@foreach (var c in checks) { var cls = c.Status switch { MonitorStatus.Up => "up", MonitorStatus.Down => "down", MonitorStatus.Warning or MonitorStatus.Degraded => "warn", _ => "unknown" };
}
}
@if (m.LastResponseMs.HasValue) { @((int)m.LastResponseMs.Value)ms }
@m.LastStatus
}
} } else {
No monitors have been configured
@if (Model.IsAdmin) { }
} @if (Model.Certificates.Any()) {
SSL Certificates
@foreach (var c in Model.Certificates) { var now = DateTime.UtcNow; var daysLeft = c.ExpiresAt.HasValue ? (int)(c.ExpiresAt.Value - now).TotalDays : (int?)null; var expiryClass = daysLeft == null ? "" : daysLeft <= 0 ? "cert-expiry-expired" : daysLeft <= 7 ? "cert-expiry-critical" : daysLeft <= 30 ? "cert-expiry-warn" : "cert-expiry-ok"; }
Domain Name Expires Days Left Status
@c.Domain:@c.Port @c.Name @(c.ExpiresAt?.ToString("yyyy-MM-dd") ?? "unknown") @(daysLeft.HasValue ? daysLeft + "d" : "—") @if (daysLeft == null) { Unknown } else if (daysLeft <= 0) { EXPIRED } else if (daysLeft <= 7) { CRITICAL } else if (daysLeft <= 30) { EXPIRING } else { VALID }
}