defmodule Gasrate.Supervisor do use Supervisor @registry_name :gas_rate_registry def start_link do Supervisor.start_link(__MODULE__, nil, name: __MODULE__) end def init(_) do children = [worker(Gasrate.Server, [], restart: :transient)] supervise(children, [strategy: :simple_one_for_one]) end def start(id) do Supervisor.start_child(__MODULE__, [ id ]) end def stop(id) do case Registry.lookup(@registry_name, id) do [] -> :ok [{pid, _}] -> Process.exit(pid, :shutdown) :ok end end def whereis(id) do case Registry.lookup(@registry_name, id) do [{pid, _}] -> pid [] -> nil end end def find_or_create_process(id) do if process_exists?(id) do {:ok, id} else id |> start end end def process_exists?(id) do case Registry.lookup(@registry_name, id) do [] -> false _ -> true end end end