monitoring: fenêtre de sync élargie (?syncs_since_h=6) pour la santé des connecteurs
Les apps sœurs n exposent par défaut que ~20 entrées de sync_log (~11 min d activité pour lou-ka et ses ~200 sources) alors que le poll est bi-horaire : la quasi-totalité des sources n était jamais observée, d où 195 fausses alertes stale le 2026-08-22 (82 sources lou-ka pourtant en pleine forme). Le poller demande désormais une fenêtre de 6 h ; les apps qui ignorent le paramètre gardent le comportement historique. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 changed file +10 −1
modified
src/monitoring/connector_health.py
+10 −1
@@ -54,6 +54,15 @@ APP_SOURCE = "_app" | ||
| 54 | 54 | |
| 55 | 55 | STATS_TIMEOUT_SECONDS = 5.0 |
| 56 | 56 | |
| 57 | +# Fenêtre de journal de sync demandée aux apps sœurs (heures). Les apps ne | |
| 58 | +# renvoient par défaut que ~20 entrées (~11 min d'activité pour lou-ka et ses | |
| 59 | +# ~200 sources) alors qu'on polle toutes les 2 h : la quasi-totalité des | |
| 60 | +# sources n'était jamais observée → fausses alertes « stale » de masse | |
| 61 | +# (incident du 2026-08-22 : 195 stale, dont 82 lou-ka qui synchronisaient | |
| 62 | +# pourtant avec succès). Les apps qui ne connaissent pas encore le paramètre | |
| 63 | +# l'ignorent (FastAPI) et gardent le comportement historique. | |
| 64 | +SYNC_WINDOW_HOURS = 6 | |
| 65 | + | |
| 57 | 66 | STATUS_OK = "ok" |
| 58 | 67 | STATUS_DEGRADED = "degraded" |
| 59 | 68 | STATUS_BROKEN = "broken" |
@@ -346,7 +355,7 @@ def _stats_url(service: str) -> str | None: | ||
| 346 | 355 | parts = urlsplit(source_url) |
| 347 | 356 | if not parts.scheme or not parts.netloc: |
| 348 | 357 | return None |
| 349 | − return f"{parts.scheme}://{parts.netloc}/api/stats" | |
| 358 | + return f"{parts.scheme}://{parts.netloc}/api/stats?syncs_since_h={SYNC_WINDOW_HOURS}" | |
| 350 | 359 | |
| 351 | 360 | |
| 352 | 361 | def _fetch_stats(url: str) -> dict[str, Any]: |
| 353 | 362 | |