NEX-GEN es una plataforma ITOM para operar infraestructura desde una CMDB basada en grafos, telemetria en tiempo real y una consola de eventos orientada a contexto operacional.
- Modela CIs, relaciones topologicas y definiciones de metricas sobre Neo4j.
- Recolecta telemetria via SNMP/ICMP y genera eventos con snapshot de contexto de negocio.
- Expone un backend FastAPI y un frontend React para monitoreo, diagnostico y gestion de incidentes.
- Mantiene el feed
/api/eventsliviano y usaGET /api/events/{event_id}para el detalle enriquecido del modal.
| Capa | Stack | Responsabilidad |
|---|---|---|
| Backend | Python, FastAPI, Pydantic | API, reglas de negocio, enriquecimiento de eventos, auth |
| Frontend | React, Vite, TypeScript, Tailwind | Console, inventario, visualizacion de topologia y modal de detalle |
| Grafo | Neo4j | CIs, relaciones, metricas, BusinessService, ServiceCatalog |
| Series temporales | TimescaleDB / PostgreSQL | Historico de metricas |
| Workers | SNMP / ICMP polling | Ingesta, thresholding y apertura/recuperacion de eventos |
- El worker detecta una brecha y crea/actualiza un
Event. - Cuando el evento es nuevo, guarda snapshot de
BusinessService,ServiceCatalog, owners, sitio e SLA. - La grilla sigue consultando
/api/events?status=ACTIVE. - Al abrir el modal, el frontend consulta
/api/events/{event_id}. - El backend devuelve
event,business_contexteitsm_context, priorizando snapshot y usando fallback del grafo para eventos historicos.
docs/USER_GUIDE.md- manual del operador: login, consola, eventos, metricas, troubleshooting.docs/AI_AGENT_GUIDE.md- guia para agentes IA que operan via REST API: permisos, operaciones permitidas, guards y campos restringidos.docs/backup-restore.md- runbook de backups pre-rebuild, restore PostgreSQL y limitaciones seguras de Neo4j.docs/polling-pipeline-runbook.md- runbook operativo para habilitar, observar, hacer rollback y replay del pipeline escalable de polling.docs/polling-pipeline-tuning.md- guia de tuning para workers, leases, batching, cache, DBs y benchmarks del polling pipeline.docs/snmp-scalable-engine.md- explicacion visual del nuevo motor SNMP escalable, con flujo de leases, result writer y diagrama Mermaid.docs/supply-chain.md- politica de dependencias frontend: pnpm/Corepack, lockfile congelado y aprobacion explicita de build scripts.docs/domain/business-model.md- vocabulario de dominio, relacionesCI -> BusinessService -> ServiceCatalog, snapshot/fallback y bootstrap manual.docs/itsm/event-flow.md- lifecycle del evento, ownership, SLA, escalacion y puntos de integracion Jira/ServiceNow.docs/reference/modelo_entidad_relacion.md- referencia tecnica de entidades, relaciones y payloads relevantes.CONTEXT.md- contexto funcional y roadmap del sistema.
POST /api/auth/token- login y emision de cookies de sesion.POST /api/auth/refresh- rotacion de access/refresh token. Puede devolver429 Too Many Requestscon headerRetry-Afterdespues de intentos invalidos repetidos.POST /api/auth/logout- revoca refresh token y limpia cookies.
GET /api/events?status=ACTIVE- resumen para polling del stream.GET /api/events/{event_id}- detalle enriquecido para el modal.POST /api/events/{event_id}/ack- reconocimiento.POST /api/events/{event_id}/comment- auditoria append-only.POST /api/events/{event_id}/close- cierre estructurado o forzado.POST /api/events/{event_id}/diagnose- diagnostico on-demand.
- Copia variables base:
cp .env.example .env. - Levanta servicios:
docker-compose up -d. - Frontend:
http://localhost:3000. - Backend docs:
http://localhost:8000/docs. - Neo4j Browser:
http://localhost:7474.
PostgreSQL dentro de Docker siempre debe usar POSTGRES_HOST=postgres y POSTGRES_INTERNAL_PORT=5432. Si necesitas exponer PostgreSQL en otro puerto del host, configura POSTGRES_EXTERNAL_PORT=5433; no uses POSTGRES_PORT=5433 para servicios internos porque el contenedor PostgreSQL escucha en 5432 dentro de la red Docker.
Backups PostgreSQL/Neo4j y rebuild seguro: Docker Compose no ejecuta automaticamente los scripts de seguridad. Antes de usar docker compose build o docker compose up -d directamente, el operador debe validar .env y crear un backup manualmente.
Flujo recomendado:
- Actualiza codigo:
git pull origin main. - Revisa y actualiza
.envusando.env.examplecomo referencia. - Para rebuild completo seguro, ejecuta
sh scripts/safe-rebuild.sh; este flujo ya valida.env, preparaBACKUP_DIR, ejecuta backup, reconstruye y muestra estado. - Para backup-only antes de Compose directo, ejecuta
sh scripts/validate-env.sh --check-backup-diry luegosh scripts/pre-rebuild-backup.sh. - Solo si validacion y backup terminaron bien, ejecuta
docker compose build && docker compose up -d. - Verifica con
docker compose psydocker compose logs --tail=100 backend.
Comandos check-only: sh scripts/safe-rebuild.sh --dry-run, sh -n scripts/*.sh, shellcheck -x scripts/*.sh monitor_performance.sh docker/neo4j/entrypoint.sh y docker compose config --quiet. Ejecuta los scripts desde Linux/macOS/Git Bash/WSL, no desde PowerShell. No uses docker compose down -v en rebuilds porque elimina volumenes. Ver docs/backup-restore.md para restore, fallback manual y limitaciones de Neo4j Community.
- Desde la raiz del repo:
- Backend:
python -m pytest backend/tests/test_event_service_smoke.py backend/tests/test_routers_metrics_events.py backend/tests/test_snmp_service_snapshots.py - Frontend:
corepack pnpm --dir frontend run test:run -- hooks/queries/resourceQueries.test.tsx components/__tests__/EventDetailModal.acceptance.test.tsx
- Backend:
Si querés correr el frontend Vite/React directamente en tu maquina (sin
levantar el stack completo con docker compose up), este flujo es para vos.
docker compose up ya cubre el frontend en su contenedor, asi que no
uses esta guia si vas por Docker: ahi el compose monta frontend/ y corre
la install adentro.
Pasos resumidos (detalle completo en frontend/README.md):
- Habilita Corepack una vez por maquina:
corepack enable. - Desde la raiz del repo:
corepack pnpm install --frozen-lockfile. - Pre-flight de dependencias (opcional, recomendado):
corepack pnpm --dir frontend run check:deps. - Dev server:
corepack pnpm --dir frontend run dev(sirve enhttp://localhost:3000). - Tests focalizados:
corepack pnpm --dir frontend run test:run.
Troubleshooting rapido para el error mas comun
(Failed to resolve import "sonner" from context/AuthContext.tsx): la
propia dependencia esta declarada en frontend/package.json y en el
lockfile, pero falta en frontend/node_modules. La causa tipica es no
haber corrido corepack pnpm install --frozen-lockfile despues de un
git pull. pnpm run check:deps detecta esto via el sentinel
frontend/.frontend-deps-ok y corre el install automaticamente.
Cuando el frontend corre dentro de Docker (lo normal con docker compose up)
y el lockfile cambio pero la imagen ya estaba construida, la propia
safe-rebuild.sh detecta el cambio y renueva solo el volumen anonimo de
frontend /app/node_modules con
docker compose up -d --force-recreate --renew-anon-volumes frontend. Si
necesitas hacerlo a mano despues de un cambio puntual del lockfile, usa
sh scripts/refresh-frontend-deps.sh (acepta --dry-run para previsualizar).
No borres volumenes con docker compose down -v ni docker volume rm:
esos comandos tambien eliminan datos de PostgreSQL/Neo4j.
- El modal de detalle ya consume contexto real de negocio e ITSM mediante endpoint dedicado.
- Los eventos nuevos conservan snapshot historico; los viejos siguen funcionando con fallback por relaciones actuales.
- La integracion externa con Jira/ServiceNow sigue pendiente; el contrato ya deja listo el punto de acople.