Guía CNS — CreaRack Network Sentinel
Guía CNS — CreaRack Network Sentinel
Edge Intelligence: IA para diagnóstico automático de anomalías de red con Human-in-the-Loop. Versión: v1.0.43 (17-03-2026) Ubicación: Observatory, Wireless, UPS (pestaña CNS centralizada + sidebar indicators + Rack Editor)
Índice
- Visión General
- Arquitectura
- Flujo Completo
- AI Providers
- Detección de Anomalías (Agent)
- Modelo AIInsight
- Frontend — Pestaña CNS
- InsightDetailModal
- Explain (Preguntas al AI)
- Revise Diagnosis
- Ejecución de Comandos
- Auto-Resolve
- Network Tutor
- Rate Limiting
- WebSocket Real-Time
- Integraciones Cross-Module
- API Endpoints
- Administración
- Probando el Sistema
1. Visión General
CreaRack Network Sentinel (CNS) es el sistema de inteligencia artificial integrado en CreaRack Pro que:
- Detecta anomalías en la red automáticamente (Agent local en modo Sentinel)
- Diagnostica la causa raíz usando Gemini 3 Flash o Claude Haiku
- Recomienda acciones correctivas con comandos SSH específicos
- Espera aprobación del operador antes de ejecutar (Human-in-the-Loop)
- Ejecuta los comandos via el Agent y reporta resultados
- Aprende del feedback del operador (Explain + Revise Diagnosis)
Componentes
| Componente | Ubicación | Función |
|---|---|---|
| AnomalyDetector | Agent (Sentinel loops) | Detecta anomalías por umbrales |
| InsightReporter | Agent → SaaS API | Reporta anomalías al SaaS |
| AI Providers | SaaS (Gemini/Claude/Static) | Genera diagnóstico + recomendación |
| AIInsight Model | PostgreSQL | Persiste diagnósticos + audit trail |
| InsightDetailModal | Frontend JS | Modal compartido para interacción |
| ScopedInsightTab | Frontend JS (centralized) | Reusable CNS tab scoped by targetIds |
| InsightIndicatorService | Frontend JS (centralized) | Sidebar pulsing dots + WS real-time |
| CNS Tab | Observatory, Wireless, UPS | Dashboard con tabla + stats + filtros |
| Network Tutor | Observatory sidebar | Asistente AI para preguntas de red |
2. Arquitectura
┌──────────────────────┐ POST /sentinel/insights/receive
│ LOCAL AGENT │ ──────────────────────────────────────→ ┌─────────────────────┐
│ (Sentinel Mode) │ │ SAAS BACKEND │
│ │ WebSocket (bi-directional) │ │
│ AnomalyDetector │ ←────────────────────────────────────── │ AI Providers │
│ InsightReporter │ ai_remediate commands │ (Gemini/Claude) │
│ Scrapli SSH exec │ │ │
└──────────────────────┘ │ ITSM Hooks │
│ (SLA, Notif, etc) │
┌──────────────────────────────────────────────────────── │ │
│ WebSocket broadcast (insight_update) └─────────────────────┘
▼
┌──────────────────────┐
│ BROWSER │
│ Observatory CNS │
│ InsightDetailModal │
│ Sidebar indicators │
│ Rack Editor badges │
└──────────────────────┘
3. Flujo Completo
Detect → Diagnose → Act → Learn
1. AGENT DETECTA ANOMALÍA
Sentinel loop detecta: packet loss >10%, latency >200ms,
CRC errors >100/min, client drop >30%, interface down
2. AGENT REPORTA AL SAAS
POST /sentinel/insights/receive
Body: { target_id, snmp_data, ssh_logs, anomaly_description }
3. SAAS PROCESA
a) Verifica maintenance window → suprime si activa
b) Verifica rate limit (5/device/h, 100/tenant/h)
c) Llama a Gemini 3 Flash (o Claude, o static rules como fallback)
d) Crea AIInsight en DB + audit log
e) Calcula SLA deadlines
f) Busca known issues + runbooks
g) Correlaciona con incidents existentes
h) Envía notificaciones
i) Broadcast via WebSocket a Observatory
4. OPERADOR VE EL INSIGHT
- Toast notification en Observatory
- Insight aparece en tabla CNS
- Sidebar muestra dot pulsante en el device
- Rack Editor muestra badge en Properties Panel
5. OPERADOR INTERACTÚA
a) Ver detalle → InsightDetailModal
b) Preguntar al AI → Explain (persistido en DB)
c) Revisar diagnóstico → Revise Diagnosis
d) Aplicar fix → Apply (envía comandos al Agent)
e) Acknowledge → cierra el caso con notas
6. AGENT EJECUTA COMANDOS (si Apply)
- Recibe comandos via WebSocket
- Ejecuta via Scrapli SSH
- Reporta resultado: POST /sentinel/insights/{id}/result
7. AUTO-RESOLVE (si el device se recupera)
Agent detecta recovery → POST /sentinel/insights/recover/{target_id}
Insights de connectivity se auto-acknowledgen
4. AI Providers
Proveedores disponibles
| Provider | Modelo | Uso | Configuración |
|---|---|---|---|
| Gemini | gemini-3-flash-preview | Principal (diagnóstico + explain) | GEMINI_API_KEY |
| Claude | claude-haiku-4-5-20251001 | Alternativo | ANTHROPIC_API_KEY |
| Static | Reglas heurísticas | Fallback automático | Sin API key |
Selección del provider
Variable EDGE_AI_PROVIDER en settings (default: gemini). Se puede cambiar a claude.
Fallback automático
Si Gemini falla (error 429, timeout, etc.), el sistema hace fallback a Static Rules automáticamente. Static Rules tiene 6 reglas para patrones comunes:
- CRC errors, packet loss, interface down, bandwidth saturation, latency spike, client drop
Gemini backoff exponencial
Para errores 429 (RESOURCE_EXHAUSTED):
- 3 reintentos: 2s → 4s → 8s (max 30s)
- Si los 3 fallan → fallback a static
Configuración AI
| Parámetro | Gemini | Claude |
|---|---|---|
| Temperature | 0.2 | 0.2-0.3 |
| Max tokens (explain) | 512 | 512 |
| Max tokens (revise) | 768 | 768 |
| Response format | JSON mode | Text + parse |
5. Detección de Anomalías (Agent)
El Agent local en modo Sentinel ejecuta loops de monitoreo continuos:
Umbrales de detección
| Anomalía | Umbral | Sentinel Loop |
|---|---|---|
| Packet loss | >10% | ping_loop |
| Latency | >200ms | ping_loop |
| CRC errors | >100/min | snmp_bandwidth_loop |
| Client drop | >30% | snmp_extras |
| Interface down | Estado = down | snmp_bandwidth_loop |
| Bandwidth saturation | >90% | snmp_bandwidth_loop |
Rate limiting del Agent
- Cooldown 5 min por tipo de anomalía por target
- Max 10 insights/hora global
- Se complementa con rate limiting del SaaS
Requisitos
- Agent conectado al SaaS via WebSocket
- Agent en rol Primary (solo Primary ejecuta Sentinel)
- Modo Sentinel activo
6. Modelo AIInsight
Ciclo de vida (status)
┌──────────┐
│ PENDING │ ← Insight creado por AI
└────┬─────┘
│
┌────────┼────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌─────────┐
│EXECUTING│ │ACKNOWL.│ │ EXPIRED │
└────┬───┘ └────────┘ └─────────┘
│ (auto, 4h)
┌────┼────┐
▼ ▼
┌────────┐ ┌────────┐
│ APPLIED│ │ FAILED │
└────────┘ └────────┘
| Status | Significado |
|---|---|
pending | Esperando acción del operador |
executing | Comandos enviados al Agent, esperando resultado |
applied | Comandos ejecutados exitosamente |
acknowledged | Operador reconoció el insight (con/sin aplicar fix) |
expired | 4 horas sin acción, expirado automáticamente |
failed | Ejecución de comandos falló |
Risk levels
| Nivel | Color | Criterios |
|---|---|---|
| HIGH | Rojo (#ef4444) | 100% packet loss, device unreachable, security threats |
| MEDIUM | Naranja (#f59e0b) | >30% loss, bandwidth saturation, interface down |
| LOW | Azul (#3b82f6) | Anomalías menores, degradación leve |
Campos principales
| Campo | Tipo | Descripción |
|---|---|---|
incident_id | UUID | Identificador único universal |
case_id | str | Formato CNS-000042 (auto-increment por org) |
summary | str(200) | Resumen del diagnóstico AI |
root_cause | text | Causa raíz identificada |
confidence_score | float | 0.0 - 1.0 (confianza del AI) |
osi_layer | int | Capa OSI afectada (1-7) |
telemetry_insight | text | Contexto de telemetría |
action_label | str(200) | Acción recomendada |
risk_level | str | HIGH / MEDIUM / LOW |
commands | JSON list | Comandos SSH recomendados |
rollback_commands | JSON list | Comandos de rollback |
ai_provider | str | gemini / claude / static |
anomaly_trigger | str | Descripción de la anomalía original |
expires_at | datetime | Auto-expira 4h después de creación |
Campos de revisión
| Campo | Descripción |
|---|---|
is_revised | True si fue re-evaluado |
original_summary | Summary antes de revisión |
original_root_cause | Root cause antes de revisión |
revised_at | Timestamp de la revisión |
revised_by | Usuario que solicitó la revisión |
Audit Log
Cada acción sobre un insight se registra en AIInsightAuditLog:
created,executing,execution_result,acknowledged,auto_resolved,rollback,revise- Incluye: usuario, timestamp, detalles JSON
7. Frontend — Pestaña CNS
Acceso
Observatory → pestaña CNS (CreaRack Network Sentinel)
Componentes
Stats bar (tarjetas clickables):
- Total, Pending, Executing, Applied, Acknowledged
- Success Rate (%)
- Click en una tarjeta → filtra la tabla por ese status
Filtros:
- Status (dropdown, sincronizado con stat cards)
- Risk Level (HIGH / MEDIUM / LOW)
- Search (busca en summary, root_cause, target, IP, case number)
- Date range (from / to)
Tabla paginada (25 por página):
- Case ID (monospace)
- Risk (badge con color)
- Target + IP
- Summary (con badges REV si revisado, (N) si tiene conversaciones)
- Status (badge)
- Confidence (%)
- Date
- Actions: Details, Acknowledge
Export CSV: Descarga hasta 500 insights con todos los campos.
Auto-refresh: Cada 60 segundos cuando la pestaña está activa.
8. InsightDetailModal
Modal compartido entre Observatory CNS, Rack Editor y Acknowledge History.
Contenido del modal
- Header: “AI Insight Detail [CNS-000042]”
- Info Grid (2 columnas): Target, Risk, Confidence, Status, Provider, OSI Layer, Created, Expires
- ITSM Badges (si configurado): SLA deadlines, escalation level, known issue, runbook, incident group
- Summary (con badge REVISED + original en cursiva si revisado)
- Root Cause (con original en cursiva si revisado)
- Telemetry Insight
- Recommended Action
- Impact Description
- Commands (bloques de código monospace)
- Rollback Commands
- Acknowledge (input notas + botón)
- Acknowledge Info (si ya acknowledged: quién, cuándo, notas)
- Action Buttons: Apply Fix (si actionable), Dry Run
- Explain (input pregunta + respuesta AI)
- Conversation History (lazy-loaded, scrollable)
- Revise Diagnosis (si hay conversaciones previas)
Acciones disponibles
| Acción | Condición | Efecto |
|---|---|---|
| Details | Siempre | Abre el modal completo |
| Apply Fix | status=pending, no expirado, tiene comandos | Envía comandos al Agent |
| Dry Run | Siempre (si tiene comandos) | Valida sin ejecutar |
| Rollback | status=applied o executing | Envía comandos de rollback |
| Acknowledge | status != acknowledged | Marca como reconocido + notas |
| Explain | Siempre | Pregunta contextual al AI |
| Revise | Hay 1+ conversaciones | AI re-evalúa el diagnóstico |
9. Explain (Preguntas al AI)
Cómo funciona
- En el InsightDetailModal, escribir una pregunta en el campo Explain
- Pulsar Enter o click en el botón
- El AI responde usando el contexto completo del insight (target, summary, root cause, comandos, etc.)
- La pregunta y respuesta se persisten en DB (
InsightConversation) - Aparecen en el historial de conversaciones del modal
Persistencia
Cada Q&A se guarda como InsightConversation:
question: La pregunta del operadoranswer: La respuesta del AIai_provider: Gemini o Claudeasked_by: El usuario que preguntócreated_at: Timestamp
El historial completo se carga via GET /sentinel/insights/{id}/conversations.
Ejemplo
Pregunta: "¿Por qué hay CRC errors en esta interfaz?"
Respuesta: "Los errores CRC en GigabitEthernet0/1 sugieren problemas en la capa
física (Layer 1). Las causas más comunes son: cable dañado o mal crimpado, SFP
defectuoso, incompatibilidad de dúplex..."
10. Revise Diagnosis
Qué es
Después de hacer preguntas (Explain), el operador puede pedirle al AI que re-evalúe su diagnóstico original considerando la información adicional de la conversación.
Requisitos
- Al menos 1 conversación (Explain) registrada
- Botón “Revise Diagnosis” aparece debajo del historial de conversaciones
Proceso
- Click en “Revise Diagnosis”
- El AI recibe: contexto original + todas las conversaciones
- Evalúa si el diagnóstico debe cambiar
- Si
revised: true:- Guarda
original_summaryyoriginal_root_cause - Actualiza
summary,root_cause,confidence_score - Marca
is_revised = true,revised_at,revised_by - Badge “REVISED” púrpura en el modal y tabla CNS
- Guarda
- Si
revised: false:- Solo muestra “Diagnosis confirmed — no changes needed”
- Audit log con
action="revise"
11. Ejecución de Comandos
Flujo Apply
- Operador click “Apply Fix” en InsightDetailModal
- Backend valida comandos contra vendor whitelist
- Status: PENDING → EXECUTING
- Comandos se envían al Agent via WebSocket (
ai_remediate) - Agent ejecuta via Scrapli SSH en el dispositivo
- Agent reporta resultado:
POST /sentinel/insights/{id}/result - Status: EXECUTING → APPLIED (éxito) o FAILED (error)
Command Whitelist
Comandos seguros (permitidos):
show, display, get, ping, traceroute, dir, more
Comandos bloqueados (prohibidos):
reload, reboot, erase, format, delete, write erase,
copy running-config startup-config, configure replace
Comandos vendor-específicos (extras permitidos):
- Cisco IOS:
clear counters,clear arp-cache,interface,no shutdown - NX-OS:
clear counters,interface,system mode maintenance - Arista EOS:
clear counters,interface,ip route - Juniper JunOS:
clear interfaces statistics,set interfaces,commit
Dry Run
Valida los comandos sin ejecutar. Retorna:
valid: true/falseerror: mensaje si inválidocommands: lista de comandos que se ejecutaríanvendor: vendor detectado del dispositivo
Rollback
Si se aplicó un fix y hay problemas, el operador puede ejecutar rollback:
- Usa
rollback_commandsdel insight - Valida contra la misma whitelist
- Se ejecuta por el mismo flujo (WebSocket → Agent → SSH)
12. Auto-Resolve
Qué es
Cuando un dispositivo que estaba caído se recupera, el Agent lo detecta y reporta al SaaS. Los insights de pérdida de conectividad pendientes se auto-acknowledgen.
Keywords de conectividad
Solo se auto-resuelven insights cuyo summary o anomaly_trigger contenga:
"total loss""unreachable""100%""device down"
Insights de CRC, latencia, bandwidth, etc. no se auto-resuelven (requieren acknowledge manual).
Flujo
- Agent detecta que el target responde a ping (estaba down)
- Agent envía:
POST /sentinel/insights/recover/{target_id} - SaaS busca insights PENDING del target con keywords de connectivity
- Marca como ACKNOWLEDGED con nota “Auto-resolved: device connectivity recovered”
- Broadcast via WebSocket
13. Network Tutor
Qué es
Asistente AI de networking integrado en el sidebar del Observatory. Responde preguntas de networking desde nivel CCNA hasta CCIE.
Acceso
Observatory → botón “Network Tutor” en el sidebar (slide-in panel)
Guardrails de tópico
Filtro de 2 capas:
- Pre-filtro de keywords (~130 términos de networking): si la pregunta no contiene ningún término relevante, se rechaza antes de llamar al API
- System prompt: instrucción al AI de solo responder sobre networking
Contexto de dispositivo
Si hay un dispositivo seleccionado en Observatory, el tutor recibe su contexto (nombre, IP, vendor, tipo) para respuestas más específicas.
Historial
- 50 mensajes por usuario
- TTL 4 horas
- Almacenado en Valkey (cache)
Endpoints
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/sentinel/tutor/ask | Hacer pregunta (con device context opcional) |
| GET | /api/sentinel/tutor/history | Obtener historial |
| POST | /api/sentinel/tutor/clear | Limpiar historial |
14. Rate Limiting
SaaS-side
| Límite | Valor | Scope |
|---|---|---|
| Per device | 5 insights/hora | Por target_id |
| Per tenant | 100 insights/hora | Por organization |
Si se excede → HTTP 429 con mensaje de error.
Agent-side
| Límite | Valor |
|---|---|
| Cooldown por anomalía/target | 5 minutos |
| Global | 10 insights/hora |
15. WebSocket Real-Time
Eventos broadcast
Cuando se crea un insight, el SaaS envía via WebSocket a todos los browsers de la organización:
{
"type": "insight_update",
"data": {
"insight_id": 42,
"summary": "Packet loss detected on GigabitEthernet0/1",
"risk_level": "HIGH",
"target_name": "switch-core-01",
"status": "pending",
"timestamp": "2026-03-10T14:30:00Z"
}
}
Efectos en el frontend
- Toast notification en Observatory
- Auto-refresh de la tabla CNS
- Sidebar indicator: dot pulsante (rojo/naranja/azul según riesgo) en el device afectado
- Rack Editor: badge clickable en Properties Panel si el device tiene insights activos
16. Integraciones Cross-Module
Arquitectura Centralizada (v1.0.43+)
A partir de v1.0.43, CNS utiliza servicios centralizados reutilizables en lugar de implementaciones por página:
ScopedInsightTab
Servicio centralizado (static/js/services/ScopedInsightTab.js) que renderiza una pestaña CNS completa (stats, filtros, tabla paginada, export CSV, auto-refresh) scoped a un conjunto de targetIds.
import { ScopedInsightTab } from '../services/ScopedInsightTab.js';
const cns = new ScopedInsightTab({
containerId: 'my-cns-container',
targetIds: [1, 2, 3],
actionNamespace: 'wireless',
});
cns.render();
| Parámetro | Descripción |
|---|---|
containerId | ID del contenedor DOM donde se renderiza la pestaña |
targetIds | IDs de MonitoringTarget — filtra insights a estos targets |
actionNamespace | Prefijo para data-action (evita conflictos entre pestañas CNS simultáneas) |
InsightIndicatorService
Servicio centralizado (static/js/services/InsightIndicatorService.js) que gestiona puntos pulsantes (.insight-indicator) junto a los nombres de dispositivos en sidebars. Soporta actualizaciones en tiempo real via WebSocket (insight_update).
- Rojo = HIGH
- Naranja = MEDIUM
- Azul = LOW
DeviceProfile.assigned_page (antes MonitoringTarget.scope)
El campo scope de MonitoringTarget fue eliminado (Ficha Central F4, migración monitoring/0025): el target es 1:1 por (organization, ip_address). La pertenencia a página la decide ahora DeviceProfile.assigned_page (network/models/profile.py, valores: wireless, ups, signage; null = sin asignar). Cada página obtiene sus target IDs filtrando fichas por página y siguiendo linked_monitoring_target:
# Backend: obtener los target IDs de una página (Ficha Central)
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]
Filtrado por target_ids en endpoints
Los endpoints insight_stats y list_insights aceptan un parámetro opcional target_ids (comma-separated):
GET /api/sentinel/insights/stats/?target_ids=1,2,3
GET /api/sentinel/insights/?target_ids=1,2,3&status=pending
Cuando no se proporcionan target_ids, se retornan todos los insights de la organización (comportamiento original).
Patrón de integración para nuevas páginas
Para añadir CNS a un nuevo tipo de dispositivo (ej: Switches):
- Backend: Añadir el choice a
DeviceProfile.assigned_pagey asignarassigned_page='switches'a las fichas del nuevo tipo (el MonitoringTarget es universal, no se toca) - View: Pasar
target_ids(lista de IDs) al template context - Template: Añadir tab header “CNS” y un container div vacío
- JS coordinator: Instanciar
ScopedInsightTabconcontainerId,targetIdsdel template, yactionNamespaceúnico - JS coordinator: Instanciar
InsightIndicatorServicepara los dots del sidebar - WS handler: En el handler de
insight_update, llamar acnsTab.refresh()yindicators.update() - ITSM: Añadir botón “ITSM Settings” que navega a
/monitoring/observatory/?tab=itsm
Páginas con CNS integrado
| Página | assigned_page | Namespace | Target IDs |
|---|---|---|---|
| Observatory | — (fleet-wide, sin filtro de página) | observatory | Todos los targets de la organización |
| Wireless | wireless | wireless | Targets de fichas con assigned_page="wireless" |
| UPS | ups | ups | Targets de fichas con assigned_page="ups" |
Observatory — Widget Overview
Widget “AI Insights” en el GridStack de Overview con cards de insights activos (risk color, summary, target, actions).
Observatory — Pestaña CNS
Dashboard completo con stats, filtros, tabla paginada, export CSV. Refactorizado como thin wrapper de ScopedInsightTab.
Observatory — Sidebar
Dot pulsante via InsightIndicatorService en cada device que tiene insights activos.
Rack Editor — Properties Panel
Indicador clickable en el panel de propiedades del dispositivo. Click → abre InsightDetailModal con todas las acciones (Apply, Acknowledge, Explain, Revise).
Acknowledge History Modal
Modal master-detail en Observatory (botón “History”):
- Panel izquierdo: lista compacta de insights acknowledged con risk dots, target, summary
- Panel derecho: detalle completo del insight seleccionado
- Búsqueda + filtro por risk level
- AI Explain inline
17. API Endpoints
Insights CRUD
| # | Método | Endpoint | Descripción |
|---|---|---|---|
| 1 | POST | /api/sentinel/insights/receive | Recibir anomalía del Agent |
| 2 | GET | /api/sentinel/insights/ | Listar insights (filtros, paginación) |
| 3 | GET | /api/sentinel/insights/{id}/ | Detalle de un insight |
| 4 | GET | /api/sentinel/insights/stats/ | Estadísticas por status |
| 5 | GET | /api/sentinel/insights/stats/providers/ | Estadísticas por provider |
Acciones sobre insights
| # | Método | Endpoint | Descripción |
|---|---|---|---|
| 6 | POST | /api/sentinel/insights/{id}/acknowledge | Acknowledge con notas |
| 7 | POST | /api/sentinel/insights/{id}/explain | Pregunta contextual al AI |
| 8 | GET | /api/sentinel/insights/{id}/conversations | Historial de conversaciones |
| 9 | POST | /api/sentinel/insights/{id}/revise | Re-evaluar diagnóstico |
| 10 | POST | /api/sentinel/insights/{id}/apply | Aplicar fix (enviar al Agent) |
| 11 | POST | /api/sentinel/insights/{id}/dry-run | Validar comandos sin ejecutar |
| 12 | POST | /api/sentinel/insights/{id}/rollback | Ejecutar rollback |
| 13 | POST | /api/sentinel/insights/{id}/result | Agent reporta resultado |
Recovery + Admin
| # | Método | Endpoint | Descripción |
|---|---|---|---|
| 14 | POST | /api/sentinel/insights/recover/{target_id} | Agent reporta recovery |
| 15 | DELETE | /api/sentinel/insights/purge | Purgar todos (superuser) |
Network Tutor
| # | Método | Endpoint | Descripción |
|---|---|---|---|
| 16 | POST | /api/sentinel/tutor/ask | Preguntar al tutor |
| 17 | GET | /api/sentinel/tutor/history | Historial de chat |
| 18 | POST | /api/sentinel/tutor/clear | Limpiar historial |
Total: 18 endpoints CNS
18. Administración
Purgar insights (Superuser only)
DELETE /api/sentinel/insights/purge
Elimina todos los insights de la organización actual. Solo accesible para superusuarios.
Purgar via CLI (producción)
docker exec -it 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} deleted') for t in ['monitoring_notificationlog','monitoring_insightconversation','monitoring_aiinsightauditlog','monitoring_insightlink','monitoring_aiinsight']]"
Django Admin
Los modelos AIInsight, AIInsightAuditLog e InsightConversation están registrados en Django Admin con filtros y búsqueda.
Reset del Sentinel (Agent)
Si el Agent acumula errores, cooldowns o rate limits que bloquean la generación de insights:
Desde la UI: Modal Agent Fleet Manager → columna Actions → botón Reset
Via API local:
curl -X POST http://localhost:5050/sentinel/reset
Limpia: rate limits (10/hora), cooldowns (5 min por target), circuit breakers, contadores de error del InsightReporter. No reinicia el proceso.
Configuración del provider
En config/settings/base.py:
EDGE_AI_PROVIDER = env("EDGE_AI_PROVIDER", default="gemini")
GEMINI_API_KEY = env("GEMINI_API_KEY", default="")
ANTHROPIC_API_KEY = env("ANTHROPIC_API_KEY", default="")
19. Probando el Sistema
Prerequisitos
- Agent conectado y en modo Sentinel (Primary)
- Targets configurados en Observatory con dispositivos monitoreados
- API keys configuradas (Gemini o Anthropic)
Generar un insight manualmente (via API)
Si no quieres esperar a que el Agent detecte una anomalía:
curl -X POST https://crearack.com/api/sentinel/insights/receive \
-H "Content-Type: application/json" \
-H "Cookie: sessionid=YOUR_SESSION_ID" \
-d '{
"target_id": 1,
"snmp_data": {"ifInErrors": 150, "ifOutErrors": 50},
"ssh_logs": "",
"anomaly_description": "CRC errors detected: 200 errors/min on GigabitEthernet0/1"
}'
Verificar el flujo
- Insight creado → aparece en pestaña CNS
- Explain → pregunta “¿Qué causa los CRC errors?” → respuesta AI
- Revise → después de 1+ explains → “Revise Diagnosis”
- Acknowledge → escribir nota “Investigated, replacing cable” → Acknowledge
- Export CSV → verificar que el insight aparece
- Stats → verificar contadores actualizados
Verificar WebSocket
Abrir Observatory → crear un insight via API → debería aparecer un toast notification y el insight en la tabla sin recargar la página.
Verificar ITSM integration
- Configurar SLA policies (ITSM tab → Initialize Default Policies)
- Crear un insight → verificar que tiene
sla_ack_deadlineen el detail modal - Esperar > ack_minutes → verificar
sla_ack_breached= true
Archivos del Sistema
Backend
| Archivo | LOC | Descripción |
|---|---|---|
monitoring/models_insight.py | ~180 | AIInsight + AuditLog + Conversation |
monitoring/services/insight_service.py | 379 | Orquestador principal |
monitoring/services/explain_service.py | 64 | Explain + Revise AI calls |
monitoring/services/command_validation.py | 88 | Vendor command whitelists |
monitoring/services/ai_providers/ | ~400 | Gemini + Claude + Static + base |
monitoring/services/ai_guardrails.py | ~80 | Topic filter para Tutor |
monitoring/api/insights.py | 342 | Endpoints principales |
monitoring/api/insight_execution.py | 221 | Apply/dry-run/rollback/result |
monitoring/api/insight_schemas.py | 189 | Schemas API |
monitoring/consumers.py | ~150 | WebSocket broadcast |
Frontend
| Archivo | LOC | Descripción |
|---|---|---|
static/js/pages/observatory/ObservatoryCNS.js | 285 | Pestaña CNS |
static/js/pages/observatory/ObservatoryCNSHistory.js | ~200 | Acknowledge History modal |
static/js/utils/InsightDetailModal.js | 347 | Modal compartido |
static/js/utils/InsightUtils.js | ~60 | Colores, helpers |
static/js/utils/InsightActions.js | ~80 | handleExplain, buildActions |
Última actualización: 17-03-2026 Mantenido por: Claude (Anthropic) + Equipo CreaRack
Véase también
- [[concept—monitoring—cns]]
- [[crearack—monitoring—cns-sentinel]]
- [[crearack-tech—agents—dev-cns]]
- [[crearack-tech—guides—cns-itsm-user-guide]]
- [[crearack-tech—guides—itsm-guide]]
- [[crearack-tech—architecture—sentinel-mode]]
- [[crearack-tech—guides—sentinel-24-7-test]]