Le module xcraft-core-buslog est un composant du framework Xcraft qui sert de pont entre le système de journalisation (xcraft-core-log) et le bus de communication Xcraft. Il intercepte les messages de log émis par les modules et les redirige vers le bus d'événements pour affichage dans l'interface utilisateur, et/ou vers le système de surveillance (goblin-overwatch) pour le traitement des erreurs.
- Structure du module
- Fonctionnement global
- Exemples d'utilisation
- Interactions avec d'autres modules
- Détails des sources
- Licence
Le module est composé d'un unique fichier index.js qui expose :
- Une classe
BusLoggérant l'abonnement aux événements de log et leur redirection sur le bus - Un système de modes à base de masques de bits pour contrôler finement le comportement de redirection
- Des fonctions utilitaires pour manipuler ces modes à l'échelle globale du module
- Une instance
BusLogs'abonne aux niveaux de log disponibles (verb,info,warn,err,dbg) via le système de journalisation Xcraft. - À chaque message de log reçu, la méthode
log()est appelée et redirige le message selon les modes actifs :- Mode
event: publie un événementwidget.text.[niveau]sur le bus, permettant aux widgets de l'interface d'afficher le message. - Mode
overwatch: pour les erreurs (err) et les messages portant une propriétéoverwatch, envoie une commandeoverwatch.exceptionau système de surveillance.
- Mode
- Si tous les modes sont désactivés (
currentModes === 0), le module se désabonne automatiquement pour ne pas consommer de ressources inutilement. - La connectivité de l'objet
respest vérifiée avant tout envoi, garantissant la robustesse lors des déconnexions du bus.
const xLog = require('xcraft-core-log')('mon-module');
const resp = /* objet de réponse du bus */;
const busLog = require('xcraft-core-buslog')(xLog, resp);
// Les logs sont désormais redirigés vers le bus d'événements
xLog.info("Message d'information");
xLog.err('Une erreur est survenue');const busLog = require('xcraft-core-buslog')(xLog, resp);
const totalItems = 100;
for (let i = 0; i < totalItems; i++) {
busLog.progress('Traitement des données', i, totalItems);
// Traitement...
}const xBusLog = require('xcraft-core-buslog');
// Désactiver tous les modes
xBusLog.delModes(0);
// Réactiver uniquement le mode événement
xBusLog.addModes(xBusLog.modes.event);
// Activer tous les modes
xBusLog.addModes(0);
// Consulter les modes actifs
console.log('Modes actifs:', xBusLog.getModes());- xcraft-core-log : Fournit les niveaux de log auxquels
BusLogs'abonne pour intercepter les messages. - goblin-overwatch : Reçoit les erreurs et exceptions via la commande
overwatch.exceptionlorsque le modeoverwatchest actif. - Widgets UI : Consomment les événements
widget.text.*etwidget.progresspour afficher les logs et les barres de progression dans l'interface.
Implémentation principale du module.
Constructeur BusLog(xLog, resp) : initialise l'instance avec un logger xLog et un objet de réponse resp permettant la communication sur le bus, puis s'abonne automatiquement aux niveaux de log.
log(mode, msg)— Redirige un message de log vers le bus et/ou le système de surveillance selon les modes actifs. Vérifie la connectivité avant l'envoi. Déclenche le désabonnement automatique si tous les modes sont désactivés.progress(topic, position, length)— Publie un événementwidget.progresssur le bus avec le sujet, la position courante et la longueur totale, permettant l'affichage de barres de progression dans l'interface.
_subscribe()— S'abonne à tous les niveaux de log exposés parxLog. Protégé contre les abonnements multiples._unsubscribe()— Se désabonne proprement de tous les niveaux de log et remet les références ànull.
addModes(modes)— Active des modes via un OR binaire. Simodesvaut0, active tous les modes (~0).delModes(modes)— Désactive des modes via un AND NOT binaire. Simodesvaut0, désactive tous les modes.getModes()— Retourne le masque de bits des modes actuellement actifs.
prefix: Préfixe'GreatHall'utilisé dans les événements publiés sur le bus.modesEnum: Énumération des modes disponibles :event(1 << 0) : redirige les logs vers le bus sous forme d'événementswidget.text.[niveau]overwatch(1 << 1) : achemine les erreurs et messages spéciaux versoverwatch.exception
currentModes: Variable globale (état partagé du module) initialisée avecevent | overwatch, modifiable viaaddModes/delModes.
Ce module est distribué sous licence MIT.
Ce contenu a été généré par IA