health.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package server
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/felamaslen/gmus-backend/pkg/config"
  6. "github.com/felamaslen/gmus-backend/pkg/logger"
  7. "github.com/gorilla/mux"
  8. "github.com/jmoiron/sqlx"
  9. )
  10. func healthRoutes(l *logger.Logger, router *mux.Router) {
  11. resOk, _ := json.Marshal(map[string]bool{"ok": true})
  12. resNotOk, _ := json.Marshal(map[string]bool{"ok": false})
  13. router.Path("/liveness").Methods("GET").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  14. w.Write(resOk)
  15. })
  16. var isReady = false
  17. router.Path("/readiness").Methods("GET").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  18. if !isReady {
  19. db, err := sqlx.Connect("pgx", config.GetConfig().DatabaseUrl)
  20. if err == nil {
  21. _, err = db.Query("select version()")
  22. }
  23. if err == nil {
  24. isReady = true
  25. } else {
  26. l.Error("[readiness] Error getting connection: %v\n", err)
  27. http.Error(w, "Could not get database connection", http.StatusInternalServerError)
  28. w.Write(resNotOk)
  29. return
  30. }
  31. }
  32. w.Write(resOk)
  33. })
  34. }