defmodule Pi.Agent.JobSupervisor do
@moduledoc "Dynamic supervisor for BEAM-owned agent jobs."
use DynamicSupervisor
alias Pi.Supervisor.Install
def start_link(opts \\ []), do: Install.start_link(__MODULE__, opts)
def install, do: Install.dynamic(__MODULE__)
def start_job(job, opts) do
install()
DynamicSupervisor.start_child(
__MODULE__,
Supervisor.child_spec({Pi.Agent.Job, {job, opts}},
id: {Pi.Agent.Job, job.id},
restart: :temporary
)
)
end
@impl true
def init(_opts), do: DynamicSupervisor.init(strategy: :one_for_one)
end