Packages
oban
1.0.0-rc.1
2.23.0
2.22.1
2.22.0
2.21.1
2.21.0
2.20.3
2.20.2
2.20.1
2.20.0
2.19.4
2.19.3
2.19.2
2.19.1
2.19.0
2.18.3
2.18.2
2.18.1
2.18.0
2.17.12
2.17.11
2.17.10
2.17.9
2.17.8
2.17.7
2.17.6
2.17.5
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.3
2.16.2
2.16.1
2.16.0
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.2
2.14.1
2.14.0
2.13.6
2.13.5
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.1
2.12.0
2.11.3
2.11.2
2.11.1
2.11.0
2.10.1
2.10.0
retired
2.9.2
2.9.1
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.1
2.6.0
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.0
2.0.0
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.2.0
1.1.0
1.0.0
1.0.0-rc.2
1.0.0-rc.1
0.12.1
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Robust job processing, backed by modern PostgreSQL, SQLite3, and MySQL.
Current section
Files
Jump to
Current section
Files
lib/oban/queue/supervisor.ex
defmodule Oban.Queue.Supervisor do
@moduledoc false
use Supervisor
alias Oban.Config
alias Oban.Queue.{Producer, Watchman}
@type option ::
{:name, module()}
| {:conf, Config.t()}
| {:queue, binary()}
| {:limit, pos_integer()}
@spec start_link([option]) :: Supervisor.on_start()
def start_link(opts) when is_list(opts) do
name = Keyword.get(opts, :name, __MODULE__)
Supervisor.start_link(__MODULE__, Map.new(opts), name: name)
end
@spec child_spec({atom(), integer()}, Config.t()) :: Supervisor.child_spec()
def child_spec({queue, limit}, conf) do
queue = to_string(queue)
name = Module.concat([conf.name, "Queue", Macro.camelize(queue)])
opts = [conf: conf, queue: queue, limit: limit, name: name]
Supervisor.child_spec({__MODULE__, opts}, id: name)
end
@impl Supervisor
def init(%{conf: conf, limit: limit, name: name, queue: queue}) do
fore_name = Module.concat([name, "Foreman"])
prod_name = Module.concat([name, "Producer"])
fore_opts = [strategy: :one_for_one, name: fore_name]
prod_opts = [
conf: conf,
foreman: fore_name,
limit: limit,
queue: queue,
name: prod_name
]
watch_opts = [
foreman: fore_name,
name: Module.concat([name, "Watchman"]),
producer: prod_name,
shutdown: conf.shutdown_grace_period
]
children = [
{DynamicSupervisor, fore_opts},
{Producer, prod_opts},
{Watchman, watch_opts}
]
Supervisor.init(children, strategy: :rest_for_one)
end
end