ARQ Optimus Dashboard
Real-time monitoring dashboard and CLI for ARQ Optimus async task queues.
Features
- Real-time Dashboard — Auto-refreshing web UI with queue stats, job listing, status filtering
- Job Cancellation — Cancel queued/running jobs via dashboard or CLI using ARQ's native
Job.abort() - Job Management CLI (
arq-optimus) — Stats, list, info, cancel, delete from the terminal - Key Prefix Support — Works with ARQ Optimus key-prefix isolation for multi-project Redis
- FastAPI Backend — High-performance async API with Redis connection pooling
- Redis Cloud Support — Works with SSL/TLS connections
Installation
pip install arq-optimus-dashboard
This automatically installs arq-optimus as a dependency.
Dashboard
Start the Dashboard
# Basic usage
arq-optimus-dashboard --redis-url redis://localhost:6379
# With Redis Cloud (SSL)
arq-optimus-dashboard --redis-url rediss://:password@redis.example.com:6380
# With key prefix (must match your worker's key_prefix)
arq-optimus-dashboard --redis-url redis://localhost:6379 --key-prefix myproject
# Custom host and port
arq-optimus-dashboard --redis-url redis://localhost:6379 --host 127.0.0.1 --port 9000
# With basic auth
arq-optimus-dashboard --redis-url redis://localhost:6379 --username admin --password secret
Open your browser to http://localhost:8910 to see the dashboard.
Dashboard Features
- Queue Statistics — Live counts of queued, running, completed, failed, cancelled jobs
- Status Filtering — Filter jobs by status (queued / running / completed / failed / cancelled)
- Job Details — Click any job to see arguments, result, timing, errors
- Cancel Jobs — Cancel queued or running jobs with one click
- Delete Jobs — Clean up completed/failed/cancelled job records
- Auto-Refresh — Updates every 5 seconds
CLI (arq-optimus)
Manage jobs from the terminal without a dashboard:
# Queue statistics
arq-optimus stats --redis-url redis://localhost:6379
# List jobs (optionally filter by status)
arq-optimus list --redis-url redis://localhost:6379
arq-optimus list --redis-url redis://localhost:6379 --status running
# Job details
arq-optimus info <job_id> --redis-url redis://localhost:6379
# Cancel a job
arq-optimus cancel <job_id> --redis-url redis://localhost:6379
# Delete a completed/failed job
arq-optimus delete <job_id> --redis-url redis://localhost:6379
Using Key Prefix
# Via CLI flag
arq-optimus stats --redis-url redis://localhost:6379 --key-prefix myproject
# Or via environment variable
export ARQ_OPTIMUS_KEY_PREFIX=myproject
arq-optimus stats --redis-url redis://localhost:6379
REST API
The dashboard exposes a REST API:
| Endpoint | Method | Description |
|---|---|---|
/api/status |
GET | Queue statistics |
/api/jobs |
GET | List jobs (query: ?status=running) |
/api/jobs/count |
GET | Job count by status |
/api/jobs/{job_id} |
GET | Job details |
/api/jobs/{job_id}/cancel |
POST | Cancel a job |
/api/jobs/{job_id} |
DELETE | Delete a job record |
Job Tracking Setup
For the dashboard to track job status transitions (running → completed/failed), wrap your worker functions with tracking:
# arq_worker.py
from arq.connections import RedisSettings
from arq_optimus_dashboard.tracking import create_tracking_wrapper
async def my_task(ctx, arg):
return f"processed {arg}"
class WorkerSettings:
functions = [create_tracking_wrapper(my_task)]
redis_settings = RedisSettings()
key_prefix = 'myproject'
Django Integration
# settings.py
ARQ_OPTIMUS_KEY_PREFIX = 'my_project'
# arq_worker.py
from django.conf import settings
from arq.connections import RedisSettings
from arq_optimus_dashboard.tracking import create_tracking_wrapper
async def scrape_task(ctx, url):
...
class WorkerSettings:
functions = [create_tracking_wrapper(scrape_task)]
redis_settings = RedisSettings(host='redis.example.com', port=6379)
key_prefix = getattr(settings, 'ARQ_OPTIMUS_KEY_PREFIX', '')
Compatibility
- Python: 3.9+
- Redis: 5, 6, 7+
- ARQ Optimus: 0.27.0+
Credits
Built on top of ARQ Optimus by Arpan Sahu.
License
MIT License
Metadata
Release files for arq-optimus-dashboard 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| arq_optimus_dashboard-0.1.0.tar.gz | 25.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arq_optimus_dashboard-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.5 kB
Release files / arq_optimus_dashboard-0.1.0.tar.gz
| Download URL | arq_optimus_dashboard-0.1.0.tar.gz |
|---|---|
| Size | 25.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4ca41918a187d58b8b27edffaed146781b696c673950a4ae18a20993f1684999
|
|
BLAKE2b-256 checksum How to use checksums |
fedbc46476fbd40c03c9465e2b3b0706063b3bc345d51814cc27851a4df41581
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.10.7
|
Release files / arq_optimus_dashboard-0.1.0-py3-none-any.whl
| Download URL | arq_optimus_dashboard-0.1.0-py3-none-any.whl |
|---|---|
| Size | 29.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7602e2117f20018f7f0fd28adfc95aa70b2a27b9c68147167f9f2e92a2d49ea8
|
|
BLAKE2b-256 checksum How to use checksums |
1aba2c18e887366c04145fc931ba5acc9ea42801b2c96c9d9b6d54cd8f2171e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.10.7
|
Security for arq-optimus-dashboard 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.