diff --git a/http.go b/http.go index 85dc520..5bf5300 100644 --- a/http.go +++ b/http.go @@ -59,17 +59,18 @@ func okHandler(w http.ResponseWriter, r *http.Request) { return } if tmp == "/uptime" { - if clusterHealthy() { - log.Info("Handling URL:", tmp, "1 GOOD=true") - fmt.Fprintln(w, "GOOD=true") + b, s := clusterHealthy() + if b { + log.Info("Handling URL:", tmp, "cluster is ok", s) + fmt.Fprintln(w, s) } else { - log.Info("Handling URL:", tmp, "1 GOOD=false") - fmt.Fprintln(w, "GOOD=false") + log.Info("Handling URL:", tmp, "cluster is not right yet", s) + fmt.Fprintln(w, s) } for _, h := range me.hypers { url := "http://" + h.Hostname + ":2520/kill" dur := time.Since(h.lastpoll) // Calculate the elapsed time - if dur > 90 * time.Second { + if dur > 90*time.Second { log.Info("KILL DAEMON ON", h.Hostname, shell.FormatDuration(dur), "curl", url) // s := shell.Wget(url) // log.Info("curl got:", s) diff --git a/poll.go b/poll.go index 2979052..dc9d171 100644 --- a/poll.go +++ b/poll.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "strings" "time" @@ -68,8 +69,12 @@ func findDroplet(name string) *DropletT { return nil } -func clusterHealthy() bool { - var good = true +// check the state of the cluster and return a string +// that is intended to be sent to an uptime monitor like Kuma +func clusterHealthy() (bool, string) { + var good bool = true + var working int + var failed int for _, d := range me.droplets { if d.State != "ON" { continue @@ -88,13 +93,28 @@ func clusterHealthy() bool { log.Info("GOOD STATE MISSING", d.Hostname, d.hname, shell.FormatDuration(dur)) good = false d.CurrentState = "MISSING" + failed += 1 + continue } l := shell.FormatDuration(dur) if l == "" { log.Info("DUR IS EMPTY", dur) + continue } + working += 1 // log.Info("GOOD STATE ON", d.Hostname, d.hname, "dur =", l) } } - return good + var summary string = "(" + if working > 0 { + summary += fmt.Sprintf("working = %d", working) + } + if failed > 0 { + summary += fmt.Sprintf("failed = %d", failed) + } + summary += ")" + if good { + return good, "GOOD=true " + summary + } + return good, "GOOD=false " + summary }