37 lines
765 B
Elixir
37 lines
765 B
Elixir
defmodule GlobalBackgroundJob.DatabaseCleaner.Starter do
|
|
use GenServer
|
|
|
|
alias GlobalBackgroundJob.DatabaseCleaner
|
|
|
|
def start_link(opts) do
|
|
GenServer.start_link(__MODULE__, opts, name: __MODULE__)
|
|
end
|
|
|
|
@impl GenServer
|
|
def init(opts) do
|
|
pid = start_and_monitor(opts)
|
|
|
|
{:ok, {pid, opts}}
|
|
end
|
|
|
|
@impl GenServer
|
|
def handle_info({:DOWN, _, :process, pid, _reason}, {pid,opts} = state) do
|
|
{:noreply, {start_and_monitor(opts), opts}}
|
|
end
|
|
|
|
defp start_and_monitor(opts) do
|
|
pid =
|
|
case GenServer.start_link(DatabaseCleaner, opts, name: {:global, DatabaseCleaner}) do
|
|
{:ok, pid} ->
|
|
pid
|
|
|
|
{:error, {:already_started, pid}} ->
|
|
pid
|
|
end
|
|
|
|
Process.monitor(pid)
|
|
|
|
pid
|
|
end
|
|
end
|