Production-ready JDownloader monitor with modern web UI and Discord webhooks.
1.5K
v0.0.2 continues the clean rebuilt foundation of the original monitor with stronger webhook safety checks, Docker Hub README sync, a refreshed UI, and version-aware Discord footer rendering.
The previous implementation was a compact proof of concept:
app.py loaded env vars, logged into MyJDownloader, polled device links in a loop, derived a few counters, and posted a Discord embed on every cycle.That analysis led to a clean rebuild instead of an incremental refactor.
The new structure separates concerns into testable layers:
jd_monitor/services/myjd.py: MyJDownloader integration and normalization.jd_monitor/services/poller.py: background polling, defensive retry/backoff behavior, and event classification.jd_monitor/services/themes.py: Discord rendering and preview generation for built-in themes.jd_monitor/services/notifications.py: webhook delivery, dedupe, retry handling, and audit persistence.jd_monitor/repo_utils.py + jd_monitor/db.py: SQLite-backed config, device state, and notification history.jd_monitor/api.py: FastAPI routes for GUI, preview, test-send, logs, dashboard data, and health.jd_monitor/templates + jd_monitor/static: server-rendered modern web UI.FastAPI gives typed models, clean API boundaries, and lightweight async background work. The frontend is server-rendered HTML with custom JS/CSS instead of a Node build pipeline because this keeps Docker deployment smaller and simpler for self-hosters while still delivering a modern interactive GUI.
minimal, modern, compact, detailed, status-card, high-contrast, homelabThe rebuilt UI includes:
services:
jd-monitor:
build: .
ports:
- "8080:8080"
environment:
JD_MONITOR_DATA_DIR: /data
MYJD_EMAIL: [email protected]
MYJD_PASSWORD: change-me
MYJD_DEVICES: HomeJD,ServerJD
WEBHOOK_URL: https://discord.com/api/webhooks/xxx/yyy
INTERVAL: "300"
LANG: en
volumes:
- ./data:/data
restart: unless-stopped
Open http://localhost:8080.
python -m venv .venv
. .venv/bin/activate
pip install -e .[dev]
uvicorn jd_monitor.main:app --reload --port 8080
JD_MONITOR_DATA_DIR.examples/config.example.json.WEBHOOK_URL, MYJD_EMAIL, MYJD_PASSWORD, MYJD_DEVICES, INTERVAL, and LANG are imported into the new config automatically.GET /health/liveGET /health/ready/data/app.logFrom the old version to v2:
MYJD_EMAIL, MYJD_PASSWORD, MYJD_DEVICES, WEBHOOK_URL, INTERVAL, and LANG variables for the first startup.Run checks locally with:
python -m compileall jd_monitor
pytest
The repository README is synced to Docker Hub automatically from main via GitHub Actions so Docker Hub always shows the current project documentation.
Content type
Image
Digest
sha256:c3e3105c6…
Size
68.9 MB
Last updated
5 months ago
docker pull kroeberd/jdownloader-docker-monitor