Packages

Long Lived Services Scaffolding libraries

Current section

Files

Jump to
noizu_labs_services lib manager node supervisor.ex
Raw

lib/manager/node/supervisor.ex

defmodule Noizu.Service.NodeManager.Supervisor do
use Supervisor
require Noizu.Service.Types
import Noizu.Service.Types
def spec(context, options \\ nil) do
%{
id: __MODULE__,
type: :supervisor,
start: {__MODULE__, :start_link, [context, options]}
}
end
def start_link(context, options) do
Supervisor.start_link(__MODULE__, {context, options}, name: __MODULE__)
end
def init({context, options}) do
init_registry(context, options)
[
{Task.Supervisor, name: Noizu.Service.NodeManager.Task},
Noizu.Service.NodeManager.Server.spec(context, options)]
|> Supervisor.init(strategy: :one_for_one)
end
def add_child(spec) do
Supervisor.start_child(__MODULE__, spec)
end
#===========================================
# Registry
#===========================================
def init_registry(_, _) do
status = [node: node()]
:syn.add_node_to_scopes([__cluster_pool__(), __cluster_registry__(), __pool__(), __registry__()])
:syn.register(__pool__(), {:supervisor, node()}, self(), status)
:syn.join(__pool__(), :supervisors, self(), status)
end
#================================
# Behaviour
#================================
def __pool__(), do: Noizu.Service.NodeManager
def __server__(), do: Noizu.Service.NodeManager.Server
def __supervisor__(), do: Noizu.Service.NodeManager.Supervisor
def __registry__(), do: Noizu.Service.NodeManager.WorkerRegistry
defdelegate __cluster_pool__(), to: Noizu.Service.ClusterManager, as: :__pool__
defdelegate __cluster_server__(), to: Noizu.Service.ClusterManager, as: :__server__
defdelegate __cluster_supervisor__(), to: Noizu.Service.ClusterManager, as: :__supervisor__
defdelegate __cluster_registry__(), to: Noizu.Service.ClusterManager, as: :__registry__
end