Current section
Files
Jump to
Current section
Files
lib/system/node_monitor.ex
defmodule Extreme.System.NodeMonitor do
require Logger
def start_link do
{:ok, spawn_link fn ->
:global_group.monitor_nodes true
Process.register self(), __MODULE__
monitor()
end}
end
def monitor do
receive do
{:nodeup, node} -> Logger.info "NodeMonitor: #{node} joined"
{:nodedown, node} ->
Logger.warn "NodeMonitor: #{node} left"
check_cluster()
end
monitor()
end
defp check_cluster do
unless in_cluster?(),
do: Logger.error "There's no lighthouse in this cluster. We should restart!" # Node.stop
end
defp in_cluster?,
do: Node.list |> Enum.any?(fn node -> node |> to_string |> String.starts_with?("lighthouse") end)
end