Воркер ведёт in-memory снимок телеметрии раздач (прогресс, скорость, ETA, рейтинг, сиды/пиры, отдано) под отдельным RWMutex, обновляя его на каждом тике поллинга сразу после построения byHash — без лишних вызовов qBittorrent и без хранения в БД (волатильно). qbt.Torrent дополнен полями телеметрии. Веб-UI читает снимок через узкий контракт LiveStatus: карточки активных загрузок показывают живой прогресс-бар (htmx-поллинг фрагмента every 3s, точечно — без сброса фильтров), на странице загрузки появилась секция «Раздача» для сидирующих задач. Начальный кадр рендерится сразу со значениями; при отсутствии данных UI деградирует штатно. Капабилити live-status (OpenSpec), web-ui дополнен. Change заархивирован. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
Why
Сейчас прогресс скачивания в веб-UI виден только при ручной перезагрузке страницы, а статистики раздачи (рейтинг, сиды/пиры, отдано) нет вовсе — в фазе 1 секцию намеренно отложили до появления живых данных. Воркер уже опрашивает qBittorrent каждые несколько секунд и держит свежее состояние каждой задачи — нужно лишь сохранить эту телеметрию в памяти и показать её в UI без перезагрузки. Это «однооконный» сервис: смотреть, как идёт загрузка, должно быть видно вживую.
What Changes
- Воркер на каждом тике поллинга сохраняет in-memory снимок телеметрии всех известных раздач (прогресс, скорость загрузки, ETA + для раздачи: рейтинг, число сидов/пиров, отдано, скорость отдачи). Снимок волатильный, в БД не пишется.
qbt.Torrentдополняется полями телеметрии (dlspeed,eta,ratio,num_seeds,num_leechs,uploaded,upspeed) из/torrents/info— лишний сетевой вызов не добавляется, они приходят в том же ответе.httpapiполучает новую зависимость-источник телеметрии и фрагмент-роут; активные карточки на главной поллят свой прогресс через htmx и обновляют прогресс-бар/скорость/ETA на месте, без перезагрузки страницы и без сброса клиентских фильтров.- На странице загрузки
/download/{id}появляется секция «Раздача» с живой статистикой (рейтинг, сиды/пиры, отдано, скорость отдачи) для задач, чей торрент сидирует. - htmx, который уже вендорится и грузится, впервые задействуется (
hx-*).
Capabilities
New Capabilities
live-status: живая телеметрия загрузок и раздач — воркер как единственный сэмплер qBittorrent ведёт in-memory снимок прогресса/скорости/ETA и статистики раздачи; веб-UI отображает её в реальном времени (поллинг фрагментов) без перезагрузки страницы и без хранения в БД.
Modified Capabilities
web-ui: страница загрузки/download/{id}получает секцию живой статистики раздачи (в фазе 1 явно вынесена из scope «вводится вместе с живыми обновлениями»); карточки активных загрузок на главной показывают живой прогресс-бар через htmx-поллинг.
Impact
- Код:
internal/qbt(поляTorrent),internal/worker(снимок + геттер телеметрии под отдельным RWMutex),internal/httpapi(dep-интерфейсLiveStatus, фрагмент-роут, секция раздачи, прогресс во view),cmd/jellybit(инъекция снимка вhttpapi.Deps),web/templates(прогресс-бар на карточках + htmx-атрибуты, секция «Раздача»),web/static/cssпри необходимости (стили прогресс-бара уже есть в дизайн-системе). - БД: изменений нет — телеметрия волатильна, миграций/ER не требуется.
- Внешние вызовы: дополнительных нет (расширяется только разбор
существующего ответа
/torrents/info). - Безопасность: телеметрия не содержит секретов; контракт чтения снимка изолируется так, чтобы будущий апгрейд доставки до SSE не ломал API.