Packages
oban
2.20.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/plugin.ex
defmodule Oban.Plugin do
@moduledoc """
Defines a shared behaviour for Oban plugins.
In addition to implementing the Plugin behaviour, all plugins **must** be a `GenServer`, `Agent`, or
another OTP compliant module.
## Example
Defining a basic plugin that satisfies the minimum behaviour:
defmodule MyPlugin do
@behaviour Oban.Plugin
use GenServer
@impl Oban.Plugin
def start_link(opts) do
GenServer.start_link(__MODULE__, opts, name: opts[:name])
end
@impl Oban.Plugin
def validate(opts) do
if is_atom(opts[:mode])
:ok
else
{:error, "expected opts to have a :mode key"}
end
end
@impl GenServer
def init(opts) do
case validate(opts) do
:ok -> {:ok, opts}
{:error, reason} -> {:stop, reason}
end
end
end
"""
alias Oban.Config
@type option :: {:conf, Config.t()} | {:name, GenServer.name()} | {atom(), term()}
@doc """
Starts a Plugin process linked to the current process.
Plugins are typically started as part of an Oban supervision tree and will receive the current
configuration as `:conf`, along with a `:name` and any other provided options.
"""
@callback start_link([option()]) :: GenServer.on_start()
@doc """
Validate the structure, presence, or values of keyword options.
"""
@callback validate([option()]) :: :ok | {:error, String.t()}
@doc """
Format telemetry event meta emitted by the for inclusion in the default logger.
"""
@callback format_logger_output(Config.t(), map()) :: map()
@optional_callbacks [format_logger_output: 2]
end