You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.7 KiB
72 lines
2.7 KiB
# Arquitectura e implantación
|
|
|
|
## Arquitectura limpia (monitor Python)
|
|
|
|
Bajo `monitor/src/adn_monitor/`:
|
|
|
|
- **Dominio** — entidades, errores, `Result`, opcodes, `UserSession`.
|
|
- **Aplicación** — `MonitorState`, casos de uso (auth, self-service, informes, dashboard), puertos (`AuthRepository`, `HttpFetcherPort`, …).
|
|
- **Infraestructura** — YAML, FastAPI (REST + `/ws`), ingest TCP (Twisted en hilo) o MQTT, MySQL, decodificadores de informes.
|
|
|
|
El **composition root** está en `infrastructure/fastapi/composition.py` (`build_monitor_api`).
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
INF["Infraestructura<br/>YAML · FastAPI /ws · ingest TCP/MQTT<br/>MySQL · decodificadores pickle/JSON"]
|
|
APP["Aplicación<br/>MonitorState · informes/dashboard<br/>auth · self-service · alias"]
|
|
DOM["Dominio<br/>objetos de valor · errores · opcodes<br/>UserSession · Result"]
|
|
INF --> APP --> DOM
|
|
```
|
|
|
|
## Proceso unificado (`monitor.py`)
|
|
|
|
Un solo proceso uvicorn/FastAPI:
|
|
|
|
| Ruta / rol | Contenido |
|
|
|------------|-----------|
|
|
| `/api/*` | Config dashboard, auth, self-service, proxy alias/status |
|
|
| `/ws` | Protocolo `conf,<grupo>` — CTABLE, Last Heard, voz |
|
|
| Ingest (fondo) | `MONITOR_APP.INGEST`: `tcp` (cliente a `ADN_CONNECTION`) **o** `mqtt` (tópicos `state` + `voice_event`) |
|
|
| Alias (fondo) | Descarga → `FILES.PATH`; import con **staging + RENAME** (commits cada 10k en staging; swap breve); merge con commits cada 2k; **PK en `id`** |
|
|
|
|
## Protocolo de informes (desde el peer server)
|
|
|
|
Modos de ingest según el peer: legacy (pickle), v1 HELLO, v2 slim (`dashboard_state` + `voice_event`). Ver [Monitor e informes](../server/user-guide/monitoring.md).
|
|
|
|
## Frontend
|
|
|
|
- **Vite + React** en `frontend/`; build → `frontend/dist/`.
|
|
- Desarrollo: Vite hace proxy de `/api` y `/ws` a `MONITOR_APP.LISTEN_PORT` (p. ej. 8080).
|
|
- Producción: Nginx sirve estáticos y proxifica `/api` + `/ws` al mismo puerto FastAPI.
|
|
|
|
## Proxy hotspot
|
|
|
|
**Integrado (predeterminado):** `adn-server.py` con `PROXY` + `SELF_SERVICE` en `adn-server.yaml`. Ver [Proxy hotspot integrado](../server/user-guide/hotspot-proxy.md).
|
|
|
|
El proceso **`adn-proxy`** independiente se eliminó del repositorio **adn-monitor**; usa solo **`PROXY`** integrado.
|
|
|
|
## Topología típica
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
HS[Hotspots] -->|UDP HBP| PROXY[adn-server PROXY]
|
|
PROXY --> MASTER[MASTER inyectado]
|
|
PROXY --> DB[(MySQL Clients)]
|
|
|
|
MASTER --> REPORT[REPORTS listener]
|
|
REPORT <-->|TCP o MQTT| ING[monitor.py ingest]
|
|
ING --> APP[FastAPI /api /ws]
|
|
APP --> DB
|
|
|
|
BR[Navegador] -->|HTTPS| FE[Nginx o SERVE_STATIC]
|
|
FE --> APP
|
|
```
|
|
|
|
---
|
|
|
|
## Ver también
|
|
|
|
- [Inicio de la documentación](../README.md)
|
|
- [Configuración](configuration.md)
|
|
- [Self-service](self-service.md)
|