Files
gluetun/internal/healthcheck/handler.go

47 lines
980 B
Go
Raw Normal View History

package healthcheck
import (
2020-12-30 19:34:11 +00:00
"errors"
"net/http"
2020-12-30 19:34:11 +00:00
"sync"
)
type handler struct {
2020-12-30 19:34:11 +00:00
healthErr error
healthErrMu sync.RWMutex
logger Logger
}
2020-12-30 19:34:11 +00:00
var errHealthcheckNotRunYet = errors.New("healthcheck did not run yet")
func newHandler(logger Logger) *handler {
return &handler{
2020-12-30 19:34:11 +00:00
healthErr: errHealthcheckNotRunYet,
logger: logger,
}
}
func (h *handler) ServeHTTP(responseWriter http.ResponseWriter, request *http.Request) {
if request.Method != http.MethodGet {
http.Error(responseWriter, "method not supported for healthcheck", http.StatusBadRequest)
return
}
2020-12-30 19:34:11 +00:00
if err := h.getErr(); err != nil {
http.Error(responseWriter, err.Error(), http.StatusInternalServerError)
return
}
responseWriter.WriteHeader(http.StatusOK)
}
2020-12-30 19:34:11 +00:00
func (h *handler) setErr(err error) {
h.healthErrMu.Lock()
defer h.healthErrMu.Unlock()
h.healthErr = err
}
func (h *handler) getErr() (err error) {
h.healthErrMu.RLock()
defer h.healthErrMu.RUnlock()
return h.healthErr
}