Живые обновления прогресса и раздел «Раздача» (live-status)
Воркер ведёт 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>
This commit is contained in:
+13
-1
@@ -44,7 +44,10 @@ type Client struct {
|
||||
mu sync.Mutex // сериализует логин
|
||||
}
|
||||
|
||||
// Torrent — подмножество полей /torrents/info, нужное jellybit.
|
||||
// Torrent — подмножество полей /torrents/info, нужное jellybit. Помимо полей
|
||||
// для машины состояний и сопоставления несёт живую телеметрию (скорости, ETA,
|
||||
// статистика раздачи) — её собирает снимок воркера для веб-UI; все эти поля
|
||||
// приходят в том же ответе, отдельного вызова не нужно.
|
||||
type Torrent struct {
|
||||
Hash string `json:"hash"`
|
||||
Name string `json:"name"`
|
||||
@@ -58,6 +61,15 @@ type Torrent struct {
|
||||
AddedOn int64 `json:"added_on"`
|
||||
InfohashV1 string `json:"infohash_v1"`
|
||||
InfohashV2 string `json:"infohash_v2"`
|
||||
|
||||
// Живая телеметрия (для снимка воркера и веб-UI).
|
||||
Dlspeed int64 `json:"dlspeed"` // скорость загрузки, байт/с
|
||||
Upspeed int64 `json:"upspeed"` // скорость отдачи, байт/с
|
||||
Eta int64 `json:"eta"` // оценка до завершения, с (8640000 ≈ ∞)
|
||||
Ratio float64 `json:"ratio"` // рейтинг отдачи (может быть -1 = ∞/н/д)
|
||||
NumSeeds int `json:"num_seeds"` // подключённые сиды
|
||||
NumLeechs int `json:"num_leechs"` // подключённые личи (пиры)
|
||||
Uploaded int64 `json:"uploaded"` // отдано всего, байт
|
||||
}
|
||||
|
||||
// File — элемент /torrents/files: путь файла относительно save_path
|
||||
|
||||
Reference in New Issue
Block a user