📋 New Queues Table, Details, and Runtime Configuration
Oban Web has a new queues page that shows details about every active queue, including previously invisible configuration like global concurrency limits, uptime, and rate limit activity. You can also expand queues to view specifics about instances across each node, along with the ability to pause or resume instances.
For more queue information and runtime configuration there is a details page for every queue. Within it you can scale the local limit across all nodes, change the global limit, edit the rate limit, and even scale individual instances.
🌗 Dark Mode and Visual Updates
The dashboard is completely overhauled with a visual refresh and a new dark mode! The visual changes were driven by accessibility improvements such as:
- Increased contrast
- Consistent hover/focus for actionable elements
- Informative tooltips
- Semantic forms
🔏 Custom Args/Meta Formatting Callbacks
By default, the job views pretty print args
and meta
in full. For more
control, i.e. for privacy or brevity, there are now format_job_args/1
and
format_job_meta/1
callbacks.
For example, to redact the "email"
for only the SecretJob
worker:
@impl true
def format_job_args(%Oban.Job{worker: "MyApp.SecretJob", args: args}) do
args
|> Map.replace("email", "REDACTED")
|> inspect(pretty: true)
end
def format_job_args(job), do: Oban.Web.Resolver.format_job_args(job)
See the Customizing the Dashboard guide for more.
Dependencies
-
Upgrade the minimum Phoenix Live View dependency to
0.17.4
in order to get components working properly. -
Upgrade the minimum Elixir version to
1.12
due to the required use of HEEX templates in the latest Live View.
Jobs Page
-
Sort jobs by worker, queue, attempt, or time in either ascending or descending order. The default is by time ascending.
-
Filter jobs by multiple nodes or queues at once. Within nodes or queues filtering acts like an “OR”, while between them it is an “AND”.
Performance
-
Pause refreshing when Web loses window visiblity and restore it when the window becomes visible again. This prevents runaway database queries when the tab is left open unattended. Additionally, there is a new 1 minute refresh option for even less frequent polling.
-
Perform stats counts less frequently for large states to minimize database load. This trades realtime fidelity for performance by backing off of counts that can’t be accelerated by an index. State counts are displayed as suffixed estimates, e.g.
41k
or43.1k
to compensate. -
Fetch only fields that may change when refreshing the jobs table or details view.
-
Use the built-in
cancel_all
/retry_all
from Oban to accelerate bulk operations.
Enhancements
-
Export
locals_without_parens
foroban_dashboard/1,2
in.formatter.exs