Aller au contenu principal

Sentry

Kino s'appuie sur le SDK @sentry/node. Passez ses options dans sentry pour l'activer :

import Kino from '@fca.gg/kino';

Kino.init({
sentry: {
dsn: process.env.SENTRY_DSN,
environment: 'production',
},
packages: ['knex', 'mysql2'],
ANR: true,
});

Sans option sentry, Kino n'initialise pas Sentry et se contente de la console.

Réglages appliqués​

Kino initialise Sentry avec ces valeurs, que vos options sentry remplacent :

  • tracesSampleRate : 0.1 ;
  • maxBreadcrumbs : 5 ;
  • sendClientReports : false ;
  • les intégrations par défaut de Sentry sont désactivées, sauf si vous passez defaultIntegrations.

À la place, Kino active une sélection d'intégrations : erreurs chaînées, console (niveaux error, warn, debug, trace), requêtes fetch et HTTP, lignes de contexte, processus enfants et liste des modules.

Si vous passez vous-même integrations dans sentry, votre liste remplace celle de Kino.

Options​

  • packages : active les intégrations Sentry de ces bibliothèques. Valeurs reconnues : 'knex' et 'mysql2'.
  • ANR : détecte les blocages de la boucle d'événements (Application Not Responding) et les remonte avec la pile d'appels.
  • autoCaptureUnhandledRejections : voir ci-dessous.

Erreurs non gérées​

Deux comportements selon autoCaptureUnhandledRejections :

  • false ou absent : Kino ajoute les intégrations de Sentry pour les exceptions et les promesses non gérées. Elles se comportent comme le SDK par défaut.
  • true : Kino ne les ajoute pas, et écoute lui-même unhandledRejection et uncaughtException : chaque erreur passe par Kino.error(), donc est écrite dans la console et envoyée à Sentry s'il est configuré. Le processus n'est pas arrêté par Kino.

Accès au SDK​

Kino.Sentry renvoie le SDK Sentry, et Kino.withIsolationScope sa fonction du même nom, pour isoler le contexte d'une requête ou d'une interaction :

Kino.withIsolationScope((scope) => {
scope.setTag('guild', interaction.guildId ?? 'dm');
// les erreurs remontées ici portent le tag "guild"
});

Le type Scope de Sentry est réexporté par le paquet.