Desarrollo y mantenimiento del sistema CNS (CreaRack Network Sentinel) y Edge Intelligence.
Cubre la app monitoring/ (módulos CNS), los servicios AI, el ITSM y la integración con el Agent.
Los endpoints stats y list aceptan target_ids (comma-separated) para scope por página:
GET /api/sentinel/insights/?target_ids=1,2,3&status=pendingGET /api/sentinel/insights/stats/?target_ids=1,2,3
Arquitectura centralizada (v1.0.43+)
ScopedInsightTab
Servicio reutilizable que renderiza una tab CNS completa (stats, filtros, tabla, export CSV, auto-refresh) scoped a un conjunto de targets.
import { ScopedInsightTab } from '../services/ScopedInsightTab.js';const cns = new ScopedInsightTab({ containerId: 'my-cns-container', targetIds: [1, 2, 3], // Solo insights de estos targets actionNamespace: 'wireless', // Prefijo data-action (evita conflictos)});cns.render();
InsightIndicatorService
Gestiona dots pulsantes en sidebars. Colores: rojo (HIGH) · naranja (MEDIUM) · azul (LOW).
Soporta actualizaciones en tiempo real via WebSocket insight_update.
El campo scope de MonitoringTarget fue eliminado (Ficha Central F4, migración monitoring/0025); la pertenencia a página la decide DeviceProfile.assigned_page (wireless/ups/signage, null = sin asignar). Cada página obtiene sus targets vía las fichas:
profiles = DeviceProfile.objects.filter(organization=org, assigned_page='wireless').select_related( 'linked_monitoring_target')target_ids = [p.linked_monitoring_target_id for p in profiles if p.linked_monitoring_target_id]
Páginas con CNS integrado
Página
assigned_page
Namespace
Observatory
— (fleet-wide, sin filtro)
observatory
Wireless
wireless
wireless
UPS
ups
ups
Patrón para añadir CNS a nueva página
Backend: añadir el choice a DeviceProfile.assigned_page y asignar assigned_page='nueva_pagina' a las fichas
View: pasar target_ids al template context
Template: añadir tab header “CNS” + container div vacío
JS: instanciar ScopedInsightTab con containerId, targetIds, actionNamespace único
JS: instanciar InsightIndicatorService para dots del sidebar
WS handler: en insight_update → cnsTab.refresh() + indicators.update()
Insights de CRC, latencia, bandwidth → require acknowledge manual.
Rate Limiting
Nivel
Límite
SaaS per device
5 insights/hora
SaaS per tenant
100 insights/hora
Agent cooldown por anomalía/target
5 minutos
Agent global
10 insights/hora
Reset desde UI: Agent Fleet Manager → Actions → Reset.
Reset via API: POST http://localhost:5050/sentinel/reset
Administración en producción
# Purgar todos los insights via CLIssh root@crearack.com "docker exec crearack-pro-zcmvsl-web-1 python manage.py shell -c `\"from django.db import connection; cursor = connection.cursor(); `[cursor.execute(f'DELETE FROM {t}') or print(f'{t}: {cursor.rowcount}') `for t in ['monitoring_notificationlog','monitoring_insightconversation', `'monitoring_aiinsightauditlog','monitoring_insightlink','monitoring_aiinsight']]\""
Convenciones y restricciones
Modelo Gemini fijo: gemini-3-flash-preview · Claude fijo: claude-haiku-4-5-20251001
Nunca ejecutar comandos sin validar contra command_validation.py
ScopedInsightTab es el patrón estándar para nuevas integraciones — no reimplementar tab CNS desde cero
InsightIndicatorService centraliza todos los dots del sidebar — no duplicar lógica
Audit log obligatorio para toda acción sobre un insight (AIInsightAuditLog)
Los insights se auto-expiran a las 4h — diseñar UI asumiendo esto