CreaRack-SL

Etiqueta honesta de push en Digital Signage (UI v1.64.0)

Resumen

Remate del Hito B de honestidad en Digital Signage (s95): desde mayo el backend distingue marcas que aceptan despliegue real (push_implemented) vs solo monitorización (SNMP, control de display). Esta versión expone esa verdad en la UI: cada pantalla del listado de la página Signage muestra una etiqueta junto a su marca.

  • “Push” (verde): la marca tiene adapter con API real de despliegue (SpinetiX, BrightSign, Samsung, LG, Yodeck, Signagelive, IAdea).
  • “Monitor only” (gris): solo control SNMP/display, sin API de contenido (Crestron, Philips, Barco, Christie, NEC/Sharp).

Renderizado server-side con la misma lógica que usa el deploy (resolve_signage_adapter + supports_real_push), no una heurística paralela en JS.

Cambios funcionales

Backend: resolve_signage_adapter() mejorada

  • Nuevo parámetro opcional adapters para pasar lista de adapters enabled precargada.
  • Evita N queries en el listado de pantallas (antes resolvía un adapter por dispositivo).
  • Comportamiento sin parámetro idéntico: intacto para callers existentes (5 tests verdes).
  • Ubicación: monitoring/services/signage_service.py:97.

Vista signage_view()

  • Carga una sola vez SignageVendorAdapter.objects.filter(enabled=True) → pasa a todos los resolver.
  • Por cada dispositivo: adapter = resolve_signage_adapter(profile, adapters=enabled_adapters).
  • Calcula push_state: "push" si supports_real_push(adapter.slug), "monitor" en caso contrario, "" si sin adapter.
  • Añade campo push_state al dict devices[] en contexto de template.
  • Ubicación: monitoring/views.py:418–464.

Template y CSS

  • HTML (templates/monitoring/signage.html): Badge inline junto a vendor-badge, con title (tooltip) descriptivo.
    {% if dev.push_state == "push" %}
    <span class="push-badge push-real" title="{% trans '...' %}">{% trans "Push" %}</span>
    {% elif dev.push_state == "monitor" %}
    <span class="push-badge push-monitor" title="{% trans '...' %}">{% trans "Monitor only" %}</span>
    {% endif %}
  • CSS (static/css/pages/signage.css): .push-badge + .push-real (verde, #22c55e) y .push-monitor (gris, #6b7280), tipografía 10px/bold, padding 1px 5px.

i18n

Añadidos 4 strings al catálogo ES (locale/es/LC_MESSAGES/django.po):

  1. "Push" → "Push" (sin traducción — badge label).
  2. "Monitor only" → "Solo monitorización".
  3. "This brand supports real content deployment from CreaRack" → tooltip push.
  4. "Monitoring and display control only — this brand exposes no content deployment API" → tooltip monitor.

Compilado y verificado en Docker; po_dup_check limpio.

Límites de la feature

  • Ubicación: etiqueta solo en el listado lateral de la página Signage; header de detalle de dispositivo no la repite (misma info a 1 clic).
  • Sin consumidor frontend directo de /signage/adapters: la vista resuelve server-side, evitando duplicar matching logic en JS.
  • Adapter resuelto vacío → sin badge: no se adivina; el usuario ve la marca pero sin capacidad hint.

Trazabilidad

AspectoValor
Versión1.64.0 (bumped en config/settings/base.py + README.md)
HitoB — honestidad en signage (s95, referencia anterior: c711907d)
Task#132, acta anotada (s244)
Files9 cambios: servicio, vista, template, CSS, i18n (.po), docs (CHANGELOG, RELEASE_NOTES, README)
LOC~50 nuevas (lógica + UI + CSS)

Véase también

  • [[entity—monitoring—service—resolve-signage-adapter]]
  • [[entity—monitoring—view—signage-view]]
  • [[entity—signage—model—signage-vendor-adapter]]
  • [[concept—signage—honestidad-marca-ui]]
  • [[feature—signage—hito-b-honestidad]]