Observatory: Sidebar Unificado de Todos los Dispositivos
Descripción
A partir de sesión 115 (2026-06-08), la página Observatory muestra en su barra lateral todos los dispositivos del sistema, no solo los asignados a racks:
- Dispositivos de rack (como antes): modelos
racks.Devicecon pertenencia a grupo/rack. - Dispositivos detectados por Auto-Provision: perfiles inalámbricos, UPS, cartelería digital y dispositivos sin asignar (modelos
network.DeviceProfile).
Los filtros funcionan igual para ambos:
- Búsqueda por nombre / IP
- Filtro por tipo (
rack/wireless/ups/signage/other) - Filtro por estado (online / offline / unknown)
- Filtro por grupo y rack (oculto automáticamente en la pestaña “Manual”)
La pestaña “Rack” pasa a llamarse “Devices” para reflejar que contiene todos los orígenes.
Cambios Técnicos
monitoring/views.py
Función observatory_view:
# Dispositivos detectados por Auto-Provision (wireless / UPS / signage / sin asignar)
# que no son un Device de rack: se listan también en el sidebar, con su categoría
# (id negativo = DeviceProfile, convención para distinguir en frontend)
for h in terminal_hosts(org)["hosts"]:
if h["source"] != "profile":
continue
devices_with_management.append({
"id": -h["profile_id"],
"name": h["name"],
"ip_address": h["ip"],
"category": h["category"], # rack/wireless/ups/signage/other
"source": "profile",
# ...
})
Reutilización clave: llamada a terminal.services.terminal_hosts(org) para obtener el mismo catálogo unificado que usa Terminal. Sin duplicación de lógica de descubrimiento.
templates/monitoring/observatory.html
Nuevo filtro de tipo:
<select id="device-type-filter" data-on-change="Observatory.filterDevices">
<option value="all">All Types</option>
<option value="rack">Rack</option>
<option value="wireless">Wireless</option>
<option value="ups">UPS</option>
<option value="signage">Digital Signage</option>
<option value="other">Other</option>
</select>
Data attributes en dispositivos:
data-category(rack / wireless / ups / signage / other)data-source(rack / profile / manual)
Seguridad XSS mejorada:
- Cambio de
{{ devices_json|safe }}a{{ devices|json_script:"observatory-devices-data" }}(escapa automáticamente en contexto<script type="module">).
static/js/pages/observatory.js
Auto-enable automático:
En openDeviceTab(), si el dispositivo aún no tiene MonitoringTarget:
} else {
// Sin target todavía → auto-habilitar monitorización
// reutilizando las creds SNMP guardadas
this.enableMonitoringForDevice(deviceId);
}
Método enableMonitoringForDevice() ahora diferencia:
deviceId > 0→ endpointPOST /api/monitoring/devices/{id}/enable-monitoringdeviceId < 0→ endpointPOST /api/monitoring/profiles/{-id}/enable-monitoring
UX / Impacto en Usuario
- “Devices” tab abierta por defecto: lista todos los dispositivos del sistema (racks + Auto-Provision).
- Al hacer clic en un dispositivo no monitorizado: aparecen sus gráficas sin pasos extra (se auto-crea el
MonitoringTargetreutilizando sus credenciales SNMP). - Filtros dinámicos: el tipo aparece/desaparece según la pestaña activa (ocultado en “Manual”).
Métricas
- Archivos cambiados: 3 principales (
views.py,observatory.html,observatory.js) - LOC añadidas: ~34 (views) + template filters + JS logic
- Reutilización:
terminal_hosts()ya existía; se aprovecha aquí.
Véase también
- [[entity—monitoring—endpoint—enable-monitoring-profile]]
- [[feature—network—auto-provision-inline-assignment]]
- [[concept—network—device-inventory]]
- [[concept—saas—multi-tenancy]]