This commit is contained in:
Mateusz Gruszczyński
2026-06-16 22:28:39 +02:00
parent a73aeb5544
commit d5fa689dad
9 changed files with 30 additions and 8 deletions
+12 -1
View File
@@ -385,9 +385,20 @@ def mark_tick(state: ProfilePollState, started_at: float, active: bool, ok: bool
return dict(state.stats)
def snapshot(profile_id: int) -> dict:
def snapshot(profile_id: int, settings: dict | None = None) -> dict:
state = state_for(profile_id)
effective_settings = normalize_settings(settings) if settings is not None else get_settings(profile_id)
data = dict(state.stats or {"profile_id": int(profile_id), "tick_count": state.tick_count})
runtime_ready = bool(state.stats) or state.tick_count > 0
# Note: Snapshot includes saved intervals even before the first runtime tick so diagnostics never render as an empty zero-only panel.
data.setdefault("runtime_ready", runtime_ready)
data.setdefault("adaptive_enabled", bool(effective_settings.get("adaptive_enabled", DEFAULTS["adaptive_enabled"])))
data.setdefault("adaptive_mode", state.adaptive_mode if runtime_ready else ("fixed" if not data.get("adaptive_enabled") else "waiting"))
data.setdefault("live_stats_interval_seconds", effective_live_interval(effective_settings, state))
data.setdefault("torrent_list_interval_seconds", effective_list_interval(effective_settings, state))
data.setdefault("configured_min_interval_seconds", MIN_POLL_INTERVAL_SECONDS)
if not runtime_ready:
data["last_ok"] = None
# Note: Snapshot always exposes split-poller counters, even before the first post-cleanup tick rebuilds full stats.
data.update({
"live_poll_count": state.live_poll_count,