From c0d483df58b2ed04fb5b3a42297dfdbfec4c76c7 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Tue, 20 Jan 2026 05:50:14 -0800 Subject: feat: Add status indicator to browser tab title --- internal/server/server.go | 23 ++++++++++++++++++++--- internal/server/templates/index.html | 2 +- 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'internal/server') diff --git a/internal/server/server.go b/internal/server/server.go index 28b3662..50ff1ea 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -120,6 +120,7 @@ type PageData struct { Groups []GroupData Incidents []IncidentData OverallStatus string + StatusCounts StatusCounts // Counts for tab title LastUpdated time.Time CurrentTime string // Formatted date/time for display (without timezone) TimezoneTooltip string // JSON data for timezone tooltip @@ -132,6 +133,14 @@ type PageData struct { Scale float64 // UI scale factor (0.5-2.0) } +// StatusCounts holds monitor status counts for display +type StatusCounts struct { + Up int + Down int + Degraded int + Total int +} + // GroupData contains data for a monitor group type GroupData struct { Name string @@ -221,6 +230,7 @@ func (s *Server) handleIndex(w http.ResponseWriter, r *http.Request) { overallUp := true hasDegraded := false var mostRecentCheck time.Time + var statusCounts StatusCounts // Build groups for _, group := range s.config.Groups { @@ -275,11 +285,17 @@ func (s *Server) handleIndex(w http.ResponseWriter, r *http.Request) { md.Ticks = ticks } - // Update overall status - if stat.CurrentStatus == "down" { + // Update overall status and counts + statusCounts.Total++ + switch stat.CurrentStatus { + case "down": overallUp = false - } else if stat.CurrentStatus == "degraded" { + statusCounts.Down++ + case "degraded": hasDegraded = true + statusCounts.Degraded++ + case "up": + statusCounts.Up++ } } else { md.Status = "unknown" @@ -324,6 +340,7 @@ func (s *Server) handleIndex(w http.ResponseWriter, r *http.Request) { } else { data.OverallStatus = "All Systems Operational" } + data.StatusCounts = statusCounts // Build incidents for _, inc := range s.config.Incidents { diff --git a/internal/server/templates/index.html b/internal/server/templates/index.html index d70b496..3c35f42 100644 --- a/internal/server/templates/index.html +++ b/internal/server/templates/index.html @@ -12,7 +12,7 @@ {{end}} - {{.Site.Name}} + {{if eq .OverallStatus "All Systems Operational"}}[OK]{{else if eq .OverallStatus "Partial Outage"}}[!{{.StatusCounts.Degraded}}]{{else}}[X{{.StatusCounts.Down}}]{{end}} {{.Site.Name}} {{if .Site.Favicon}} -- cgit v1.2.3