Skip to content

Suite DevTools : record/replay, mock exchange, chaos engineering, scenario testing, dashboard web

License

Notifications You must be signed in to change notification settings

venantvr-trading/Python.PubSub.DevTools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PubSub DevTools

Une suite complète d'outils de développement et de débogage pour architectures événementielles basées sur PubSub.

Cette bibliothèque est conçue comme un outil d'aide au développement avec une API programmatique prioritaire. Les développeurs peuvent facilement instancier et lancer les serveurs directement depuis leur propre code (scripts de test, sessions de débogage, IDE) tout en bénéficiant d'une CLI pratique pour une utilisation autonome.

🎯 Fonctionnalités

📊 Event Flow Visualization

  • Diagrammes interactifs de flux d'Ă©vĂ©nements
  • Vues hiĂ©rarchiques et graphes complets
  • Filtrage par namespace avec codage couleur
  • Filtrage des Ă©vĂ©nements Ă©chouĂ©s/rejetĂ©s
  • Support du mode sombre
  • Rendu professionnel avec GraphViz

🎬 Event Recorder & Replayer

  • Enregistrement de flux d'Ă©vĂ©nements avec timestamps
  • Tableau de bord web pour parcourir les sessions
  • Filtrage et analyse des sĂ©quences d'Ă©vĂ©nements
  • Statistiques dĂ©taillĂ©es par enregistrement
  • Analyse de frĂ©quence des Ă©vĂ©nements

🎰 Mock Exchange Simulator

  • Simulation de marchĂ© en temps rĂ©el
  • ScĂ©narios multiples (tendance, volatilitĂ©, crash)
  • Configuration de prix initial, volatilitĂ© et spread
  • Visualisation interactive des prix

🎯 Scenario Testing Framework

  • Moteur de scĂ©narios agnostique au domaine
  • GĂ©nĂ©ration de donnĂ©es avec profils configurables
  • IngĂ©nierie du chaos (dĂ©lais, Ă©checs, corruption)
  • VĂ©rification automatique d'assertions
  • Support multi-phases
  • Rapports de tests complets

Installation

pip install python_pubsub_devtools

Or install from source:

git clone <repository>
cd Python.PubSub.DevTools
pip install -e .

🚀 Démarrage Rapide

1. Configuration

Créez un fichier devtools_config.yaml à la racine de votre projet :

# Générer un fichier de configuration exemple
pubsub-tools config-example -o devtools_config.yaml

Puis éditez le fichier pour ajuster les chemins :

# Configuration PubSub DevTools
agents_dir: "./agents"
events_dir: "./events"
recordings_dir: "./recordings"
scenarios_dir: "./scenarios"
reports_dir: "./reports"

event_flow:
  port: 5555

event_recorder:
  port: 5556

mock_exchange:
  port: 5557

scenario_testing:
  port: 5558

2. Utilisation CLI

# Lancer un service spécifique
pubsub-tools event-flow --config devtools_config.yaml
pubsub-tools event-recorder --config devtools_config.yaml
pubsub-tools mock-exchange --config devtools_config.yaml
pubsub-tools scenario-testing --config devtools_config.yaml

# Lancer tous les services simultanément
pubsub-tools serve-all --config devtools_config.yaml

Services disponibles :

Service Port Description
Event Flow 5555 Visualisation des flux d'événements
Event Recorder 5556 Enregistrement et rejeu d'événements
Mock Exchange 5557 Simulateur de marché
Scenario Testing 5558 Tests de scénarios avec chaos

3. Utilisation Programmatique (Recommandé)

L'API programmatique est l'interface principale pour intégrer les outils dans vos scripts, tests ou IDE :

from python_pubsub_devtools.config import DevToolsConfig
from python_pubsub_devtools.event_flow.server import EventFlowServer

# Charger la configuration depuis un fichier YAML
config = DevToolsConfig.from_yaml("devtools_config.yaml")

# Instancier et lancer un serveur (bloquant)
server = EventFlowServer(config.event_flow)
server.run()

Lancer plusieurs serveurs en parallèle :

import multiprocessing
from python_pubsub_devtools.config import DevToolsConfig
from python_pubsub_devtools.event_flow.server import EventFlowServer
from python_pubsub_devtools.event_recorder.server import EventRecorderServer

config = DevToolsConfig.from_yaml("devtools_config.yaml")


def run_event_flow():
    server = EventFlowServer(config.event_flow)
    server.run(host='0.0.0.0', debug=False)


def run_event_recorder():
    server = EventRecorderServer(config.event_recorder)
    server.run(host='0.0.0.0', debug=False)


# Lancer dans des processus séparés
processes = [
    multiprocessing.Process(target=run_event_flow),
    multiprocessing.Process(target=run_event_recorder),
]

for p in processes:
    p.start()

Voir examples/basic_usage.py pour plus d'exemples.

Features Overview

Event Flow Visualization

Visualize the complete event-driven architecture:

  • Publishers & Subscribers: See who publishes and subscribes to which events
  • Event Namespaces: Organize events by namespace with color coding
  • Interactive Diagrams: Hierarchical tree and complete graph views
  • Filtering: Filter by namespace, hide failed/rejected events
  • Dark Mode: Comfortable visualization in any lighting condition
  • GraphViz Layout: Professional-quality diagram rendering

Event Recorder

Record and replay event streams for:

  • Debugging: Analyze complex event sequences
  • Test Fixtures: Create reproducible test scenarios
  • Performance Analysis: Track event timing and frequency
  • Session Management: Browse and compare multiple recordings
  • Statistics: Event counts, duration, frequency analysis

Generic Scenario Testing

Build domain-agnostic scenario tests:

  • Data Generation: Pluggable data generators for any domain
  • Scenario Profiles: Bull/bear markets, load patterns, failure modes, etc.
  • Chaos Engineering: Inject delays, failures, data corruption
  • Assertions: Built-in and custom assertion checkers
  • Multi-Phase: Complex scenarios with multiple phases
  • Reporting: Comprehensive test reports with statistics

🏗️ Architecture

La bibliothèque suit une architecture modulaire avec configuration centralisée :

python_pubsub_devtools/
├── config.py                    # Configuration Pydantic centralisée avec support YAML
├── cli/                         # Interface en ligne de commande unifiée
│   └── main.py                  # Commandes CLI avec Click
├── event_flow/                  # Visualisation des flux d'événements
│   ├── __init__.py             # API publique (EventFlowAnalyzer, EventFlowServer)
│   ├── server.py               # Serveur Flask (Application Factory)
│   ├── views.py                # Routes Flask
│   └── analyze_event_flow.py  # Logique métier d'analyse
├── event_recorder/              # Enregistrement et rejeu d'événements
│   ├── __init__.py             # API publique (EventRecorder, EventRecorderServer)
│   ├── server.py               # Serveur Flask (Application Factory)
│   ├── views.py                # Routes Flask
│   └── event_recorder.py       # Logique métier d'enregistrement
├── mock_exchange/               # Simulateur de marché
│   ├── __init__.py             # API publique (MockExchangeServer)
│   ├── server.py               # Serveur Flask (Application Factory)
│   ├── views.py                # Routes Flask
│   └── scenario_exchange.py    # Moteur de simulation
├── scenario_testing/            # Tests de scénarios avec chaos
│   ├── __init__.py             # API publique (ScenarioTestingServer)
│   ├── server.py               # Serveur Flask (Application Factory)
│   ├── views.py                # Routes Flask
│   ├── scenario_runner.py      # Moteur de scénarios
│   ├── assertion_checker.py    # Système d'assertions
│   └── chaos_injector.py       # Ingénierie du chaos
└── web/                         # Assets web partagés
    ├── templates/              # Templates HTML Jinja2
    └── static/                 # CSS, JavaScript, images

Principes de conception

  1. API programmatique prioritaire : Classes ...Server stables pour intégration facile
  2. Application Factory Pattern : Chaque service expose une fonction create_app(config)
  3. Configuration centralisée : Fichier YAML unique avec validation Pydantic
  4. Séparation des préoccupations : Logique métier, routes Flask et serveurs séparés
  5. Chemins relatifs intelligents : Résolution automatique par rapport au fichier de config

Dependencies

  • Flask >= 2.0.0 (Web interface)
  • Click >= 8.0.0 (CLI)
  • pydot >= 1.4.0 (Event flow diagrams)
  • pandas >= 2.0.0 (Data analysis)
  • matplotlib >= 3.5.0 (Visualization)
  • networkx >= 2.8.0 (Graph analysis)
  • PyYAML >= 6.0 (Configuration)
  • Pydantic >= 2.0 (Data validation)

Development

# Install development dependencies
pip install -e .[dev]

# Run tests
pytest

# Run linters
flake8 python_pubsub_devtools
mypy python_pubsub_devtools

License

MIT License

Stack

Stack

About

Suite DevTools : record/replay, mock exchange, chaos engineering, scenario testing, dashboard web

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •