Claude: persiste le backoff OAuth sur disque (un redéploiement ne re-sollicite plus le 429)
Le backoff anti-429 du refresh OAuth vivait uniquement en mémoire : chaque redéploiement le remettait à zéro et re-sollicitait IMMÉDIATEMENT l'endpoint de refresh rate-limité, entretenant le 429 qu'on cherche justement à laisser retomber. Persiste backoff_until + le palier exponentiel (failures) sur /data (claude_oauth_state.json), écriture atomique best-effort à la manière du cache trackers. Chargé une fois par process en tête de fetch_usage, sauvé à chaque échec et effacé à chaque succès. Un token frais court-circuite de toute façon le backoff, donc un re-login isolé débloque immédiatement même si une fenêtre court. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -73,6 +73,13 @@ class Config:
|
||||
claude_refresh_timeout: int = field(
|
||||
default_factory=lambda: int(_get("MONITORINK_CLAUDE_REFRESH_TIMEOUT", "45"))
|
||||
)
|
||||
# État du backoff OAuth (anti-429) persisté sur disque. Sans ça, le backoff vit uniquement en
|
||||
# mémoire : chaque redéploiement le remet à zéro et re-sollicite IMMÉDIATEMENT l'endpoint de
|
||||
# refresh rate-limité, entretenant le 429 qu'on essaie justement de laisser retomber. Le
|
||||
# persister fait survivre la fenêtre (et le palier exponentiel) aux rebuilds. Volume /data.
|
||||
claude_state_file: str = field(
|
||||
default_factory=lambda: _get("MONITORINK_CLAUDE_STATE_FILE", "/data/claude_oauth_state.json")
|
||||
)
|
||||
|
||||
# --- Météo (Open-Meteo, sans clé) ---
|
||||
weather_lat: float = field(default_factory=lambda: float(_get("MONITORINK_LAT", "48.8566")))
|
||||
|
||||
Reference in New Issue
Block a user