Resumen
Cierre de la feature DCIM #134 iniciada en v1.57.0. Tras el click-test de Edu, se unifican las unidades (W), se visualizan los totales reales de equipos en el modal de información del rack, y se incorpora la capacidad al Project Report (PDF imprimible) con indicadores visuales (ámbar ≥90%, rojo si se supera).
Cambios principales
1. Unidad de potencia unificada a vatios (W)
Contexto: El campo power_consumption del modelo Rack tenía la etiqueta “kWh” en la UI, pero el motor de rollup (racks/services/rollup.py) siempre lo trató como W. La confusión ocurrió en v1.57.0 cuando el usuario Edu imprimió el reporte y vio datos incoherentes.
Solución:
- Cambio de etiqueta en
templates/editor.htmllínea ~368:"Kwh"→"W"(sin modificar datos). - Ajuste del comentario en
racks/models.py(línea ~79) aclarando que es W, no kWh. - No hay migración de datos — el consumo nominal siempre fue en vatios internamente.
Impacto: Usuarios ven ahora “W” tanto en el editor como en los badges de cabecera de equipos.
2. “Devices total” en el modal Rack Information
Contexto: Cuando el usuario editaba los límites de potencia/peso del rack, no podía ver en tiempo real el Σ de sus equipos. Debía salir del modal, revisar badges, volver a entrar.
Solución:
- Nueva función
getCapacityTotals()enstatic/js/editor/devices.js(líneas ~260-271) que centraliza el cálculo de W, kg, U ocupadas. - Refactor:
updatePowerRollup()ahora usagetCapacityTotals()internamente (paridad conracks/services/rollup.py). - En
ui_panels.js, al abrir el modal, se rellena#modal-rack-devices-totalcon el formato:"350 W · 82 kg · 12/42U". - Template
editor.html(línea ~367) añade nueva fila:<div style="font-size: 0.9rem;"><strong>Devices total:</strong> <span id="modal-rack-devices-total">—</span></div>. - Traducción ES en
locale/es/LC_MESSAGES/django.po: “Devices total:” → “Total de los equipos:”.
Impacto: El usuario ve en vivo el consumo total al fijar límites.
3. Capacidad en el Project Report (/report)
Contexto: v1.57.0 añadió validación de capacidad en el PDF por-rack (endpoint /api/racks/{rack_id}/pdf). Pero el “Project Report” (la vista /report que genera un PDF con todos los racks) se quedó sin esta información. El click-test de Edu imprimió /report, no el PDF individual, y faltaban los datos.
Solución:
-
Nuevo código en
core/views.py(líneas ~238-260):- Función helper
_capacity_state(used, limit)que retorna estado CSS:""(OK),"warn"(≥90%),"over"(>100%). - Loop sobre racks asignando
rack.capacity(dict conused_u,power_w,weight_kg,capacity_u,pct_u, etc.) usandorack_rollup(). - Tres campos de estado:
capacity_space_state,capacity_power_state,capacity_weight_state.
- Función helper
-
Template
report.html(líneas ~62-65) añade tres nuevas filas en la cabecera de cada rack:<div class="info-item cap-{{ rack.capacity_space_state|default:'ok' }}"><strong>Space:</strong> {{ rack.capacity.used_u }}/{{ rack.capacity.capacity_u }}U ({{ rack.capacity.pct_u }}%)</div> <div class="info-item cap-{{ rack.capacity_power_state|default:'ok' }}"><strong>Power:</strong> {{ rack.capacity.power_w|floatformat:"0" }} W{% if rack.max_power_w %} / {{ rack.max_power_w|floatformat:"0" }} W{% endif %}</div> <div class="info-item cap-{{ rack.capacity_weight_state|default:'ok' }}"><strong>Weight:</strong> {{ rack.capacity.weight_kg|floatformat:"1" }} kg{% if rack.max_weight_kg %} / {{ rack.max_weight_kg|floatformat:"0" }} kg{% endif %}</div> -
Estilos CSS en
report.html(líneas ~246-249):.info-item.cap-warn { color: #854d0e; font-weight: 600; } .info-item.cap-over { color: #991b1b; font-weight: 600; }Print-safe (no usa transparencias, colores de texto duros).
-
Traducción ES: “Space:” → “Espacio:”, “Power:” → “Potencia:”, “Weight:” → “Peso:”.
Impacto: El PDF imprimible ahora muestra capacidad con avisos visuales ámbar/rojo, alineado con el PDF por-rack.
Testing
Test nuevo en tests/api/test_rack_capacity.py (líneas ~105-122): test_project_report_includes_capacity
- Crea un rack con límite de potencia 100 W.
- Añade un equipo de 250 W (supera límite).
- Verifica que el HTML del reporte contiene
"cap-over"y"250 W / 100 W"y"1/42U". - Resultado: 7/7 tests verdes en
test_rack_capacity.py.
Notas operativas
Contexto del ciclo: Las versiones v1.55.0 → v1.57.0 no llegaron a STAGE/PROD en el primer intento. Los auto-deploys de Dokploy fallaban silenciosamente en el FROM de la imagen base privada (error 401, ghcr.io login hecho en host pero el cliente de build de Dokploy corre en su container). Esto motivó:
- Fix inmediato del build client.
- Task #201: persistencia de credenciales de registry vía Settings.
- Footgun documentado:
footguns_dokploy_build_client_in_container_ghcr_login.
La v1.57.1 se despliega con este fix confirmado.
Versión
- v1.57.1 — 2026-07-16
- Anterior: v1.57.0 (2026-07-16 — misma sesión)
- Base: DCIM #134 (capacidad per-rack, iniciado v1.57.0)
Véase también
- [[concept—saas—multi-tenancy]]
- [[concept—dcim—rollup]]
- [[concept—observability—alerting]]