CreaRack-SL

Descripción

Permite fijar límites de potencia (W) y peso (kg) por rack individual. El editor y el PDF avisan cuando se aproximan o se superan esos límites, mejorando la planificación de capacidad en sala.

Lo que cambia en v1.57.0

  • Campos nuevos en Rack: max_power_w (vatios) y max_weight_kg (kilogramos), ambos con valor por defecto 0 (= sin límite definido).
  • Modal “Rack Information”: dos nuevos inputs para fijar los límites (0 = sin límite; el editor avisa al rebasarlos).
  • Avisos de capacidad en la cabecera del editor:
    • Badge de U ocupadas cambia de 42U a 12/42U (usa ocupado/total).
    • Badge de potencia pasa a mostrar 350 / 3500 W (consumo actual / límite del rack).
    • Badge de peso muestra 80 / 800 kg (peso actual / límite).
    • Coloreo dinámico: ámbar cuando se alcanza el 90% del límite, rojo si se supera (clases capacity-warn / capacity-over en editor.css).
    • Los badges se recalculan al momento al añadir, mover o editar equipos, y al guardar el modal.
  • PDF mejorado del rack: bloque “Capacity” con tabla (Resource / Usage / Status) que muestra estado OK / NEAR LIMIT / OVER LIMIT para Space (U), Power (W) y Weight (kg); columnas nuevas de consumo (W) y peso (kg) por equipo.
  • Backup/restore: los nuevos campos viajan en la exportación completa (backup_full_start / write_full_backup_zip) y se restauran sin romper backups antiguos (campos ausentes → valor 0).
  • i18n: cadenas en español (Potencia máx., Peso máx., etc.) en locale/es/LC_MESSAGES/.
  • API: RackSchema y RackInputSchema exponen los límites; endpoints GET/PUT /api/racks/{id} persisten; exclude_unset protege límites anteriores en PUTs parciales.

Motivación

DCIM Fase 1/2 ya tenía:

  • Rollup de potencia y peso en el dashboard (modelo: campos power_w / weight_kg en Device.model_data).
  • Agregación en racks/services/rollup.py (suma de equipos).

Esta v1.57.0 añade la capa de límites + avisos visuales, evitando sorpresas al desplegar equipos nuevos sin revisar números.

Componentes tocados

  • racks/models.py — Rack (migration 0013: dos nuevos FloatField).
  • racks/schemas.py — RackSchema / RackInputSchema exponen límites.
  • racks/services/racks.py — create_rack() / update_rack() / update_rack_metadata() manejan límites.
  • racks/api/export/pdf_export.py — generate_rack_pdf() incluye bloque Capacity y columnas W/kg.
  • racks/api/export/backup.py / restore.py — campos incluidos en full backup/restore.
  • static/js/editor/devices.js — updatePowerRollup() con coloreo (ámbar ≥90%, rojo si supera).
  • static/js/editor/ui_panels.js — modal “Rack Information” con inputs de límites.
  • static/css/pages/editor.css — clases .capacity-warn / .capacity-over.
  • templates/editor.html — fields nuevos en el modal.
  • tests/api/test_rack_capacity.py — 6 tests (create/update, exclude_unset, PDF, backup/restore roundtrip).

Tests

6 tests nuevos en tests/api/test_rack_capacity.py:

  • test_create_rack_with_limits — POST /api/racks persiste límites.
  • test_update_rack_limits — PUT /api/racks/{id} actualiza límites.
  • test_update_without_limits_keeps_them — payload sin campos no pisa anteriores (exclude_unset).
  • test_pdf_includes_capacity_block — PDF muestra tabla Capacity con estado OVER LIMIT si procede.
  • test_pdf_without_limits_shows_no_limit — sin límites, no hay alarmas en PDF.
  • test_backup_restore_roundtrip_limits — roundtrip completo backup/restore preserva límites.

Véase también

  • [[entity—racks—model—rack]] — modelo Rack + nuevos campos max_power_w / max_weight_kg
  • [[entity—racks—endpoint—patch-rack-limits]] — persistencia de límites vía GET/PUT /api/racks/{id}
  • [[entity—racks—service—update-power-rollup]] — función frontend que colorea badges según límites