Database + Redis pubsub progress bridge for web jobs.
Source: web/backend/tasks/progress.py
JobProgressReporter subscribes to PipelineEvent callbacks and bridges them to:
job:{id}:progress channelThe Events Router subscribes to the same Redis channel and streams events to the browser via SSE.
JobProgressReporterJobProgressReporter(job_id: str, db_session)
On each PipelineEvent:
progress_currentprogress_totalprogress_phaselipsync_progress in config_json when a page_done event includes per-page timingjob:{job_id}:progressOn terminal events (completed/failed):
| Method | Behavior |
|---|---|
is_cancelled() |
Reads job:{job_id}:cancel from Redis |
clear_cancel() |
Deletes stale stop flags after a task exits |
publish_terminal() |
Emits a final progress event using the same DB/Redis path |
Pipeline Runner
│ emits PipelineEvent
▼
JobProgressReporter
├── UPDATE Job SET progress_current=..., progress_phase=...
└── PUBLISH job:{id}:progress → Redis
│
▼
Events Router
│ SSE
▼
Browser
useJobProgress Hook
Progress Reporter
├── Redis (pubsub publish)
├── Web Database (sync session)
├── DB Models (Job)
├── Schemas (ProgressEvent)
├── Pipeline Events (PipelineEvent callback)
└──▶ consumed by Pipeline Tasks