Current section
Files
Jump to
Current section
Files
lib/graft/supervisor.ex
defmodule Graft.Supervisor do
@moduledoc false
require Logger
use Supervisor
def start_link() do
Supervisor.start_link(__MODULE__, cluster_config(), name: __MODULE__)
end
def init([{my_servers, all_servers}, machine_module, machine_args]) do
Logger.info("This is node #{node()}, servers on this node are #{inspect(my_servers)}")
children =
for {name, _node} <- my_servers do
worker(Graft.Server, [name, all_servers, machine_module, machine_args], restart: :transient, id: name)
end
supervise(children, strategy: :one_for_one)
end
defp cluster_config() do
[
Application.fetch_env!(:graft, :cluster) |> on_my_node(),
Application.fetch_env!(:graft, :machine),
Application.fetch_env!(:graft, :machine_args)
]
end
defp on_my_node(servers) do
{(servers |> Enum.group_by(fn {_, node} -> node end))[node()], servers}
end
end