CreaRack-SL

Retirar el camino cloud de monitorización (batch-ping/snmp/http) y las tablas MetricSample/AggregatedMetric

Contexto

Antes de que existiera el Agente Local, el servidor de CreaRack Pro sondeaba los equipos directamente (ping/SNMP/HTTP en lote, vía los endpoints POST /api/monitoring/targets/batch-ping|batch-snmp|batch-http) y guardaba las lecturas en dos tablas de PostgreSQL: MetricSample (muestra individual) y AggregatedMetric (agregados por hora, sin lector ni escritor conocido). Desde la v1.68.1 (task #230) el histórico de métricas vive en VictoriaMetrics, escrito por el Agente Local — las dos tablas llevaban 0 filas en PROD y los tres endpoints de sondeo en lote no tenían ningún llamador (JS ni Python), según los hallazgos A13/A14 de la auditoría de monitorización (task #261).

Además, desde la sesión 130 había una deuda de seguridad diferida: MetricSample era la única tabla del dominio monitoring sin política de aislamiento por organización (Row Level Security), diferida precisamente porque un DROP en caliente sobre una tabla con RLS es delicado — ver [[decision—20260403—multi-tenancy-rls]].

Opciones consideradas

  1. Añadir RLS/policy a MetricSample para cerrar el hueco de aislamiento manteniendo la tabla, por si algún día volvía a usarse el camino server-side.
  2. Eliminar por completo la tabla y los endpoints muertos, dado que llevaban 0 filas en PROD desde hace meses y ningún código las llamaba.

Decisión elegida

Opción 2: eliminar. GO explícito de Edu el 27-08-2026, verificado justo antes del merge con MetricSample.objects.count() == 0 y AggregatedMetric.objects.count() == 0 en PROD. Se retiraron en el mismo cambio:

  • Los tres endpoints batch-ping, batch-snmp, batch-http (monitoring/api/batch.py, sus schemas Batch* en monitoring/api/schemas.py y su registro en el router).
  • Los modelos MetricSample y AggregatedMetric, con una migración DROP dedicada (monitoring/migrations/0032_drop_metricsample_aggregatedmetric_b2.py).
  • La escritura de muestras SNMP en PostgreSQL desde monitoring/api/snmp.py — la caché de contadores para el cálculo de caudal server-side pasa a vivir solo en memoria (_snmp_counter_cache); la serie histórica sigue yendo a VictoriaMetrics.
  • El comando cleanup_metrics conserva el nombre (lo citan crons y docs) pero deja de podar métricas — solo poda alertas resueltas de más de 90 días.
  • Un test de contrato (tests/monitoring/test_pg_metrics_retired.py) que impide que las tres rutas reaparezcan en el OpenAPI por descuido.

Consecuencias

A favor:

  • 588 líneas menos de código muerto y dos tablas menos en PostgreSQL.
  • Cierra la deuda de RLS diferida en la sesión 130 de raíz — la solución definitiva era quitar la tabla, no protegerla (no había ningún RLS/policy dependiente, verificado en las migraciones).
  • Ningún impacto visible para el usuario: el camino real de monitorización (Agente Local → VictoriaMetrics) no se toca.

En contra / riesgo asumido:

  • La migración DROP se probó en la suite completa del área (incluidas las 46 pruebas de aislamiento multi-tenant) pero no en STAGE por separado antes del merge — Dokploy despliega STAGE y PROD a la vez. Mitigado porque ambas tablas estaban vacías en PROD justo antes del merge.

Status: accepted.

Véase también

  • [[decision—20260403—multi-tenancy-rls]]
  • [[concept—saas—multi-tenancy]]
  • [[entity—monitoring—model—monitoringtarget]]
  • [[feature—monitoring—cierre-deudas-sa3]]