Packages
oban
2.11.2
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/registry.ex
defmodule Oban.Registry do
@moduledoc """
Local process storage for Oban instances.
"""
@type role :: term()
@type key :: Oban.name() | {Oban.name(), role()}
@type value :: term()
@doc false
def child_spec(_arg) do
[keys: :unique, name: __MODULE__]
|> Registry.child_spec()
|> Supervisor.child_spec(id: __MODULE__)
end
@doc """
Fetch the config for an Oban supervisor instance.
## Example
Get the default instance config:
Oban.Registry.config(Oban)
Get config for a custom named instance:
Oban.Registry.config(MyApp.Oban)
"""
@spec config(Oban.name()) :: Oban.Config.t()
def config(oban_name) do
case Registry.lookup(__MODULE__, oban_name) do
[{_pid, config}] ->
config
_ ->
raise RuntimeError,
"no config registered for #{oban_name} instance, " <>
"is the supervisor running?"
end
end
@doc """
Returns the pid of a supervised Oban process, or `nil` if the process can't be found.
## Example
Get the Oban supervisor's pid:
Oban.Registry.whereis(Oban)
Get a supervised module's pid:
Oban.Registry.whereis(Oban, Oban.Notifier)
Get the pid for a plugin:
Oban.Registry.whereis(Oban, {:plugin, MyApp.Oban.Plugin})
Get the pid for a queue's producer:
Oban.Registry.whereis(Oban, {:producer, :default})
"""
@spec whereis(Oban.name(), role()) :: pid() | nil
def whereis(oban_name, role \\ nil) do
oban_name
|> via(role)
|> GenServer.whereis()
end
@doc """
Build a via tuple suitable for calls to a supervised Oban process.
## Example
For an Oban supervisor:
Oban.Registry.via(Oban)
For a supervised module:
Oban.Registry.via(Oban, Oban.Notifier)
For a plugin:
Oban.Registry.via(Oban, {:plugin, Oban.Plugins.Cron})
"""
@spec via(Oban.name(), role(), value()) :: {:via, Registry, {__MODULE__, key()}}
def via(oban_name, role \\ nil, value \\ nil)
def via(oban_name, role, nil), do: {:via, Registry, {__MODULE__, key(oban_name, role)}}
def via(oban_name, role, value), do: {:via, Registry, {__MODULE__, key(oban_name, role), value}}
defp key(oban_name, nil), do: oban_name
defp key(oban_name, role), do: {oban_name, role}
end