Current section
Files
Jump to
Current section
Files
lib/cure_sup.ex
defmodule Cure.Supervisor do
use Supervisor
@moduledoc """
The supervisor is responsible for monitoring Cure.Server processes.
Can be optionally left out by starting a Cure.Server process directly.
"""
@doc """
Starts a Cure.Supervisor process (registered as Cure.Supervisor).
"""
def start_link do
Supervisor.start_link(__MODULE__, :ok, [name: __MODULE__])
end
@doc """
Starts a Cure.Server process that is monitored by the Cure.Supervisor
process.
"""
def start_child(program_name) when program_name |> is_binary do
Supervisor.start_child(__MODULE__, [program_name])
end
@doc """
Terminates a Cure.Server process.
"""
def terminate_child(server_pid) when server_pid |> is_pid do
Supervisor.terminate_child(__MODULE__, server_pid)
end
@doc """
Terminates all supervised Cure.Server processes.
"""
def terminate_children do
children = Supervisor.which_children(__MODULE__)
children |> Enum.map(fn({:undefined, pid, :worker, [Cure.Server]}) ->
pid |> terminate_child
end)
end
@doc false
def init(:ok) do
children = [worker(Cure.Server, [])]
supervise(children, strategy: :simple_one_for_one)
end
end