Current section

Files

Jump to
extreme_system lib system commands_supervisor.ex
Raw

lib/system/commands_supervisor.ex

defmodule Extreme.System.CommandsSupervisor do
defmacro __using__(opts) do
quote do
use Supervisor
require Logger
@prefix Keyword.fetch!(unquote(opts), :prefix) |> to_string
def start_link(extreme_settings) do
name = String.to_atom(@prefix <> ".CommandsSupervisor")
Supervisor.start_link(__MODULE__, {extreme_settings}, name: name)
end
def init({extreme_settings}) do
extreme_name = String.to_atom(@prefix <> ".ExtremeWrite")
groups = unquote(opts)
|> Keyword.fetch!(:aggregates)
|> Enum.map(fn aggregate ->
supervisor( Extreme.System.AggregateGroup, [aggregate], id: aggregate)
end)
children = [
worker( Extreme, [extreme_settings, [name: extreme_name]], id: extreme_name),
#worker( Extreme.System.EventStore, [extreme_name, [name: es_name]]),
] ++ groups
supervise children, strategy: :one_for_one
end
end
end
end