CreaRack-SL

Batching de Deep Discovery en re-escaneos automáticos

Descripción

Desde v1.132.8, el Deep Discovery automático que se dispara tras un re-escaneo de red ya no envía un mensaje WebSocket por perfil al Agente. En su lugar, acumula todos los perfiles elegibles de una pasada de escaneo y los despacha en un solo mensaje en lote, con concurrencia limitada a 3 SNMP simultáneos.

Problema resuelto: El primer escaneo completo del CCIB con v1.132.6 relanzó 114 Deep Discovery automáticos en ~10 segundos — un mensaje por perfil, hasta 114 lecturas SNMP simultáneas compitiendo con la monitorización en el mismo event loop del Agente.

Cambios arquitectónicos

Acumulación en caché (v1.132.6 → v1.132.8)

  • Auto-sink: durante un escaneo por tandas (bulk_enrich_hosts), los perfiles elegibles para Deep Discovery se acumulan en una lista compartida auto_deep_sink en network/services/device_discovery/rescan_hooks.py::auto_deep_discover_after_rescan.
  • Despacho en la última tanda: al terminar la pasada, last_batch=True dispara dispatch_deep_discovery_batch(), que envía TODOS los perfiles juntos en un solo mensaje al Agente.
  • Job único: cada re-escaneo de org recibe un job_key compartido (deep_discover_rescan_job_<org_id>), no uno por perfil.

Extracción de build_deep_discovery_task()

La construcción de la tarea de Deep Discovery se extrajo de dispatch_deep_discovery() a una función reutilizable. Esto permite:

  • Dispatch individual: POST /auto-provision/profiles/{id}/deep-discover (botón manual) sigue siendo uno a uno.
  • Dispatch en lote: dispatch_deep_discovery_batch() usa la misma lógica para todos los perfiles de la tanda.

Configuración

  • Concurrencia: max_concurrent=3 (configurable en dispatch_deep_discovery_batch).
  • Timeout: ventana de espera según tamaño del lote (vía job_key con timeout de 5 minutos).
  • Sin secrets en el transporte: las credenciales SNMP NO viajen en la tarea; el Agente las resuelve server-side por profile_id vía GET /api/agent/profile-credentials/{id}.

Impacto usuario

Desde la interfaz, el comportamiento es idéntico:

  • Manual: Deep Discover en una ficha → envío inmediato al Agente.
  • Automático en re-escaneo: el progreso se acumula y se despacha al final de la tanda, visible en el Observable o en el Observable Monitoring.

El throughput SNMP total es más predecible: máximo 3 lecturas simultáneas, no 100+.

Commits relacionados

  • v1.132.6 (PR #536): Identidad por MAC; extracción de dispatch_deep_discovery() de provision_stages.py.
  • v1.132.8 (PR #538): Batching con last_batch, auto_deep_sink, dispatch_deep_discovery_batch().

Véase también

  • [[crearack—network—discovery]]
  • [[concept—network—performance-optimization]]