Packages
x3m_system
0.9.1
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
retired
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
retired
0.7.7
0.7.6
retired
0.7.5
0.7.4
retired
0.7.3
retired
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
retired
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.1.1
0.1.0
Building blocks for distributed and/or CQRS/ES systems
Current section
Files
Jump to
Current section
Files
lib/node_monitor.ex
defmodule X3m.System.NodeMonitor do
@moduledoc !"""
Internal. Watches cluster membership and emits `:node_joined` / `:node_left`
telemetry events used to keep the service registry in sync.
"""
def child_spec(_opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, []},
type: :worker,
restart: :permanent,
shutdown: 500
}
end
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} ->
X3m.System.Instrumenter.execute(:node_joined, %{}, %{node: node})
{:nodedown, node} ->
X3m.System.Instrumenter.execute(:node_left, %{}, %{node: node})
end
monitor()
end
end