# Rutas clave ## Stack base de platform-40 - `/srv/platform` - `/srv/chirpstack` - `/srv/verticals` ## Rutas clave del caso drenaje en platform-40 - `/srv/verticals/drain-control/app/api.py` - `/srv/verticals/drain-control/app/static/index.html` - `/srv/verticals/drain-control/app/scheduler.py` - `/srv/verticals/drain-control/docker-compose.yml` - `/srv/verticals/drain-lab/app/pg_sink.py` - `/srv/platform/docker-compose.yml` ## Patrón de verticales documentado - template base: `/srv/verticals/_template` - ejemplo de vertical: `/srv/verticals/sim2` ## Observaciones - `platform-40` es backend real, no frontal cliente - las rutas de OVH no deben mezclarse aquí como si fueran locales - si una vertical toca tanto `platform-40` como OVH, la documentación debe quedar separada por plataforma ```` --- ## `grafana/README.md` Grafana en `platform-40` existe como parte del stack base y también puede servir para paneles técnicos internos. El dashboard oficial de cliente, en el caso del drenaje, vive en OVH. ```markdown # Grafana en platform-40 ## Papel Grafana en `platform-40` forma parte del stack base del plano de datos. ## Qué representa aquí - paneles técnicos internos - validación operativa - visualización de datos del stack - apoyo al desarrollo y depuración ## Qué no representa aquí como criterio general En el caso del drenaje, el dashboard oficial del cliente no vive aquí. Ese dashboard vive en OVH, dentro del tenant público del cliente. ## Regla práctica - Grafana interno/técnico -> puede documentarse aquí - dashboard final de cliente -> documentarlo en `10-platforms/ovh-cloud/` y, si aplica, en `40-clients/` ``` --- ## `ops/operacion-diaria.md` Muchos de estos comandos están documentados literalmente en los runbooks de `platform-40` y drenaje. ````markdown # Operación diaria ## Ver estado del stack base ```bash cd /srv/platform docker-compose ps ```` ## Ver estado de ChirpStack ```bash cd /srv/chirpstack docker-compose ps ``` ## Ver puertos relevantes ```bash sudo ss -lntup | egrep ':(1883|1884|3000|8080|9000|9001|9443)' ``` ## Ver tráfico MQTT interno ```bash mosquitto_sub -h 192.168.40.100 -t 'vertical/+/telemetry' ``` ## Publicar mensaje de prueba ```bash mosquitto_pub -h 192.168.40.100 -t test/topic -m hello ``` ## Probar listener frontera ```bash TS_IP=$(tailscale ip -4) mosquitto_pub \ -h $TS_IP \ -p 1884 \ -u ovh_gateway_bridge \ -P \ -t 'eu868/gateway/testgw/event/up' \ -m '{"test":"ok"}' ``` ## Ver logs de ChirpStack ```bash cd /srv/chirpstack docker-compose logs -f cs_chirpstack ``` ## Reiniciar ChirpStack ```bash cd /srv/chirpstack docker-compose restart cs_chirpstack ``` ## Comprobar backend de drenaje ```bash curl -s "http://192.168.40.100:8088/api/drain-window/current?tenant=tma4p1aego_lab&site=bench_gh01&product=climate&asset=drain-01" ``` ## Consultar auditoría de drenaje ```bash curl -s "http://192.168.40.100:8088/api/drain-window/audit?tenant=tma4p1aego_lab&site=bench_gh01&product=climate&asset=drain-01&limit=10" ``` ## Entrar a PostgreSQL hot ```bash docker exec -it mv_postgres_hot psql -U mv_hot_app -d mesavault_hot ``` ## Reiniciar drain-control ```bash cd /srv/verticals/drain-control docker-compose up -d --build ``` ## Reiniciar drain-lab ```bash cd /srv/verticals/drain-lab docker-compose up -d --build ``` ## Advertencia crítica No ejecutar en `/srv/platform`: ```bash docker-compose down -v ```