Fela Maslen пре 5 година
родитељ
комит
fa9491bc5f
2 измењених фајлова са 42 додато и 0 уклоњено
  1. 40 0
      gmus-backend/pkg/server/health.go
  2. 2 0
      gmus-backend/pkg/server/server.go

+ 40 - 0
gmus-backend/pkg/server/health.go

@@ -0,0 +1,40 @@
+package server
+
+import (
+	"encoding/json"
+	"net/http"
+
+	"github.com/felamaslen/gmus-backend/pkg/config"
+	"github.com/felamaslen/gmus-backend/pkg/logger"
+	"github.com/gorilla/mux"
+	"github.com/jmoiron/sqlx"
+)
+
+func healthRoutes(l *logger.Logger, router *mux.Router) {
+	resOk, _ := json.Marshal(map[string]bool{"ok": true})
+	resNotOk, _ := json.Marshal(map[string]bool{"ok": false})
+
+	router.Path("/liveness").Methods("GET").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		w.Write(resOk)
+	})
+
+	var isReady = false
+
+	router.Path("/readiness").Methods("GET").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		if !isReady {
+			db, err := sqlx.Connect("pgx", config.GetConfig().DatabaseUrl)
+			if err == nil {
+				_, err = db.Query("select version()")
+			}
+			if err == nil {
+				isReady = true
+			} else {
+				l.Error("[readiness] Error getting connection: %v\n", err)
+				http.Error(w, "Could not get database connection", http.StatusInternalServerError)
+				w.Write(resNotOk)
+				return
+			}
+		}
+		w.Write(resOk)
+	})
+}

+ 2 - 0
gmus-backend/pkg/server/server.go

@@ -21,6 +21,8 @@ func StartServer() {
 
 	router := mux.NewRouter()
 
+	healthRoutes(l, router)
+
 	initPubsub(l, rdb, router)
 
 	router.Path("/stream").Methods("GET").HandlerFunc(routeHandler(l, rdb, streamSong))