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?(),
# Node.stop
do: Logger.error("There's no lighthouse in this cluster. We should restart!")
end
defp in_cluster?,
do:
Node.list()
|> Enum.any?(fn node -> node |> to_string |> String.starts_with?("lighthouse") end)
end