Skip to main content

Observabilité des erreurs (swing positions)

1. Contrat errorCode

  • Chaque activité d’échec exchange pertinente inclut context.errorCode (voir error-map.json).
  • Les logs structurés (logError) incluent les mêmes champs : errorCode, positionId, exchangePair, activityType, spec: swing-positions/observability-errors.

2. errorFlags sur swingPosition

En plus des flags d’intégrité existants (RELATIVE_AMOUNT_INCONSISTENT, TP2_BEFORE_TP1, etc.) :
FlagCondition
REPEATED_TP_EXCHANGE_ERRORAu moins 3 activités cumulées de type TP1_EXCHANGE_ERROR ou TP2_EXCHANGE_ERROR.
TP_EXCHANGE_ERROR_STALLEDAu moins 10 de ces mêmes activités (boucle de retry).
Objectif : requêtes Mongo / alertes sans parser tout le tableau activity.

3. BetterStack (recommandations)

Configurer des vues / alertes sur les champs JSON des logs applicatifs (adapter au format exact de ton shipper) :
  • Critique : errorFlags contient TP_EXCHANGE_ERROR_STALLED ou errorCode répété > N fois / 15 min pour un même positionId.
  • Warning : errorCode = EXCHANGE_MIN_AMOUNT ou flag REPEATED_TP_EXCHANGE_ERROR.
  • Réduction de bruit : ne pas alerter sur le même positionId + même errorCode plus d’une fois par heure sans variation (déduplication côté BetterStack si disponible).
Le mapping détaillé des requêtes suggérées est dans error-map.json.

4. Audits MongoDB (exemples)

À exécuter dans Compass, mongosh ou via MCP (lecture seule). Positions RUNNING avec erreurs TP répétées (aperçu) :
db.swingPosition.find(
  {
    status: "RUNNING",
    $or: [
      { errorFlags: "REPEATED_TP_EXCHANGE_ERROR" },
      { errorFlags: "TP_EXCHANGE_ERROR_STALLED" }
    ]
  },
  { _id: 1, status: 1, errorFlags: 1, updatedAt: 1 }
).limit(20);
Dernière activité = erreur TP (pipeline indicatif) :
db.swingPosition.aggregate([
  { $match: { status: "RUNNING" } },
  { $project: {
      last: { $arrayElemAt: ["$activity", -1] },
      _id: 1
  }},
  { $match: { "last.type": { $in: ["TP1_EXCHANGE_ERROR", "TP2_EXCHANGE_ERROR"] } } },
  { $limit: 50 }
]);
Les requêtes d’audit réutilisables sont dans scripts/mongo/README.md.

5. Fichiers liés