Packages
honeydew
1.2.2
1.5.0
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.0
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Pluggable local/clusterable job queue focused on safety.
Current section
Files
Jump to
Current section
Files
lib/honeydew/node_monitor.ex
defmodule Honeydew.NodeMonitor do
use GenServer, restart: :transient
require Logger
@interval 1_000 # ms
def start_link(node) do
GenServer.start_link(__MODULE__, node)
end
def init(node) do
:ok = :net_kernel.monitor_nodes(true)
GenServer.cast(self(), :ping)
{:ok, node}
end
def handle_cast(:ping, node) do
node
|> Node.ping
|> case do
:pang -> :timer.apply_after(@interval, GenServer, :cast, [self(), :ping])
_ -> :noop
end
{:noreply, node}
end
def handle_info({:nodeup, node}, node) do
Logger.info "[Honeydew] Connection to #{node} established."
{:noreply, node}
end
def handle_info({:nodeup, _}, node), do: {:noreply, node}
def handle_info({:nodedown, node}, node) do
Logger.warn "[Honeydew] Lost connection to #{node}, attempting to reestablish..."
GenServer.cast(self(), :ping)
{:noreply, node}
end
def handle_info({:nodedown, _}, node), do: {:noreply, node}
end