Current section

Files

Jump to
pi_bridge lib pi supervisor install.ex
Raw

lib/pi/supervisor/install.ex

defmodule Pi.Supervisor.Install do
@moduledoc false
def start_link(module, opts) do
DynamicSupervisor.start_link(module, opts, name: module)
end
def ensure(module) do
case dynamic(module) do
:ok -> :ok
{:ok, _pid} -> :ok
{:ok, _pid, _info} -> :ok
{:error, {:already_started, _pid}} -> :ok
error -> error
end
end
def reset_dynamic(supervisor) do
supervisor
|> DynamicSupervisor.which_children()
|> Enum.each(fn {_id, pid, _type, _modules} ->
DynamicSupervisor.terminate_child(supervisor, pid)
end)
:ok
end
def dynamic(module) do
case Process.whereis(module) do
nil ->
child_spec = Supervisor.child_spec({module, []}, restart: :transient)
DynamicSupervisor.start_child(Pi.OptionalSupervisor, child_spec)
_pid ->
:ok
end
end
end