Current section
Files
Jump to
Current section
Files
lib/sagents/horde/agents_supervisor_impl.ex
defmodule Sagents.Horde.AgentsSupervisorImpl do
@moduledoc """
Module-based Horde.DynamicSupervisor for agent processes.
This enables dynamic configuration of Horde cluster membership
and distribution strategy via application config.
"""
use Horde.DynamicSupervisor
@supervisor_name Sagents.AgentsDynamicSupervisor
def start_link(init_arg) do
Horde.DynamicSupervisor.start_link(__MODULE__, init_arg, name: @supervisor_name)
end
@impl true
def init(init_arg) do
base_config = [
strategy: :one_for_one,
members: members(),
distribution_strategy: distribution_strategy()
]
base_config
|> Keyword.merge(Keyword.drop(init_arg, [:name]))
|> Horde.DynamicSupervisor.init()
end
def child_spec(opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, [opts]},
type: :supervisor,
shutdown: 30_000
}
end
defp members do
Sagents.Horde.ClusterConfig.resolve_members(@supervisor_name)
end
defp distribution_strategy do
Application.get_env(:sagents, :horde, [])
|> Keyword.get(:distribution_strategy, Horde.UniformDistribution)
end
end