"github.com/gorilla/mux"
+ "git.curoverse.com/arvados.git/sdk/go/health"
"git.curoverse.com/arvados.git/sdk/go/httpserver"
log "github.com/Sirupsen/logrus"
)
// Untrash moves blocks from trash back into store
rest.HandleFunc(`/untrash/{hash:[0-9a-f]{32}}`, UntrashHandler).Methods("PUT")
- // Health check ping
- rest.HandleFunc(`/_health/ping`, HealthCheckPingHandler).Methods("GET")
+ rest.Handle("/_health/{check}", &health.Handler{
+ Token: theConfig.ManagementToken,
+ Prefix: "/_health/",
+ }).Methods("GET")
// Any request which does not match any of these routes gets
// 400 Bad Request.
// PoolStatus struct
type PoolStatus struct {
- Alloc uint64 `json:"BytesAllocated"`
+ Alloc uint64 `json:"BytesAllocatedCumulative"`
Cap int `json:"BuffersMax"`
Len int `json:"BuffersInUse"`
}
}
}
-var pingResponseOK = map[string]string{"health": "OK"}
-
-// HealthCheckPingHandler processes "GET /_health/ping" requests
-func HealthCheckPingHandler(resp http.ResponseWriter, req *http.Request) {
- healthCheckDo(resp, req, pingResponseOK)
-}
-
-func healthCheckDo(resp http.ResponseWriter, req *http.Request, v interface{}) {
- msg, code := healthCheckAuth(resp, req)
- if msg != "" {
- http.Error(resp, msg, code)
- return
- }
-
- ok, err := json.Marshal(v)
- if err != nil {
- http.Error(resp, err.Error(), 500)
- }
-
- resp.Write(ok)
-}
-
-func healthCheckAuth(resp http.ResponseWriter, req *http.Request) (string, int) {
- if theConfig.ManagementToken == "" {
- return "disabled", http.StatusNotFound
- } else if h := req.Header.Get("Authorization"); h == "" {
- return "authorization required", http.StatusUnauthorized
- } else if h != "Bearer "+theConfig.ManagementToken {
- return "authorization error", http.StatusForbidden
- }
- return "", 0
-}
-
// GetBlock and PutBlock implement lower-level code for handling
// blocks by rooting through volumes connected to the local machine.
// Once the handler has determined that system policy permits the