Packages
oban
2.16.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 lookup(oban_name) do
{_pid, config} ->
config
_ ->
raise RuntimeError, """
No Oban instance named `#{inspect(oban_name)}` is running and config isn't available.
"""
end
end
@doc """
Find the `{pid, value}` pair for a registered Oban process.
## Example
Get the default instance config:
Oban.Registry.lookup(Oban)
Get a supervised module's pid:
Oban.Registry.lookup(Oban, Oban.Notifier)
"""
@spec lookup(Oban.name(), role()) :: nil | {pid(), value()}
def lookup(oban_name, role \\ nil) do
__MODULE__
|> Registry.lookup(key(oban_name, role))
|> List.first()
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() | {atom(), node()} | 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