CreaRack-SL

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.Device con 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 → endpoint POST /api/monitoring/devices/{id}/enable-monitoring
  • deviceId < 0 → endpoint POST /api/monitoring/profiles/{-id}/enable-monitoring

UX / Impacto en Usuario

  1. “Devices” tab abierta por defecto: lista todos los dispositivos del sistema (racks + Auto-Provision).
  2. Al hacer clic en un dispositivo no monitorizado: aparecen sus gráficas sin pasos extra (se auto-crea el MonitoringTarget reutilizando sus credenciales SNMP).
  3. 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]]