3.4 KiB
Arquitectura e implantación
Arquitectura limpia (monitor Python)
Bajo monitor/src/adn_monitor/:
- Dominio — objetos de valor, errores, tipos de opcode.
- Aplicación —
MonitorState,process_messageenmonitor_controller.py, servicio de alias, casos de uso Last Heard / conteo TG, formato de hora. - Infraestructura —
load_configYAML, cliente Twisted TCP (ReportClientFactory) al peer server, fábrica WebSocket para el panel, repositorios MySQL, decodificadores pickle/json paraCONFIG_SND/BRIDGE_SND.
El monitor sale hacia ADN_CONNECTION.ADN_IP:ADN_PORT y recibe mensajes con prefijo de longitud (estilo netstring). Actualiza CTABLE (masters/peers/OpenBridge) y BTABLE (bridges) en memoria, y persiste resultados de BRDG_EVENT cuando MySQL está configurado.
Protocolo de informes (desde el peer server)
Los mismos opcodes que en la documentación del servidor: CONFIG_SND, BRIDGE_SND, BRDG_EVENT, etc. El monitor los decodifica y aplica en process_message — ver Monitor e informes.
WebSocket
monitor.py ejecuta un WebSocket Twisted en WEBSOCKET_SERVER.WEBSOCKET_PORT, enviando instantáneas JSON a FREQUENCY para que la app React actualice sin polling del estado principal.
Backend PHP
- Slim 4 front controller:
backend/public/index.php. - Carga
adn-mon.yamlvíaADN_CONFIG_PATH(igual que el monitor). /api/config/dashboard— título, idioma, flags (selfService,showConsole, …) desdeDASHBOARD./api/auth/*— sesión por cookie cuando hay BD SELF_SERVICE./api/self-service/*— opciones de dispositivo (ver Self-service)./api/aliases/*— proxy opcional a URLs de listas TG/bridge desde ALIASES.
Frontend
- Vite + React bajo
frontend/; el build genera estáticos servidos por nginx/Apache o similar. - Usa
API_BASE(build) para la API PHP y URL del WebSocket para datos en vivo.
Proxy hotspot
- Entrada:
proxy/proxy.py; paquetesrc/adn_proxy/(dominio / aplicación / infraestructura). - Lee
PROXYySELF_SERVICEdel mismo YAML. - Por cada cliente hotspot, asigna un puerto en
DESTPORT_START…DEST_PORT_ENDy reenvía UDP aMASTER. - Cuando self-service actualiza
Clients.optionsy ponemodified=1, el proxy envía RPTO al master en un temporizador (~10 s). El peer server aplica entonces las opciones al camino del hotspot (ver Self-service).
Por qué no forma parte del binario del peer server: comparte adn-mon.yaml, self-service MySQL e implantación con la pila del monitor — ver Por qué va con el monitor.
Detalle: Proxy hotspot (claves de config, rango de puertos del peer, arranque).
Topología típica de despliegue
[Hotspots] --UDP--> [Proxy :LISTEN_PORT] --UDP--> [Peer server :rango DESTPORT]
|
v
MySQL (Clients)
[Peer server :REPORT_PORT] <--- TCP --- [monitor.py : cliente que conecta]
[Navegador] --HTTPS--> [API PHP + frontend estático]
[Navegador] --WS----> [WebSocket del monitor :9000]