Current section
Files
Jump to
Current section
Files
lib/node_manager.ex
defmodule NodeManager do
def all_nodes do
[Node.self | Node.list]
end
def list, do: all_nodes
def app_nodes(app_name) do
filter_nodes(app_name)
end
def random_app_node(app_name) do
app_nodes(app_name) |> Enum.random
end
def send_request(app_name, module, function, params) do
rpc_node = random_app_node(app_name)
case result = :rpc.call(rpc_node, module, function, params) do
{:badrpc, reason} -> {:error, "Unable to contact #{app_name} node: #{reason}"}
_ -> result
end
end
def connect do
for tmp <- app_list do
{name, host} = tmp
Node.connect :"#{name}@#{host}"
end
end
defp app_list do
Application.get_env(:node_manager, :app_list)
end
defp filter_nodes(app_name) do
all_nodes
|> Enum.filter(fn(x) ->
node_name = x |> Atom.to_string
Regex.match?(~r/#{app_name}@/, node_name)
end)
end
end