fix(tui): compute uptime from windowed statuses, not running counters

This commit is contained in:
2026-05-16 14:58:34 -04:00
parent f65ff40a2d
commit 52c85b11b8
+11 -5
View File
@@ -152,11 +152,17 @@ func fmtLatency(d time.Duration) string {
return dangerStyle.Render(s) return dangerStyle.Render(s)
} }
func fmtUptime(total, up int) string { func fmtUptime(statuses []bool) string {
if total == 0 { if len(statuses) == 0 {
return subtleStyle.Render("—") return subtleStyle.Render("—")
} }
pct := float64(up) / float64(total) * 100 up := 0
for _, s := range statuses {
if s {
up++
}
}
pct := float64(up) / float64(len(statuses)) * 100
s := fmt.Sprintf("%.1f%%", pct) s := fmt.Sprintf("%.1f%%", pct)
if pct >= 99 { if pct >= 99 {
return specialStyle.Render(s) return specialStyle.Render(s)
@@ -309,7 +315,7 @@ func (m Model) viewSitesTab() string {
typeIcon(site.Type, false) + " " + site.Type, typeIcon(site.Type, false) + " " + site.Type,
fmtStatus(site.Status, site.Paused), fmtStatus(site.Status, site.Paused),
fmtLatency(site.Latency), fmtLatency(site.Latency),
fmtUptime(hist.TotalChecks, hist.UpChecks), fmtUptime(hist.Statuses),
spark, spark,
fmtSSL(site), fmtSSL(site),
fmtRetries(site), fmtRetries(site),
@@ -631,7 +637,7 @@ func (m Model) viewDetailPanel() string {
row("Interval", fmt.Sprintf("%ds", site.Interval)) row("Interval", fmt.Sprintf("%ds", site.Interval))
row("Timeout", fmt.Sprintf("%ds", site.Timeout)) row("Timeout", fmt.Sprintf("%ds", site.Timeout))
row("Latency", fmtLatency(site.Latency)) row("Latency", fmtLatency(site.Latency))
row("Uptime", fmtUptime(hist.TotalChecks, hist.UpChecks)) row("Uptime", fmtUptime(hist.Statuses))
if site.Type == "http" { if site.Type == "http" {
row("Method", site.Method) row("Method", site.Method)