Current section
Files
Jump to
Current section
Files
lib/peluquera.ex
defmodule Peluquera do
@moduledoc ~S"""
The top-level supervisor process that allows to use `Peluquero` inside the
main application supervision tree rather than as a bare application.
"""
use Supervisor
use Peluquero.Namer
require Logger
############################################################################
@doc false
def start_link(opts \\ []) do
Supervisor.start_link(__MODULE__, opts, name: fqname(opts))
end
@doc false
def init(args) do
peluquerias = Application.get_env(:peluquero, :peluquerias, [])
peinados = Application.get_env(:peluquero, :peinados, [])
Logger.warn(fn ->
"✂ Peluquero started:\n" <>
" — peluquerias: #{inspect(peluquerias)}.\n" <>
" — peinados: #{inspect(peinados)}.\n" <> " — args: #{inspect(args)}.\n\n"
end)
amqps =
case Enum.map(peluquerias, &spec_for_peluqueria/1) do
[] -> [{Peluquero.Peluqueria, []}]
many -> many
end
redises = spec_for_peinado({"Procurator", peinados})
opts = [strategy: :one_for_one, name: fqname(args)]
Supervisor.init([redises | amqps], opts)
end
def suicide, do: GenServer.cast(__MODULE__, :suicide)
##############################################################################
defp spec_for_peluqueria({name, settings}) do
%{
id: fqname(Peluquero.Peluqueria, name),
start: {Peluquero.Peluqueria, :start_link, [Keyword.merge(settings, name: name)]},
restart: :permanent,
type: :supervisor
}
end
defp spec_for_peinado({name, peinados}) do
%{
id: fqname(Peluquero.Peinados, name),
start: {Peluquero.Peinados, :start_link, [peinados]},
restart: :permanent,
type: :supervisor
}
end
def handle_cast(:suicide, _state) do
raise("❤ planned crash to reinit rabbits")
end
end