diff options
| -rw-r--r-- | ideas.md | 1 | ||||
| -rw-r--r-- | internal/server/server.go | 23 | ||||
| -rw-r--r-- | internal/server/templates/index.html | 2 |
3 files changed, 21 insertions, 5 deletions
@@ -19,7 +19,6 @@ ### Interactive Features - Keyboard shortcuts for navigation -- Search/filter monitors - Bulk actions on monitors - Quick status overview in browser tab title 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}} <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>{{.Site.Name}}</title> + <title>{{if eq .OverallStatus "All Systems Operational"}}[OK]{{else if eq .OverallStatus "Partial Outage"}}[!{{.StatusCounts.Degraded}}]{{else}}[X{{.StatusCounts.Down}}]{{end}} {{.Site.Name}}</title> <meta name="description" content="{{.Site.Description}}"> {{if .Site.Favicon}} <link rel="icon" href="{{.Site.Favicon}}"> |