mirror of
https://github.com/openziti/zrok.git
synced 2024-12-01 12:34:08 +01:00
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package controller
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/sirupsen/logrus"
|
|
"net/http"
|
|
)
|
|
|
|
func HealthCheckHTTP(w http.ResponseWriter, _ *http.Request) {
|
|
if err := healthCheckStore(w); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
if err := healthCheckMetrics(w); err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
|
w.Write([]byte("<html><body><h1>Healthy</h1></body></html>"))
|
|
}
|
|
|
|
func healthCheckStore(w http.ResponseWriter) error {
|
|
trx, err := str.Begin()
|
|
if err != nil {
|
|
http.Error(w, "error starting transaction", http.StatusInternalServerError)
|
|
return err
|
|
}
|
|
defer func() {
|
|
_ = trx.Rollback()
|
|
}()
|
|
count := -1
|
|
if err := trx.QueryRowx("select count(0) from migrations").Scan(&count); err != nil {
|
|
http.Error(w, "error selecting migration count", http.StatusInternalServerError)
|
|
return err
|
|
}
|
|
logrus.Debugf("%d migrations", count)
|
|
return nil
|
|
}
|
|
|
|
func healthCheckMetrics(w http.ResponseWriter) error {
|
|
if cfg.Metrics != nil && cfg.Metrics.Influx != nil {
|
|
queryApi := idb.QueryAPI(cfg.Metrics.Influx.Org)
|
|
query := fmt.Sprintf("from(bucket: \"%v\")\n", cfg.Metrics.Influx.Bucket) +
|
|
fmt.Sprintf("|> range(start: -5s)\n") +
|
|
"|> filter(fn: (r) => r[\"_measurement\"] == \"xfer\")\n" +
|
|
"|> filter(fn: (r) => r[\"_field\"] == \"rx\" or r[\"_field\"] == \"tx\")\n" +
|
|
"|> filter(fn: (r) => r[\"namespace\"] == \"backend\")\n" +
|
|
"|> sum()"
|
|
result, err := queryApi.Query(context.Background(), query)
|
|
if err != nil {
|
|
http.Error(w, "error querying influx", http.StatusInternalServerError)
|
|
return err
|
|
}
|
|
results := 0
|
|
for result.Next() {
|
|
results++
|
|
}
|
|
logrus.Debugf("%d results", results)
|
|
}
|
|
return nil
|
|
}
|