diff --git a/src/metabase/server/routes.clj b/src/metabase/server/routes.clj index 6f57f892ee3ff2e0128858bed23204e088f0b97c..8e8dce24446a5ad18befd162e313e2ab1f9fb61b 100644 --- a/src/metabase/server/routes.clj +++ b/src/metabase/server/routes.clj @@ -1,15 +1,19 @@ (ns metabase.server.routes "Main Compojure routes tables. See https://github.com/weavejester/compojure/wiki/Routes-In-Detail for details about how these work. `/api/` routes are in `metabase.api.routes`." - (:require [compojure.core :refer [context defroutes GET]] + (:require [clojure.tools.logging :as log] + [compojure.core :refer [context defroutes GET]] [compojure.route :as route] [metabase.api.dataset :as api.dataset] [metabase.api.routes :as api] [metabase.core.initialization-status :as init-status] + [metabase.db.connection :as mdb.connection] + [metabase.driver.sql-jdbc.connection :as sql-jdbc.conn] [metabase.plugins.classloader :as classloader] [metabase.public-settings :as public-settings] [metabase.server.routes.index :as index] [metabase.util :as u] + [metabase.util.i18n :refer [trs]] [ring.util.response :as response])) (u/ignore-exceptions (classloader/require '[metabase-enterprise.sso.api.routes :as ee.sso.routes])) @@ -43,9 +47,15 @@ (GET "/" [] index/index) (GET "/favicon.ico" [] (response/resource-response (public-settings/application-favicon-url))) ;; ^/api/health -> Health Check Endpoint - (GET "/api/health" [] (if (init-status/complete?) - {:status 200, :body {:status "ok"}} - {:status 503, :body {:status "initializing", :progress (init-status/progress)}})) + (GET "/api/health" [] + (if (init-status/complete?) + (try (if (sql-jdbc.conn/can-connect-with-spec? {:datasource (mdb.connection/data-source)}) + {:status 200, :body {:status "ok"}} + {:status 503 :body {:status "Unable to get app-db connection"}}) + (catch Exception e + (log/warn e (trs "Error in api/health database check")) + {:status 503 :body {:status "Error getting app-db connection"}})) + {:status 503, :body {:status "initializing", :progress (init-status/progress)}})) ;; ^/api/ -> All other API routes (context "/api" [] (fn [& args] ;; Redirect naughty users who try to visit a page other than setup if setup is not yet complete