npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

goblin-overwatch

v2.2.5

Published

Goblin Overwatch

Downloads

57

Readme

📘 Documentation du module goblin-overwatch

Aperçu

Le module goblin-overwatch est un système de surveillance et de rapport d'erreurs pour les applications Xcraft. Il permet de collecter, agréger et notifier les erreurs et comportements suspects qui se produisent dans l'application, via différents canaux comme Discord ou email.

Sommaire

Structure du module

  • Service principal : Un goblin singleton qui gère la collecte et l'envoi des erreurs
  • Backends : Implémentations pour différents canaux de notification (Discord, email)
  • Système de rapport : Formatage des erreurs pour les différents backends
  • Collecteur : Agrégation des erreurs avec possibilité de debounce

Fonctionnement global

Le module fonctionne selon deux modes principaux :

  • debounce : Les erreurs sont collectées et envoyées périodiquement (par défaut toutes les 30 secondes)
  • manual : Les erreurs sont collectées mais doivent être envoyées manuellement

Lorsqu'une erreur se produit dans l'application, elle peut être signalée à Overwatch via deux quêtes principales :

  • exception : Pour les erreurs critiques (exceptions)
  • hazard : Pour les comportements suspects ou potentiellement problématiques

Les erreurs sont ensuite formatées et envoyées aux canaux configurés (Discord, email) avec des informations contextuelles comme la pile d'appels, l'horodatage, et le nombre d'occurrences.

Exemples d'utilisation

Initialisation du service

// Dans une méthode d'un acteur Elf
async elfQuest() {
  // Initialiser le service avec un temps de debounce personnalisé (en ms)
  const overwatch = this.quest.getAPI('overwatch');
  await overwatch.init({debounceTime: 60000}); // Debounce de 60 secondes
}

Signaler une exception

// Dans une méthode d'un acteur Elf
async elfQuest() {
  const overwatch = this.quest.getAPI('overwatch');
  try {
    // Code qui peut générer une exception
  } catch (err) {
    await overwatch.exception({
      error: {
        err: err.message,
        mod: 'module',
        time: new Date().toISOString(),
      }
    });
  }
}

Ce mécanisme est automatiquement utilisé par le module xcraft-core-buslog en cas de génération de message d'erreurs avec this.log.err si le module overwatch est activé dans votre app.json pour xcraft-core-buslog.

Signaler un comportement suspect

// Dans une méthode d'un acteur Elf
async elfQuest() {
  const overwatch = this.quest.getAPI('overwatch');
  await overwatch.hazard({
    error: {
      err: 'Description du comportement suspect',
      mod: ['module-name'],
      time: new Date().toISOString(),
    }
  });
}

Récupérer toutes les erreurs manuellement

// Dans une méthode d'un acteur Elf
async elfQuest() {
  const overwatch = this.quest.getAPI('overwatch');
  const allErrors = await overwatch.getAllErrors();
  // Traiter les erreurs...
}

Interactions avec d'autres modules

Configuration avancée

La configuration du module se fait via le fichier config.js et peut être modifiée dans le fichier app.json de l'application :

| Option | Description | Type | Valeur par défaut | |--------|-------------|------|------------------| | mode | Mode de fonctionnement (debounce ou manual) | string | debounce | | channels | Liste des canaux disponibles pour les notifications | object | null | | agent | Nom de l'agent qui rapporte les erreurs | string | ana |

Exemple de configuration dans app.json :

"xcraft-core-log": {
  "modes": ["overwatch"]
},
"goblin-overwatch": {
  "mode": "debounce",
  "channels": {
    "discord": [
      "${serverId}/${channelId}"
    ],
    "mail": []
  },
  "agent": "genji"
}

Variables d'environnement

| Variable | Description | Exemple | Valeur par défaut | |----------|-------------|---------|------------------| | NODE_ENV | Environnement d'exécution, affecte le formatage des messages | development | - |

Détails des sources

service.js

Ce fichier définit le service principal qui gère la collecte et l'envoi des erreurs. Il expose les quêtes suivantes :

  • init(debounceTime) - Initialise le service avec les backends configurés. Le paramètre debounceTime (par défaut 30000ms) définit l'intervalle de regroupement des erreurs.
  • exception(error) - Collecte une exception pour traitement ultérieur.
  • hazard(error) - Collecte un comportement suspect pour traitement ultérieur.
  • push-errors(errorsCollected) - Traite les erreurs collectées et les ajoute à l'état du service.
  • prepare-send-errors() - Prépare l'envoi des erreurs via tous les backends configurés.
  • send-errors-by-backend(backendKey, mode) - Envoie les erreurs via un backend spécifique.
  • send-errors(backend, channel, errors, mode, appInfo, agent) - Envoie les erreurs à un canal spécifique.
  • get-all-errors() - Récupère toutes les erreurs collectées et les efface.
  • clear-all-errors() - Efface toutes les erreurs collectées.

Le service utilise un ArrayCollector pour regrouper les erreurs similaires et réduire le nombre de notifications.

report.js

Cette classe est responsable de la génération des rapports d'erreurs formatés pour les différents backends. Elle extrait les informations pertinentes des erreurs et les présente de manière structurée avec des sections comme :

  • En-tête avec le nom de l'hôte et de l'application
  • Sujet de l'erreur
  • Date de l'erreur
  • Message d'erreur
  • Pile d'appels (goblin ou module)
  • Nombre d'occurrences

La classe fournit des méthodes pour accéder à ces différentes parties du rapport et gère également les erreurs internes qui pourraient survenir lors de la génération du rapport.

backends/discord.js

Implémentation du backend Discord pour l'envoi de notifications. Il gère :

  • La conversion du format HTML vers Markdown
  • La gestion des limites de taille des messages Discord (2000 caractères)
  • L'envoi de fichiers pour les messages trop longs
  • La gestion des erreurs et des limites de taux d'envoi (avec retry automatique)
  • L'utilisation d'emojis et d'avatars personnalisés pour les notifications

Le backend utilise la bibliothèque got pour les requêtes HTTP et formdata-node pour l'envoi de fichiers.

backends/mail.js

Implémentation du backend email pour l'envoi de notifications. Il gère :

  • La conversion du format HTML vers texte brut
  • Le formatage des messages d'erreur pour l'envoi par email

Note: L'implémentation actuelle du backend mail n'est pas complète et lance une erreur "Not implemented! See nodemailer module".

config.js

Définit les options de configuration disponibles pour le module :

  • mode : Mode de fonctionnement (debounce ou manual)
  • channels : Canaux disponibles pour les notifications
  • agent : Nom de l'agent qui rapporte les erreurs (avec une liste de personnages d'Overwatch comme choix)

overwatch.js

Point d'entrée du module qui expose les commandes Xcraft disponibles via la fonction xcraftCommands.

Cette documentation a été mise à jour automatiquement.