From f1ece34addec6191f40b79d10abec54fddb32466 Mon Sep 17 00:00:00 2001 From: Sky Rose Date: Mon, 13 May 2024 16:56:51 -0400 Subject: [PATCH] /_health endpoint (#2) --- .../controllers/db_health_controller.ex | 17 +++++++++++++++++ lib/orbit_web/controllers/health_controller.ex | 11 +++++++++++ lib/orbit_web/router.ex | 9 +++++---- .../controllers/health_controller_test.exs | 8 ++++++++ 4 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 lib/orbit_web/controllers/db_health_controller.ex create mode 100644 lib/orbit_web/controllers/health_controller.ex create mode 100644 test/orbit_web/controllers/health_controller_test.exs diff --git a/lib/orbit_web/controllers/db_health_controller.ex b/lib/orbit_web/controllers/db_health_controller.ex new file mode 100644 index 00000000..ee2f313a --- /dev/null +++ b/lib/orbit_web/controllers/db_health_controller.ex @@ -0,0 +1,17 @@ +defmodule OrbitWeb.HealthDbController do + @moduledoc """ + Controller that runs a database query to check whether the webserver can connect to the database. + """ + use OrbitWeb, :controller + import Ecto.Query + + alias Orbit.Repo + + def index(conn, _params) do + count = Repo.one(from(migration in "schema_migrations", select: count(migration))) + + conn + |> put_status(200) + |> text("#{count}") + end +end diff --git a/lib/orbit_web/controllers/health_controller.ex b/lib/orbit_web/controllers/health_controller.ex new file mode 100644 index 00000000..d98025d0 --- /dev/null +++ b/lib/orbit_web/controllers/health_controller.ex @@ -0,0 +1,11 @@ +defmodule OrbitWeb.HealthController do + @moduledoc """ + Simple controller to return 200 OK when the website is healthy. + """ + use OrbitWeb, :controller + + def index(conn, _params) do + conn + |> send_resp(200, "") + end +end diff --git a/lib/orbit_web/router.ex b/lib/orbit_web/router.ex index 669c10af..f73ba2e2 100644 --- a/lib/orbit_web/router.ex +++ b/lib/orbit_web/router.ex @@ -20,10 +20,11 @@ defmodule OrbitWeb.Router do get "/", PageController, :home end - # Other scopes may use custom stacks. - # scope "/api", OrbitWeb do - # pipe_through :api - # end + scope "/", OrbitWeb do + # no pipe + get "/_health", HealthController, :index + get "/_health_db", HealthDbController, :index + end # Enable LiveDashboard in development if Application.compile_env(:orbit, :dev_routes) do diff --git a/test/orbit_web/controllers/health_controller_test.exs b/test/orbit_web/controllers/health_controller_test.exs new file mode 100644 index 00000000..b5e64e0e --- /dev/null +++ b/test/orbit_web/controllers/health_controller_test.exs @@ -0,0 +1,8 @@ +defmodule OrbitWeb.HealthControllerTest do + use OrbitWeb.ConnCase + + test "GET /_health", %{conn: conn} do + conn = get(conn, ~p"/_health") + assert response(conn, 200) + end +end