Dans le cycle de vie d’un Span, nous fournissons plusieurs occasions de mettre à jour ou modifier son état interne. Les hooks sont le mécanisme prévu à cet effet. À l’aide de fonctions ayant une forme spécifique, nous pouvons enrichir tout Span sortant avec des informations supplémentaires avant qu’il soit envoyé à l’API Push.
Les deux types de hooks sont un tableau de fonctions composées qui sont appliquées de droite à gauche. Autrement dit, les hooks ajoutés en dernier sont toujours les premiers à être appliqués.
Lorsqu’un Span est passé à appsignal.send(), ou qu’une Error est passée à appsignal.sendError(), les hooks sont appliqués au Span dans l’ordre suivant :
- Décorateurs
- Arguments optionnels
tags ou namespace de appsignal.send()
- Surcharges
Les hooks sont généralement appliqués dans un plugin.
Lorsqu’une Error est passée à appsignal.sendError(), un objet Span
interne est créé, ce qui signifie que les Hooks peuvent toujours lui être appliqués normalement.
Décorateurs
Il peut être nécessaire d’ajouter du contexte supplémentaire à un Span au niveau global, afin que toutes les requêtes incluent par défaut ces informations. Les décorateurs peuvent être utilisés pour cela.
Surcharges
Les surcharges sont la dernière opportunité possible de mettre à jour les données dans un Span avant qu’il soit envoyé à l’API Push. Par exemple, vous pouvez choisir de nettoyer toutes les données utilisateur des Spans dans une surcharge.
Écrire votre propre Hook
Les hooks sont, essentiellement, des fonctions qui prennent un Span comme unique argument, puis renvoient le même Span. Pendant l’exécution de la fonction, des modifications peuvent être apportées au Span, mais nous suggérons de n’introduire aucun autre effet de bord.
Voici un exemple de la façon dont vous pouvez ajouter un Hook à l’objet Appsignal :
appsignal.addDecorator((span) => {
return span.setTags({ customTag: "value" });
});
appsignal.addOverride((span) => {
// scrub e-mail addresses
const { tags } = span.serialize();
return span.setTags({
text: tags.text.replace(/^[^\s@]+@[^\s@]+\.[^\s@]+$/, "[SCRUBBED]"),
});
});
Les plugins peuvent également ajouter des décorateurs et des surcharges. Si vous cherchez à créer un hook réutilisable, qui peut être empaqueté dans un module npm, par exemple, nous vous recommandons d’utiliser l’interface de plugin pour l’enregistrer.