fix: split HTTP connect/read timeouts (Jellyfin build + qBit stats)

Every HTTP client passed an integer timeout to requests, applying the same
value to BOTH connect and read phases. A slow Jellyfin /Items page or qBit
/sync/maindata blew through the 10s read budget → ReadTimeoutError. Split
into a (connect=5s, read=60s default) tuple via shared http_timeout() helper.
The media index build worker uses a 180s read floor. Existing services with
low timeout_seconds benefit from bumping to 60+.
This commit is contained in:
Developer
2026-07-10 11:43:07 +00:00
parent 9bc8fab971
commit 044d386ac7
17 changed files with 152 additions and 29 deletions
+13
View File
@@ -4,6 +4,19 @@ All notable changes to Manage. Breaking changes are marked with **BREAKING**.
## [Unreleased]
### Fixed — HTTP read timeouts
- Service HTTP clients now use a `(connect, read)` timeout tuple (connect 5s,
read 60s default) instead of a single integer, resolving `ReadTimeoutError`
on slow Jellyfin index builds and qBittorrent stats. The media index build
worker uses a 180s read floor so slow `/Items` pages on large libraries
don't time out mid-build.
- The shared `http_timeout()` helper (`clients/http_timeout.py`) decouples
connect (fail-fast on dead hosts) from read (generous for slow responses).
- Integration `timeout_seconds` defaults were raised from 5/10s to 15/60s.
- Existing services with a low `timeout_seconds` may benefit from bumping it
to 60+ via the service editor.
### **BREAKING** — Prometheus queries now route through Grafana gateway
- The `prometheus` service config changed: `base_url` is replaced by