Files
uptop/internal/tui/uptime_timeline.go
T
lerko 50f77da131
CI / test (pull_request) Successful in 1m43s
CI / lint (pull_request) Successful in 1m17s
CI / vulncheck (pull_request) Successful in 51s
refactor: extract magic numbers to named constants
Replace inline numeric literals with named constants across 14 files:
server timeouts/rate limits, cluster thresholds/intervals, DB pool
sizes, alert/dial timeouts, TUI uptime thresholds, node status
thresholds, and state history limits.
2026-06-27 15:44:03 -04:00

51 lines
1.0 KiB
Go

package tui
import (
"fmt"
"strings"
"gitea.lerkolabs.com/lerkolabs/uptop/internal/monitor"
)
func (m Model) uptimeTimeline(days []monitor.DayReport, width int) string {
if len(days) == 0 {
return m.st.subtleStyle.Render("No uptime data")
}
maxDays := width - 10
if maxDays < 10 {
maxDays = 10
}
display := days
if len(display) > maxDays {
display = display[len(display)-maxDays:]
}
var sb strings.Builder
for _, d := range display {
ch := "█"
switch {
case d.UptimePct >= uptimeGoodPct:
sb.WriteString(m.st.specialStyle.Render(ch))
case d.UptimePct >= uptimeWarnPct:
sb.WriteString(m.st.warnStyle.Render(ch))
case d.UptimePct > 0:
sb.WriteString(m.st.dangerStyle.Render(ch))
default:
sb.WriteString(m.st.subtleStyle.Render("░"))
}
}
pct := days[len(days)-1].UptimePct
pctStyle := m.st.specialStyle
if pct < uptimeGoodPct {
pctStyle = m.st.dangerStyle
} else if pct < uptimeExcellentPct {
pctStyle = m.st.warnStyle
}
sb.WriteString(" " + pctStyle.Render(fmt.Sprintf("%.2f%%", pct)))
return sb.String()
}