Packages
electric
1.4.7
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.16
1.4.16-beta-1
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
retired
1.1.5
retired
1.1.4
retired
1.1.3
retired
1.1.2
1.1.1
1.1.0
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.15
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-beta.23
1.0.0-beta.22
1.0.0-beta.20
1.0.0-beta.19
1.0.0-beta.18
1.0.0-beta.17
1.0.0-beta.16
1.0.0-beta.15
1.0.0-beta.14
1.0.0-beta.13
1.0.0-beta.12
1.0.0-beta.11
1.0.0-beta.10
1.0.0-beta.9
1.0.0-beta.8
1.0.0-beta.7
1.0.0-beta.6
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.5.2
0.4.4
Postgres sync engine. Sync little subsets of your Postgres data into local apps and services.
Current section
Files
Jump to
Current section
Files
lib/electric/plug/health_check_plug.ex
defmodule Electric.Plug.HealthCheckPlug do
use Plug.Builder
alias Plug.Conn
alias Electric.StatusMonitor
plug :fetch_query_params
plug :check_service_status
plug :put_resp_content_type, "application/json"
plug :put_cache_headers
plug :send_response
# Match service status to a status code and status message,
# keeping the message name decoupled from the internal representation
# of the status to ensure the API is stable
defp check_service_status(%Conn{assigns: %{config: config}} = conn, _) do
{status_code, status_text} =
case StatusMonitor.status(config[:stack_id]) do
%{conn: :waiting_on_lock, shape: _} -> {202, "waiting"}
%{conn: :starting, shape: _} -> {202, "starting"}
%{conn: _, shape: :starting} -> {202, "starting"}
%{conn: :up, shape: :up} -> {200, "active"}
# when Electric is in the scaled-down mode (all database connections are closed),
# report its status as active because for any incoming shape request it will
# transparently restore the connection subsystem before processing the request
%{conn: :sleeping, shape: _} -> {200, "active"}
end
conn |> assign(:status_text, status_text) |> assign(:status_code, status_code)
end
defp put_cache_headers(conn, _) do
put_resp_header(conn, "cache-control", "no-cache, no-store, must-revalidate")
end
defp send_response(%Conn{assigns: assigns} = conn, _) do
send_resp(conn, assigns.status_code, Jason.encode!(%{status: assigns.status_text}))
end
end