defmodule HAHandler.PGSQL.Watcher do use GenServer require Logger def start_link(opts) do GenServer.start_link(__MODULE__, opts) end @impl true def init(opts) do # Configures this worker's jobs to report in the "pgsql" namespace Appsignal.Span.set_namespace(Appsignal.Tracer.root_span(), "pgsql") # Starts a Postgrex child but does not means the connection was # successful. # TODO: set dbconnections backoff and connect hooks # See https://github.com/elixir-ecto/db_connection/blob/master/lib/db_connection.ex#L343 case Postgrex.start_link(opts) do {:ok, pid} -> state = %{ backend: pid, hostname: Keyword.get(opts, :hostname) } {:ok, state} {:error, err} -> # Will be catched by the supervisor if anything happen. It should not # be triggered even if a PGSQL node down, since Postgrex has its own # surpervision tree. {:error, err} end end @impl true def handle_call({:execute, query, params}, _from, %{backend: backend} = state) do {:reply, Postgrex.query(backend, query, params), state} end end