Current section
Files
Jump to
Current section
Files
lib/gasrate.supervisor
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