mirror of
https://github.com/TecharoHQ/anubis.git
synced 2026-04-12 19:48:44 +00:00
73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package entrypoint
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"log/slog"
|
|
"net/http"
|
|
"sort"
|
|
|
|
"github.com/TecharoHQ/anubis/internal"
|
|
healthv1 "google.golang.org/grpc/health/grpc_health_v1"
|
|
)
|
|
|
|
func healthz(w http.ResponseWriter, r *http.Request) {
|
|
services, err := internal.HealthSrv.List(r.Context(), nil)
|
|
if err != nil {
|
|
slog.Error("can't get list of services", "err", err)
|
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
var keys []string
|
|
for k := range services.Statuses {
|
|
if k == "" {
|
|
continue
|
|
}
|
|
keys = append(keys, k)
|
|
}
|
|
|
|
sort.Strings(keys)
|
|
|
|
var msg bytes.Buffer
|
|
|
|
var healthy bool = true
|
|
|
|
for _, k := range keys {
|
|
st := services.Statuses[k].GetStatus()
|
|
fmt.Fprintf(&msg, "%s: %s\n", k, st)
|
|
switch st {
|
|
case healthv1.HealthCheckResponse_SERVING:
|
|
// do nothing
|
|
default:
|
|
healthy = false
|
|
}
|
|
}
|
|
|
|
if !healthy {
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
}
|
|
|
|
w.Write(msg.Bytes())
|
|
}
|
|
|
|
func readyz(w http.ResponseWriter, r *http.Request) {
|
|
st, ok := internal.GetHealth("osiris")
|
|
if !ok {
|
|
slog.Error("health service osiris does not exist, file a bug")
|
|
http.Error(w, "health service osiris does not exist", http.StatusExpectationFailed)
|
|
}
|
|
|
|
switch st {
|
|
case healthv1.HealthCheckResponse_NOT_SERVING:
|
|
http.Error(w, "NOT OK", http.StatusInternalServerError)
|
|
return
|
|
case healthv1.HealthCheckResponse_SERVING:
|
|
fmt.Fprintln(w, "OK")
|
|
return
|
|
default:
|
|
http.Error(w, "UNKNOWN", http.StatusFailedDependency)
|
|
return
|
|
}
|
|
}
|