Im Lebenszyklus eines Span bieten wir mehrere Möglichkeiten, dessen internen Zustand zu aktualisieren oder zu ändern. Hooks sind der Mechanismus dafür. Mithilfe speziell geformter Funktionen können wir jeden ausgehenden Span mit zusätzlichen Informationen anreichern, bevor er an die Push-API gesendet wird.
Beide Arten von Hooks bestehen aus einem Array von zusammengesetzten Funktionen, die von rechts nach links angewendet werden. Mit anderen Worten: Die zuletzt hinzugefügten Hooks werden immer zuerst angewendet.
Wenn ein Span an appsignal.send() übergeben wird oder ein Error an appsignal.sendError(), werden Hooks in der folgenden Reihenfolge auf den Span angewendet:
- Decorators
- Optionale
tags- oder namespace-Argumente an appsignal.send()
- Overrides
Hooks werden in der Regel in einem Plugin angewendet.
Wenn ein Error an appsignal.sendError() übergeben wird, wird intern ein
Span-Objekt erstellt, sodass Hooks weiterhin wie üblich darauf angewendet werden können.
Decorators
Es kann notwendig sein, einem Span auf globaler Ebene zusätzlichen Kontext hinzuzufügen, sodass alle Anfragen diese Information standardmäßig enthalten. Dafür können Decorators verwendet werden.
Overrides
Overrides sind die letzte Möglichkeit, Daten in einem Span zu aktualisieren, bevor er an die Push-API gesendet wird. Sie könnten beispielsweise wählen, alle Benutzerdaten in einem Override aus Spans zu entfernen.
Eigene Hooks schreiben
Hooks sind im Wesentlichen Funktionen, die einen Span als einziges Argument nehmen und denselben Span zurückgeben. Während der Ausführung der Funktion können Änderungen am Span vorgenommen werden, wir empfehlen jedoch, keine weiteren Nebenwirkungen einzuführen.
Hier ist ein Beispiel, wie Sie einen Hook zum Appsignal-Objekt hinzufügen können:
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]"),
});
});
Auch Plugins können Decorators und Overrides hinzufügen. Wenn Sie einen wiederverwendbaren Hook erstellen möchten, der beispielsweise in einem npm-Modul verpackt werden kann, empfehlen wir, die Plugin-Schnittstelle zu nutzen, um ihn zu registrieren.