Naar hoofdinhoud gaan
Een Span is de naam van het object dat we gebruiken om gegevens vast te leggen over een fout en de bijbehorende context. Het is ontworpen om vergelijkbaar te zijn met, maar niet precies gelijk aan, de Span uit de specificatiestandaard van OpenTelemetry.

Een nieuwe Span aanmaken

Een Span kan worden aangemaakt door appsignal.createSpan() aan te roepen, wat een nieuw Span-object initialiseert met de standaardopties die u heeft meegegeven bij het initialiseren van het Appsignal-object.
const span = appsignal.createSpan();
De methode createSpan() kan ook een functie als parameter accepteren, waarmee u tegelijkertijd met het aanmaken van de Span de bijbehorende gegevens kunt definiëren.
const span = appsignal.createSpan((span) => {
  return span.setTags({
    tag: "value",
  });
});
Span’s kunnen niet worden genest, en er kunnen niet meerdere Span’s tegelijk aan appsignal.send() worden doorgegeven. We raden aan om Promise.all te gebruiken voor gelijktijdige send-bewerkingen.
const span1 = appsignal.createSpan();
const span2 = appsignal.createSpan();

Promise.all([appsignal.send(span1), appsignal.send(span2)]);

Een Span bijwerken

Nadat een Span is aangemaakt, kunt u er gegevens aan toevoegen met behulp van methoden op het Span-object:
const span = appsignal.createSpan();
span.setTags({ tag: "value" });

console.log(span.serialize().tags); // { tag: "value" }
Elke methode die de Span wijzigt, retourneert this, waardoor u methoden aan elkaar kunt koppelen:
const span = appsignal.createSpan();

span.setTags({ tag: "value" }).setError(new Error("test error"));

console.log(span.serialize().tags); // { tag: "value" }
console.log(span.serialize().error); // { name: "Error", message: "test error", backtrace: [...] }

span.setAction(name: string)

Stelt de action van de huidige Span in. De action mag nooit een lege string zijn; deze kan ofwel undefined zijn ofwel een niet-lege string. Een actienaam wordt gebruikt om de locatie van een bepaald foutmonster en performance-probleem te identificeren.

span.setNamespace(name: string)

Stelt de namespace van de huidige Span in. Namespaces zijn een manier om error-incidenten, performance-incidenten en host metrics in uw app te groeperen.

span.setError(error: Error | object)

Stelt de error van de huidige Span in. Het Error-object heeft een name-, message- en backtrace-eigenschap. Zorg ervoor dat u als name alleen iets gebruikt dat het type van de fout beschrijft. AppSignal groepeert fouten op basis van deze naam. U kunt alles wat u wilt in de message opnemen. Wanneer een Error-object aan de methode setError wordt doorgegeven, wordt de stack-eigenschap genormaliseerd en omgezet in een array van strings, waarbij elke string een regel in de stacktrace vertegenwoordigt. Voor consistentie met onze andere integraties wordt stack hernoemd naar backtrace.

span.setTags(tags: object)

Voegt tags toe aan de huidige Span. De huidige tags worden samengevoegd met het tags-object dat als parameter wordt doorgegeven.

span.setParams(params: object)

Voegt params toe aan de huidige Span. De huidige params worden samengevoegd met het params-object dat als parameter wordt doorgegeven.
Als u een versie vóór 1.3.28 gebruikt, mag het params-object geen geneste objecten bevatten.

span.serialize()

Retourneert de inhoud van een Span als een object.

Een Span naar AppSignal sturen

Wanneer u klaar bent met het toevoegen van gegevens aan de Span, kan deze aan appsignal.send() worden doorgegeven om naar onze API te worden gepusht.
const span = appsignal.createSpan((span) => {
  return span.setError(new Error("test error"));
});

appsignal.send(span);
De methode send() verschilt van de methode sendError() doordat er een Span als parameter kan worden doorgegeven die ofwel direct naar de API wordt gepusht ofwel, in het geval van een netwerkfout, aan de wachtrij wordt toegevoegd om later opnieuw te proberen. Zodra de Span aan appsignal.send() is doorgegeven, worden eventuele Hooks in de volgende volgorde op de Span toegepast:
  • Decorators
  • Optionele tags- of namespace-argumenten voor appsignal.send()
  • Overrides

Over de Retry Queue

Als om wat voor reden dan ook het pushen van een fout naar de API mislukt (bijvoorbeeld als de netwerkverbinding niet werkt), wordt het Span-object waartoe deze behoort in de retry queue geplaatst. Standaard worden verzoeken 5 keer opnieuw geprobeerd met exponentiële backoff. Als het verzoek slaagt, wordt de bijbehorende Span uit de wachtrij verwijderd. Zodra de retry-limiet is bereikt, worden eventuele Span’s die nog in de wachtrij staan verwijderd.
Er is momenteel geen caching geïmplementeerd voor de retry queue, wat betekent dat als een Span in de wachtrij staat op het moment dat de gebruiker uw applicatie verlaat, die Span ook wordt verwijderd.