defmodule Emit.Cluster do use GenServer require Logger def start_link(monitor_fn \\ {__MODULE__, :monitor_nodes, []}) do GenServer.start_link(__MODULE__, monitor_fn, name: __MODULE__) end def init([]) do init({__MODULE__, :monitor_nodes, []}) end def init({m, f, a}) do apply(m, f, a) Logger.debug("[EMIT] [CLUSTER] boot: node: monitor up") {:ok, 0} end def handle_info({msg, _node}, 0) when msg in [:nodeup, :nodedown] do Logger.info("[EMIT] [CLUSTER] topology: neighbours updating...") Logger.info("[EMIT] [CLUSTER] topology: neighbours updated") {:noreply, 0} end def task_supervisor, do: Application.get_env(:emit, :task_scheduler, Emit.TaskScheduler) def monitor_nodes do :net_kernel.monitor_nodes(true) end end