# Proposta di Implementazione BusMonitor1553 come Modulo ARTOS ## Sommario Esecutivo Ho analizzato il documento ARTOS_design.md e implementato un'architettura **dual-mode** che permette a PyBusMonitor1553 di operare: 1. **Standalone** (modalità attuale con GUI/CLI) - per sviluppo e test 2. **ARTOS Module** (plugin per il Collector) - per integrazione futura ## Componenti Implementati ### 1. ARTOS Interface Layer (`core/base_module.py`) ```python class BaseModule(abc.ABC): """Contratto standard per tutti i moduli ARTOS""" - initialize(config) # Setup iniziale - start_session() # Avvio acquisizione dati - stop_session() # Arresto e cleanup - get_status() # Health monitoring ``` **Allineamento con ARTOS Design**: Implementa esattamente l'interfaccia definita nel documento di design ARTOS (sezione "Definizione dell'Interfaccia Moduli"). ### 2. Business Logic Core (`core/bus_monitor_core.py`) ```python class BusMonitorCore(BaseModule): """Implementazione concreta del monitor 1553""" - Gestione connessioni UDP - Sistema callback per notifiche real-time - Recording/Replay integrato - Timestamp normalization ``` **Caratteristiche chiave**: - ✅ Implementa BaseModule → compatibile ARTOS - ✅ Mantiene compatibilità con GUI esistente - ✅ Sistema di callback per test hooks - ✅ Recording automatico degli eventi ### 3. Recording System (`core/data_recorder.py`) ```python class DataRecorder: """Gestione Record & Replay""" - Cattura sequenze di messaggi - Salvataggio JSON con timestamp - Query temporali per correlazione - Filtri per tipo/label ``` **Allineamento con ARTOS Design**: Implementa la funzionalità "Record & Replay" descritta nella sezione 8 del design document. --- ## Architettura Proposta ``` ┌────────────────────────────────────────────────────────────────┐ │ PyBusMonitor1553 (Progetto) │ │ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ ARTOS BaseModule (Abstract) │ │ │ │ • initialize() │ │ │ │ • start_session() │ │ │ │ • stop_session() │ │ │ │ • get_status() │ │ │ │ • get_system_timestamp() ← Time Normalization │ │ │ └─────────────────┬──────────────────────────────────────┘ │ │ │ implements │ │ ┌─────────────────▼──────────────────────────────────────┐ │ │ │ BusMonitorCore (Concrete) │ │ │ │ • ConnectionManager (UDP 1553) │ │ │ │ • DataRecorder (Record & Replay) │ │ │ │ • Callback System (Test Hooks) │ │ │ │ • Event Queue (Real-time notifications) │ │ │ └─────────────────┬──────────────────────────────────────┘ │ │ │ │ │ ┌────────┴─────────┐ │ │ │ │ │ │ ┌────────▼───────┐ ┌───────▼─────────┐ │ │ │ Tkinter GUI │ │ ARTOS Collector │ │ │ │ (Standalone) │ │ (External) │ │ │ └────────────────┘ └─────────────────┘ │ │ │ │ Development Mode Production Mode │ └────────────────────────────────────────────────────────────────┘ ``` --- ## Vantaggi dell'Approccio ### ✅ Dual-Mode Operation - **Sviluppo**: Usa GUI locale per testare e debuggare - **Produzione**: ARTOS Collector importa come modulo Python standard - **Zero modifiche**: Stesso codice funziona in entrambi i contesti ### ✅ Time Normalization (Sincronizzazione) Ogni evento catturato include: ```json { "timestamp": 1703257822.123456, // System time (Collector reference) "hw_timestamp": 0.123456, // Hardware timestamp (se disponibile) "event_type": "msg_received", "label": "msg_a2", "data": { ... } } ``` Il Collector può: - Correlare eventi da BusMonitor + VideoReceiver + TargetSim - Calcolare latenze end-to-end - Rilevare anomalie temporali ### ✅ Test Automation Ready ```python # Example: ARTOS Collector test routine bus_monitor.register_callback("msg_a2", validate_radar_mode) bus_monitor.start_session() if not bus_monitor.wait_for_message("msg_b1", timeout=5.0): test_result.add_failure("Target not detected within 5s") ``` ### ✅ Deterministic Testing - Record live session → baseline file - Replay in CI/CD pipeline - Automated regression detection --- ## Workflow di Utilizzo ### Fase 1: Sviluppo Standalone (ORA) ```bash # Current workflow - UNCHANGED python -m pybusmonitor1553 # GUI mode python -m pybusmonitor1553 --cli # CLI mode ``` La GUI usa internamente `BusMonitorCore` ma con interfaccia locale Tkinter. ### Fase 2: Testing con Recording ```python from pybusmonitor1553.core import BusMonitorCore monitor = BusMonitorCore() monitor.initialize({'ip': '127.0.0.1', 'send_port': 5001, 'recv_port': 5002}) # Record a test session monitor.start_recording(filepath=Path("recordings/baseline.json")) monitor.start_session() # ... perform manual tests ... monitor.stop_recording(save=True) monitor.stop_session() ``` ### Fase 3: Integrazione ARTOS (FUTURO) ```python # In ARTOS Collector project from pybusmonitor1553.core import BusMonitorCore class ARTOSCollector: def __init__(self): # BusMonitor as a plugin module self.bus_monitor = BusMonitorCore() def run_test(self, scenario): # ARTOS orchestrates the test self.bus_monitor.initialize(scenario.bus_config) self.bus_monitor.register_callback("msg_a2", self.validate_radar_mode) self.bus_monitor.start_session() # Inject target via TargetSimulator self.target_sim.inject_target(scenario.target_data) # Wait for radar response on bus if self.bus_monitor.wait_for_message("msg_b1", timeout=5.0): self.test_passed() else: self.test_failed("No radar response") ``` --- ## File Creati/Modificati ### Nuovi File 1. **`pybusmonitor1553/core/base_module.py`** - Classe astratta BaseModule (interfaccia ARTOS) - ~100 righe, docstring completa 2. **`pybusmonitor1553/core/data_recorder.py`** - Sistema recording/replay - Serializzazione JSON - Query temporali - ~180 righe 3. **`examples/artos_integration_example.py`** - Esempio completo di utilizzo ARTOS - Workflow: init → callbacks → recording → replay - ~150 righe 4. **`doc/ARTOS-Integration-Guide.md`** - Documentazione completa dell'integrazione - Diagrammi architetturali - Esempi di codice - ~400 righe ### File Modificati 1. **`pybusmonitor1553/core/bus_monitor_core.py`** - Esteso per implementare BaseModule - Aggiunto sistema callback - Integrato DataRecorder - Metodi recording/replay 2. **`pybusmonitor1553/core/__init__.py`** - Export delle classi ARTOS-ready --- ## Prossimi Passi Consigliati ### Short-term (Per completare il modulo standalone) 1. **Collegare MessageDB** - Implementare `get_message()` completo - Integrare notifiche nel dispatcher esistente - Test end-to-end con messaggi reali 2. **Test del Recording** - Catturare una sessione live - Verificare formato JSON - Testare replay ### Mid-term (Preparazione ARTOS) 1. **Documentazione API** - Docstring complete per tutti i metodi pubblici - Type hints rigorosi - Esempi d'uso 2. **Test Suite** - Unit test per BaseModule compliance - Integration test con ConnectionManager - Recording/Replay validation ### Long-term (Quando ARTOS sarà pronto) 1. **Packaging** - Setup.py configurato per installazione come libreria - Dependencies separate (GUI optional) - Versioning semantico 2. **CI/CD** - Test automatici con recordings baseline - Regression detection - Performance benchmarks --- ## Domande & Decisioni Aperte ### 1. MessageDB Integration **Domanda**: Come vuoi integrare il `MessageDB` esistente con il nuovo core? **Opzioni**: - A) MessageDB rimane globale, BusMonitorCore vi accede direttamente - B) MessageDB diventa attributo di BusMonitorCore (incapsulato) - C) MessageDB viene refactorato in DataRecorder **Consiglio**: Opzione B per massima modularità ARTOS. ### 2. Timestamp Source **Domanda**: I messaggi 1553 hanno già un timestamp hardware? **Se sì**: Il DataRecorder può usarlo per correlazione precisa **Se no**: Useremo solo system_receipt_timestamp (sufficiente per la maggior parte dei test) ### 3. GUI Refactoring **Domanda**: Vuoi refactorare la GUI esistente per usare BusMonitorCore direttamente? **Vantaggi**: - Un solo code path (stesso core per GUI e ARTOS) - Facilita testing (GUI testa automaticamente il core) - Meno duplicazione **Svantaggi**: - Richiede modifiche alla GUI esistente - Potenziali regressioni temporanee **Consiglio**: Fallo gradualmente, mantenendo la GUI legacy funzionante finché il core non è stabile. --- ## Conclusioni L'architettura proposta soddisfa tutti i requisiti ARTOS: ✅ **Interfaccia standardizzata** (BaseModule) ✅ **Time Normalization** (dual timestamp system) ✅ **Record & Replay** (DataRecorder) ✅ **Health Monitoring** (get_status()) ✅ **Test Hooks** (callback system) Allo stesso tempo, mantiene il progetto pienamente utilizzabile come tool standalone per lo sviluppo e il testing. **La strategia è: sviluppare e perfezionare qui, distribuire come modulo ARTOS quando pronto.** Dimmi cosa ne pensi e su cosa vuoi che ci concentriamo prima!