Aller au contenu principal

Référence API Surveillance des fournisseurs & Administration

Les routes de surveillance rapportent ce que la couche de validation et le canari quotidien ont observé sur chaque fournisseur de fondamentaux. Les routes d'administration gèrent le cache et la base de données de votre instance.

Les routes qui modifient quelque chose (POST ici) exigent une clé à accès complet.


GET /health​

Publique (sans clé). État du service, fournisseurs chargés au démarrage, état du cache et durées de vie.

{
"status": "healthy",
"service": "FonRex API",
"timestamp": "2026-10-08T16:34:42.235390",
"yfinance_available": true,
"providers": { "loaded": 14, "unavailable": [] },
"cache": { "enabled": true, "status": "connected", "ttl_seconds": { "eod": 86400, "...": "..." } }
}

providers.unavailable nomme un fournisseur qui n'a pas pu être importé (dépendance manquante) : il est ignoré par toutes les requêtes jusqu'à correction.


GET /health/providers​

Synthèse de la santé des fournisseurs, lue dans Redis (écrite par le canari, 1 heure) ou en base.

{
"checked_at": "2026-10-08T06:02:10Z",
"total_providers": 14,
"healthy": 13,
"degraded": 1,
"down": 0,
"providers": [
{
"name": "ZoneBourse",
"is_healthy": true,
"success_rate_7d": 0.98,
"avg_latency_ms": null,
"last_check": null,
"canary_passed": null,
"active_alerts": 0,
"status_label": "OK"
}
]
}

status_label vaut OK (taux de succès ≥ 85 %), DEGRADED (≥ 70 %) ou DOWN. Quand la synthèse vient de Redis, avg_latency_ms, last_check et canary_passed valent null et active_alerts vaut 0. Sur une nouvelle instance, avant la première exécution du canari, la liste est vide.

GET /health/providers/{provider_name}​

Détails d'un fournisseur sur days jours (7 par défaut) : status, success_rate_7d, success_rate_30d, avg_latency_ms, daily_stats, recent_failures et active_alerts.


GET /health/alerts​

ParamètreTypeDéfautDescription
severitystring—warning ou critical
provider_namestring—Un seul fournisseur
include_resolvedbooleanfalseInclure les alertes résolues
limitinteger50Nombre maximal d'alertes

Types d'alertes levées par le canari : canary_failed (une valeur hors de sa plage attendue) et high_outlier_rate (taux de succès sous ALERT_SUCCESS_RATE_WARNING / ALERT_SUCCESS_RATE_CRITICAL). Voir Alertes.

POST /health/alerts/{alert_id}/resolve​

Résoudre une alerte à la main. La note est un paramètre de requête (query) :

curl -s -X POST -H "X-API-KEY: $FONREX_API_KEY" \
"http://localhost:5000/health/alerts/42/resolve?resolution_note=Parser%20fixed"
{ "status": "resolved", "alert_id": 42, "resolved_at": "2026-10-08T10:12:00+00:00" }

Une alerte déjà résolue répond {"status": "already_resolved"}, une alerte inconnue 404.


POST /health/canary/run​

Lancer une exécution du canari en arrière-plan, pour tous les fournisseurs ou pour provider_name seulement. Répond {"status": "queued", "provider": "all", "message": "..."}.

GET /health/canary/history​

Les vérifications canari passées. Paramètres : provider_name, ticker, days (7), limit (100).

GET /health/stats​

Statistiques de validation des 7 derniers jours :

{
"period": "last_7_days",
"total_values_validated": 0,
"total_valid": 0,
"total_outliers": 0,
"total_out_of_range": 0,
"total_nulls": 0,
"overall_quality_score": null,
"most_reliable_providers": [],
"least_reliable_providers": [],
"fields_most_often_invalid": []
}

Administration du cache​

MéthodeRouteDescription
GET/cache/statsVersion et mémoire de Redis, durée de vie de chaque catégorie de cache, tickers en cache
POST/cache/clearSupprimer les réponses de fin de journée en cache (clés eod:* uniquement)
POST/cache/clear/{ticker}Supprimer les réponses de fin de journée en cache d'un ticker (eod:{TICKER}:*). Le paramètre period ne supprime rien pour l'instant : les clés ont plus de segments que le motif qu'il construit

Les autres catégories (fondamentaux, indicateurs, actualités, DCF…) expirent d'elles-mêmes ; une ingestion invalide les réponses dérivées des prix de son ticker.

Administration de la base de données​

MéthodeRouteDescription
GET/database/statsPrix et tickers enregistrés, requêtes API des dernières 24 heures
GET/database/tickersChaque ticker ayant des prix : première et dernière date, nombre de barres
GET/database/ticker/{ticker}La même chose pour un ticker, avec son nombre de requêtes API
POST/database/cleanupSupprimer les prix plus anciens que days_to_keep jours et les journaux de plus de 30 jours

POST /database/cleanup prend un corps JSON {"days_to_keep": 730, "dry_run": false}. days_to_keep doit valoir 30 ou plus (730 par défaut). Une première ingestion récupère dix ans : comptez avant de supprimer avec dry_run, qui ne supprime rien et renvoie ce qu'une exécution réelle supprimerait.

curl -s -X POST -H "X-API-KEY: $FONREX_API_KEY" -H "Content-Type: application/json" \
-d '{"days_to_keep": 3650, "dry_run": true}' http://localhost:5000/database/cleanup

Le journal d'utilisation (usage_logs) a sa propre rétention, USAGE_LOG_RETENTION_DAYS.