Resumen
El panel de detalle de un dispositivo suelto (WirelessDetail.js) ya tenía su fila de botones; el panel de detalle de un GRUPO —la base común MonitoringGroupDetail.js, heredada por Wireless, UPS y Signage— no tenía ninguno. Este cambio (task #312) añade 5 botones a la cabecera del grupo, disponibles de golpe en los 3 dominios porque el componente es compartido.
Qué hace cada botón
- Deep Discover: lanza un análisis a fondo de TODOS los miembros del grupo a la vez, de dos en dos (
_runGroupDeepDiscover), con el progreso “N/M” escrito en el propio botón y un aviso al terminar con cuántos salieron bien y cuántos fallaron. Reutiliza el mismo despacho HTTP que el botón de un dispositivo suelto — ver Implementación. - Refresh: recarga el resumen, los miembros y las gráficas del grupo al momento, sin esperar a que toque el refresco automático (60/120 s).
- New Tab: abre ese grupo en una pestaña nueva del navegador (
openInNewTabcon?group_id=N), igual que ya podía hacerse con un equipo suelto (?ap_id=/?ups_id=/?device_id=). - Manage Members: abre el modal de grupos del dominio para añadir o quitar equipos.
- Export CSV: descarga la tabla de miembros tal cual se ve en pantalla (cabeceras + celdas de texto), como
<grupo>-members.csv.
Único declinado: el botón “Report” del panel de grupo queda fuera de este cambio, para otro PR.
Implementación
static/js/pages/monitoring/MonitoringGroupDetail.js— la botonera vive en_bindToolbar(cableado una vez al montar el tab);_runGroupDeepDiscoverfiltra los miembros del grupo porgroup_ids, corre 2 workers concurrentes contra la cola de dispositivos, y_exportMembersCsvvuelca la tabla ya renderizada a un Blob CSV (comillas dobles duplicadas por celda, RFC 4180).static/js/pages/monitoring/MonitoringDetailPlumbing.js—dispatchDeepDiscover,pollDeepDiscoverStatusydeepDiscoverSucceededsalen del mixincreateDeepDiscoveryMixina funciones de MÓDULO, para que el deep discovery por grupo las reutilice sin duplicar la llamada HTTP; el mixin del detalle de un dispositivo suelto pasa a delegar en ellas (mismo contrato público, sin cambio de comportamiento).static/js/pages/{wireless,ups,signage}.js,init()— nuevo parámetro?group_id=Nen la URL (igual queap_id/ups_id/device_id): abre la pestaña del grupo en modo standalone (sidebar oculto). Es el receptor del botón “New Tab”.static/js/utils/TabHelper.js(openInNewTab) — reutilizada tal cual, sin cambios.
Tests
frontend/src/__tests__/static/monitoring_group_toolbar.test.js (nuevo, 235 líneas): jsdom + ApiService/showAppToast falsos + reloj simulado (mismo patrón de poll de 3 s que la suite de backoff del deep discovery de un dispositivo). Cubre los 3 descriptores de dominio (WirelessGroupDetail, UpsGroupDetail, SignageGroupDetail) como singletons compartidos por el fichero, cada test con su propio groupId para no cruzar estado (_deepDiscoverGroupsInFlight, _chartGrids…) entre tests del mismo dominio.
Límite honesto
El botón “Report” queda pendiente (fuera de alcance). El cambio es visual/JS puro — no hay verificación automática end-to-end en el navegador real más allá del test de contrato; el click-test manual tras el deploy es quien cierra el ciclo.
Commits relacionados
f6f26285(2026-09-14) — feat(monitoring): botonera en el panel de grupo, PR #534, v1.132.4, task #312.
Véase también
- [[feature—monitoring—deuda-274-tanda-b]]
- [[feature—wireless—deep-discovery-timestamp]]
- [[feature—monitoring—device-config-modal]]
- [[crearack-tech—architecture—wireless-monitor]]
- [[crearack-tech—architecture—ups-monitor]]
Referenciado desde
- Desplegable "Red" en las gráficas de Wireless: clientes y tráfico de una sola VLAN (tarea #390, v1.166.0)
- El informe de un equipo muestra los tres valores más altos y más bajos bajo cada gráfica (v1.153.0)
- La vista grande de una gráfica dice de qué AP o grupo es, también al imprimir y en el PNG (v1.164.6)
- Modo Customize en dashboards de monitorización (Wireless, UPS, Signage, Observatory)
- Registro de caídas y vueltas de cada equipo monitorizado (v1.169.0)