Current section

Files

Jump to
pi_bridge lib pi agent job_supervisor.ex
Raw

lib/pi/agent/job_supervisor.ex

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.ensure(__MODULE__)
def start_job(job, opts) do
with :ok <- install() do
DynamicSupervisor.start_child(
__MODULE__,
Supervisor.child_spec({Pi.Agent.Job, {job, opts}},
id: {Pi.Agent.Job, job.id},
restart: :temporary
)
)
end
end
@impl true
def init(_opts), do: DynamicSupervisor.init(strategy: :one_for_one)
end