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 :
falseou 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êmeunhandledRejectionetuncaughtException: chaque erreur passe parKino.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.