v1 · Live job log

Watching restic chug.

The screen an operator stares at when something is in flight. Header identifies the job (kind · host · status). A live progress bar shows the bytes-to-go signal restic emits. The log itself is the focus: monospace, tight line-height, color reserved for the few lines that matter — events and stderr.

Backed by WS /api/jobs/{id}/stream (P1-21 remainder). Auto-scrolls until the operator scrolls away; a “follow” pill appears when they’ve scrolled up so they can re-attach.

State A · running
restic-manager
v0.1.0-alpha
steve@dcglab
Dashboard/prod-db-01/job 01KQH…E59B

backup · prod-db-01

running
job 01KQH7DZJ8M5N3DH277E59B · started 3m 18s ago by steve@dcglab
38% · 1.4 GB of 3.7 GB · 8,124 files of 21,402
42 MB/s · ETA 2m 14s

Stream

following · auto-scroll on · 1,247 lines
11:43:21.039EVENT{"message_type":"status","percent_done":0.000,"total_files":21402,"files_done":0,"total_bytes":3958374400,"bytes_done":0}
11:43:21.412OUTscan finished in 0.371s
11:43:21.504EVENT{"message_type":"status","percent_done":0.001,"total_files":21402,"files_done":12,"bytes_done":1048576}
11:43:22.512EVENT{"message_type":"status","percent_done":0.020,"files_done":418,"bytes_done":81256000}
11:43:23.521EVENT{"message_type":"status","percent_done":0.062,"files_done":1287,"bytes_done":253640000}
11:43:24.530EVENT{"message_type":"status","percent_done":0.108,"files_done":2289,"bytes_done":444121600}
11:43:25.541EVENT{"message_type":"status","percent_done":0.155,"files_done":3267,"bytes_done":637534720}
11:43:25.812ERRwarn: file changed during read: /var/lib/postgresql/13/main/pg_wal/000000010000007800000042
11:43:26.554EVENT{"message_type":"status","percent_done":0.198,"files_done":4187,"bytes_done":815874048}
11:43:27.566EVENT{"message_type":"status","percent_done":0.241,"files_done":5108,"bytes_done":993951744}
11:43:28.580EVENT{"message_type":"status","percent_done":0.284,"files_done":6029,"bytes_done":1172029440}
11:43:29.594EVENT{"message_type":"status","percent_done":0.327,"files_done":6948,"bytes_done":1349838336}
11:43:30.609EVENT{"message_type":"status","percent_done":0.358,"files_done":7596,"bytes_done":1475174400}
11:43:31.625EVENT{"message_type":"status","percent_done":0.380,"files_done":8124,"bytes_done":1503870976}
11:43:32.122···
State B · completed (succeeded)
restic-manager
v0.1.0-alpha
steve@dcglab
Dashboard/prod-db-01/job 01KQH…E59B

backup · prod-db-01

succeeded
job 01KQH7DZJ8M5N3DH277E59B · finished 11:48:42 (5m 21s)
Bytes added
142 MB
of 3.7 GB processed
Files
21,402
187 new · 42 changed
Throughput
42 MB/s
avg over 5m 21s
Snapshot
91bbc80d
added to repo

Stream · complete

2,418 lines
11:48:38.044EVENT{"message_type":"status","percent_done":0.987,"files_done":21127,"bytes_done":3905990656}
11:48:39.058EVENT{"message_type":"status","percent_done":0.998,"files_done":21358,"bytes_done":3950182400}
11:48:40.064OUTprocessed 21402 files, 3.689 GiB in 5:19
11:48:41.022OUTsnapshot 91bbc80d saved
11:48:42.108EVENT{"message_type":"summary","files_new":187,"files_changed":42,"files_unmodified":21173,"data_added":148908544,"total_files_processed":21402,"total_bytes_processed":3958374400,"snapshot_id":"91bbc80d4a17ed718462a26f3e6ad72d0cde7aa9fbf0629efaac1eaa943f5665","total_duration":319.234}
11:48:42.337ENDrestic exited 0 · success
State C · failed
restic-manager
v0.1.0-alpha
steve@dcglab
Dashboard/build-runner/job 01KQH…9F8C

backup · build-runner

failed
job 01KQH3FX9F8C… · finished 10:53:18 (1.4s) · exit code 1
Failure

unable to acquire lock — the repo at rest:https://restic.unraid.lab/build-runner/ is locked by another operation.

Most likely a stale lock from a previous run that didn't clean up. Run unlock on this host's repo, then retry the backup.
10:53:17.001OUTopening repository at rest:https://restic.unraid.lab/build-runner/
10:53:17.388OUTrepository f4b81ec7 opened
10:53:17.602OUTcreated new cache in /var/lib/restic-manager/cache
10:53:18.211ERRFatal: unable to create lock in backend: repository is already locked exclusively by PID 12047 on build-runner by root (UID 0, GID 0) lock was created at 2026-05-01 10:39:14 (14m18s ago) storage ID a4f1b3d8
10:53:18.298ENDrestic exited 1 · failed