cleanup and refactor health service
This commit is contained in:
@@ -3,29 +3,54 @@ package internal
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"sync"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func StartHealthEndpoint() {
|
||||
type HealthServer struct {
|
||||
mu sync.RWMutex
|
||||
state int
|
||||
}
|
||||
|
||||
func NewHealthServer() *HealthServer {
|
||||
return &HealthServer{
|
||||
state: http.StatusOK,
|
||||
}
|
||||
}
|
||||
|
||||
func (hs *HealthServer) SetHealthState(code int) {
|
||||
hs.mu.Lock()
|
||||
defer hs.mu.Unlock()
|
||||
hs.state = code
|
||||
}
|
||||
|
||||
func (hs *HealthServer) GetHealthState() int {
|
||||
hs.mu.RLock()
|
||||
defer hs.mu.RUnlock()
|
||||
return hs.state
|
||||
}
|
||||
|
||||
func (hs *HealthServer) Start() {
|
||||
r := mux.NewRouter()
|
||||
r.Use(mux.CORSMethodMiddleware(r))
|
||||
r.HandleFunc("/health", send200).Methods(http.MethodGet)
|
||||
r.HandleFunc("/health", hs.sendHealth).Methods(http.MethodGet)
|
||||
err := http.ListenAndServe("0.0.0.0:8080", r)
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "StartHealthEndpoint",
|
||||
"Caller": "HealthServer.Start",
|
||||
}).Error(fmt.Sprintf("Error creating health endpoint: %s", err.Error()))
|
||||
}
|
||||
}
|
||||
|
||||
func send200(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
func (hs *HealthServer) sendHealth(w http.ResponseWriter, r *http.Request) {
|
||||
code := hs.GetHealthState()
|
||||
w.WriteHeader(code)
|
||||
_, err := w.Write([]byte{})
|
||||
if err != nil {
|
||||
log.WithFields(log.Fields{
|
||||
"Caller": "send200",
|
||||
"Caller": "HealthServer.sendHealth",
|
||||
}).Error(fmt.Sprintf("Error answering health endpoint: %s", err.Error()))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user