306 lines
11 KiB
Markdown
306 lines
11 KiB
Markdown
# 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!
|