In de levenscyclus van een Span bieden we een aantal mogelijkheden om de interne toestand bij te werken of te wijzigen. Hooks vormen het mechanisme hiervoor. Met behulp van specifiek gevormde functies kunnen we elke uitgaande Span aanvullen met extra informatie voordat deze naar de Push API wordt verzonden.
Beide soorten hooks bestaan uit een array van samengestelde functies die van rechts naar links worden toegepast. Met andere woorden, de hooks die als laatste worden toegevoegd, worden altijd als eerste toegepast.
Wanneer een Span aan appsignal.send() wordt doorgegeven, of een Error aan appsignal.sendError(), worden hooks in de volgende volgorde op de Span toegepast:
- Decorators
- Optionele
tags- of namespace-argumenten bij appsignal.send()
- Overrides
Hooks worden over het algemeen in een plug-in toegepast.
Wanneer een Error wordt doorgegeven aan appsignal.sendError(), wordt er
intern een Span-object aangemaakt, waardoor hooks daar op de gebruikelijke
manier op kunnen worden toegepast.
Decorators
Het kan nodig zijn om op globaal niveau extra context aan een Span toe te voegen, zodat alle verzoeken standaard die informatie bevatten. Decorators kunnen daarvoor worden gebruikt.
Overrides
Overrides zijn de laatste mogelijkheid om gegevens in een Span bij te werken voordat deze naar de Push API wordt verzonden. Zo kunt u er bijvoorbeeld voor kiezen om in een override gebruikersgegevens uit Span’s te verwijderen.
Uw eigen Hook schrijven
Hooks zijn in wezen functies die een Span als enig argument accepteren en dezelfde Span weer retourneren. Tijdens de uitvoering van de functie kunnen wijzigingen aan de Span worden aangebracht, maar we raden af om andere neveneffecten te introduceren.
Hier is een voorbeeld van hoe u een Hook aan het Appsignal-object kunt toevoegen:
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]"),
});
});
Plug-ins kunnen ook decorators en overrides toevoegen. Als u een herbruikbare hook wilt maken die bijvoorbeeld in een npm-module kan worden verpakt, raden we aan om de plug-in-interface te gebruiken om deze te registreren.