SPB Git forge

spb/api-ka

Public

API-KA — plateforme centrale : collecte quotidienne des 8 services KA, historisation append-only et API publique sur www.api-ka.com

48commits 1branches 0releases
5.9 MBsize
maindefault branch
20 days agolast push
Python 60.9% HTML 21% TypeScript 7.3% JavaScript 5.2% CSS 4.8% Shell 0.8%

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>
Simon-Pierre Boucher committed 1 mo ago (Aug 23, 2026) parent 3fe56d0

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