Skip to content

Commit

Permalink
Add healthz endpoint to HTTP server
Browse files Browse the repository at this point in the history
  • Loading branch information
mostafa committed Oct 24, 2023
1 parent b7040cc commit 32ab95a
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 18 deletions.
38 changes: 28 additions & 10 deletions api/http_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package api

import (
"context"
"encoding/json"
"io/fs"
"net/http"

Expand All @@ -12,6 +13,10 @@ import (
"google.golang.org/grpc/credentials/insecure"
)

type Healthz struct {
Status string `json:"status"`
}

// StartHTTPAPI starts the HTTP API.
func StartHTTPAPI(options *Options) {
ctx := context.Background()
Expand All @@ -30,25 +35,38 @@ func StartHTTPAPI(options *Options) {

mux := http.NewServeMux()
mux.Handle("/", rmux)
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
mux.HandleFunc("/healthz", func(writer http.ResponseWriter, r *http.Request) {
if liveness(options.Servers) {
writer.Header().Set("Content-Type", "application/json")
writer.WriteHeader(http.StatusOK)
if err := json.NewEncoder(writer).Encode(Healthz{Status: "SERVING"}); err != nil {
options.Logger.Err(err).Msg("failed to serve healthcheck")
writer.WriteHeader(http.StatusInternalServerError)
}
} else {
writer.Header().Set("Content-Type", "application/json")
writer.WriteHeader(http.StatusServiceUnavailable)
if err := json.NewEncoder(writer).Encode(Healthz{Status: "NOT_SERVING"}); err != nil {
options.Logger.Err(err).Msg("failed to serve healthcheck")
}
}
})

mux.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
if _, err := w.Write([]byte(config.Version)); err != nil {
mux.HandleFunc("/version", func(writer http.ResponseWriter, r *http.Request) {
writer.WriteHeader(http.StatusOK)
if _, err := writer.Write([]byte(config.Version)); err != nil {
options.Logger.Err(err).Msg("failed to serve version")
w.WriteHeader(http.StatusInternalServerError)
writer.WriteHeader(http.StatusInternalServerError)
}
})

if IsSwaggerEmbedded() {
mux.HandleFunc("/swagger.json", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
mux.HandleFunc("/swagger.json", func(writer http.ResponseWriter, r *http.Request) {
writer.WriteHeader(http.StatusOK)
data, _ := swaggerUI.ReadFile("v1/api.swagger.json")
if _, err := w.Write(data); err != nil {
if _, err := writer.Write(data); err != nil {
options.Logger.Err(err).Msg("failed to serve swagger.json")
w.WriteHeader(http.StatusInternalServerError)
writer.WriteHeader(http.StatusInternalServerError)
}
})

Expand Down
19 changes: 11 additions & 8 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -696,16 +696,19 @@ var runCmd = &cobra.Command{
GRPCNetwork: conf.Global.API.GRPCNetwork,
GRPCAddress: conf.Global.API.GRPCAddress,
HTTPAddress: conf.Global.API.HTTPAddress,
Servers: servers,
}

go api.StartGRPCAPI(&api.API{
Options: &apiOptions,
Config: conf,
PluginRegistry: pluginRegistry,
Pools: pools,
Proxies: proxies,
Servers: servers,
})
go api.StartGRPCAPI(
&api.API{
Options: &apiOptions,
Config: conf,
PluginRegistry: pluginRegistry,
Pools: pools,
Proxies: proxies,
Servers: servers,
},
&api.HealthChecker{Servers: servers})
logger.Info().Str("address", apiOptions.HTTPAddress).Msg("Started the HTTP API")

go api.StartHTTPAPI(&apiOptions)
Expand Down

0 comments on commit 32ab95a

Please sign in to comment.