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

xcraft-core-activity

v3.1.5

Published

Xcraft activity manager

Readme

📘 xcraft-core-activity

Aperçu

Le module xcraft-core-activity est un gestionnaire d'activités pour le framework Xcraft qui fonctionne comme un ordonnanceur intelligent. Il gère l'exécution des commandes en les plaçant dans des listes d'attente ou d'exécution selon des règles de concurrence spécifiques, permettant de contrôler finement l'ordre d'exécution et la parallélisation des activités dans l'écosystème Xcraft.

Sommaire

Structure du module

Le module est composé de trois fichiers principaux :

  • lib/activity.js : Classe principale Activities qui implémente l'ordonnanceur
  • lib/index.js : Point d'entrée qui exporte l'instance singleton
  • activity.js : Commandes Xcraft exposées sur le bus de communication

Le module expose une instance singleton de la classe Activities qui hérite d'EventEmitter pour gérer les événements internes d'orchestration.

Fonctionnement global

Le gestionnaire d'activités fonctionne selon un système d'ordonnancement événementiel basé sur des règles de concurrence strictes :

Architecture événementielle

Le système utilise un modèle événementiel interne pour orchestrer le flux d'exécution :

  • wait : Déclenché pour évaluer toutes les activités en attente
  • run : Déclenché pour démarrer l'exécution d'une activité
  • Événements de fin : finished ou error pour marquer la fin d'une activité

Règles d'exécution

Une activité peut être exécutée uniquement si toutes ces conditions sont respectées :

  1. Unicité par ORC : La même commande avec le même nom d'ORC n'est pas déjà en cours d'exécution
  2. Gestion de la parallélisation :
    • L'activité est marquée comme parallèle (parallel: true), OU
    • Seules des activités parallèles sont actuellement en cours d'exécution

Cycle de vie d'une activité

  1. Ajout : L'activité est ajoutée à la liste d'attente via execute()
  2. Génération d'ID : Un identifiant unique est généré avec FlakeId
  3. Évaluation : Le système vérifie si l'activité peut être exécutée immédiatement
  4. Exécution : Si les conditions sont remplies, l'activité passe en liste d'exécution
  5. Surveillance : Le système s'abonne aux événements de fin d'activité
  6. Finalisation : L'activité se termine et déclenche l'évaluation des activités en attente

Gestion de la concurrence

Le système distingue deux types d'activités :

  • Activités exclusives (parallel: false) : Une seule peut s'exécuter à la fois
  • Activités parallèles (parallel: true) : Peuvent s'exécuter simultanément

Exemples d'utilisation

Exécution d'une activité exclusive

const activity = require('xcraft-core-activity');

// Exécution d'une commande exclusive
activity.execute(
  'database.migrate',
  {id: 'msg-123', orcName: 'main-orc'},
  (cmd, msg) => {
    // Cette commande ne peut pas s'exécuter en parallèle
    console.log(`Executing exclusive ${cmd} for ${msg.orcName}`);
    // Logique de migration de base de données
  },
  false // Activité exclusive
);

Exécution d'une activité parallèle

// Exécution d'une commande parallèle (lecture de données)
activity.execute(
  'data.fetch',
  {id: 'msg-456', orcName: 'worker-orc'},
  (cmd, msg) => {
    // Cette commande peut s'exécuter en parallèle avec d'autres
    console.log(`Parallel execution of ${cmd}`);
    // Logique de récupération de données
  },
  true // Activité parallèle
);

Consultation du statut via commande bus

// Via le système de commandes Xcraft
const busClient = require('xcraft-core-busclient').getGlobal();

// Envoyer la commande de statut
busClient.command.send('activity.status', {});

// Écouter la réponse
busClient.events.subscribe('activity.status', (status) => {
  console.log('Activités en cours :', status.running);
  console.log('Activités en attente :', status.waiting);
});

Utilisation directe de l'API

// Accès direct à l'instance singleton
const activity = require('xcraft-core-activity');

// Obtenir le statut de toutes les activités
const status = activity.status();
console.log('État actuel :', status);

Interactions avec d'autres modules

Le module interagit étroitement avec plusieurs composants de l'écosystème Xcraft :

  • xcraft-core-busclient : Utilise le client bus global pour s'abonner aux événements de fin d'activité et gérer le cycle de vie
  • xcraft-core-log : Système de logging intégré pour tracer l'exécution et le débogage des activités
  • xcraft-core-server : Le serveur charge automatiquement les commandes exposées par ce module
  • flake-idgen : Génération d'identifiants uniques distribués pour chaque activité
  • biguint-format : Formatage des identifiants FlakeId en représentation hexadécimale

Détails des sources

lib/activity.js

Classe principale Activities qui implémente le gestionnaire d'activités. Elle maintient l'état complet du système via deux collections principales :

  • _waiting : Map des activités en attente d'exécution avec leurs métadonnées
  • _running : Map des activités en cours d'exécution
  • _flakeIdGen : Générateur d'identifiants uniques pour les activités

Méthodes publiques

  • execute(cmd, msg, action, parallel) — Ajoute une nouvelle activité à la liste d'attente. L'activité sera automatiquement exécutée dès que les conditions de concurrence le permettent.
  • status() — Retourne un objet détaillé contenant l'état actuel de toutes les activités, organisé en sections running et waiting.
  • pause(id) — Méthode réservée pour la mise en pause d'une activité (non implémentée).
  • resume(id) — Méthode réservée pour la reprise d'une activité (non implémentée).
  • kill(id) — Méthode réservée pour l'arrêt forcé d'une activité (non implémentée).

Méthodes privées

  • _canExecute(activity) — Algorithme central qui détermine si une activité peut être exécutée selon les règles de concurrence établies.
  • _run(activity) — Lance l'exécution effective d'une activité, gère l'abonnement aux événements de fin et maintient l'état du système.
  • _isRunning(activity) — Vérifie si une activité identique (même commande et même ORC) est déjà en cours d'exécution.
  • _isParallel(activity) — Détermine si une activité est marquée comme parallèle.
  • _haveOnlyParallels() — Vérifie si toutes les activités en cours sont parallèles, permettant l'exécution d'activités exclusives.
  • _getActivityName(activity) — Génère un nom unique pour l'activité au format orcName::command.

lib/index.js

Point d'entrée minimaliste qui exporte l'instance singleton de la classe Activities, garantissant un état global cohérent dans toute l'application.

activity.js

Module d'exposition des commandes Xcraft qui permet l'interaction avec le gestionnaire d'activités via le bus de communication.

Commandes disponibles

  • status — Commande parallèle qui interroge le gestionnaire et publie le statut de toutes les activités via l'événement activity.status. Cette commande peut s'exécuter en parallèle car elle est en lecture seule.

Document mis à jour