Web UI¶
dccd ships a small web UI — a dashboard to watch collection, browse stored data, run backfills and control streams without touching the CLI. It is a pure client of the HTTP API: every action is just an API call, so nothing is hidden from scripting.
Running it¶
dccd ui # UI + API only (no scheduler)
dccd start # full daemon: scheduler + streams + UI
dccd ui --host 0.0.0.0 --port 8080
Both read settings.ui_host / ui_port from the config. Requires the extra:
pip install "dccd[daemon,ui]". Then open http://127.0.0.1:8080.
To protect it, set settings.ui_auth_token — the API then requires a bearer
token and the UI injects it automatically. For untrusted networks, keep the
default 127.0.0.1 bind and/or put it behind a reverse proxy.
Pages¶
Page |
What it shows |
|---|---|
Dashboard |
Active runs with a live progress bar, recent run history, stream status, and a datasets summary. |
Inventory |
Every dataset on disk under |
Jobs |
Configured jobs grouped by exchange. Run now / Run all trigger one-shot backfills; Start / Stop control live streams. |
Config |
Edit |
Logs |
A live console (SSE) that streams a running job’s log/progress/status, plus the recent-runs history with each run’s log tail. |
Storage |
On-disk dataset breakdown by exchange and the v2→v3 migration tool (dry-run first). |
The backfill modal¶
Launching a backfill opens a modal that polls the run and shows live
progress (percentage by time covered, the timestamp reached, and the row
count). A long run — e.g. a day of trades is millions of rows — can be cancelled
with Stop, which keeps everything already collected. The default last
start uses a bounded look-back (short for trades) so a first click can’t trigger
a runaway download.
Note
Inventory lists all data on disk, independent of your configured jobs
(e.g. imported or migrated history). That is by design; the ● job tag
marks the datasets actually covered by a job.