Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
177b082
3D groundwork: real-world scale on plans, trays and racks
DenDanskeMine Jul 22, 2026
c4eca23
3D room view MVP: navigable floor plan scene
DenDanskeMine Jul 22, 2026
0328b8a
Vite proxy target configurable via DJANGO_URL (multi-instance dev)
DenDanskeMine Jul 22, 2026
19325d8
3D: clickable devices, face textures, fly-to camera, cable trace
DenDanskeMine Jul 22, 2026
4be6f9a
3D: fix device clicks eaten by the far-LOD box
DenDanskeMine Jul 22, 2026
be8ab3b
3D: richer device card (type, status, role, primary IP, serial)
DenDanskeMine Jul 22, 2026
b072b35
Auto-routing: best tray path + length estimation for cables
DenDanskeMine Jul 22, 2026
72a038a
3D: precise picking + stable LOD
DenDanskeMine Jul 22, 2026
553e352
Device-type import: expand GitHub folder (tree) URLs
DenDanskeMine Jul 22, 2026
f60a7cf
Bulk device-type import: background job for whole folders
DenDanskeMine Jul 22, 2026
f81ffa4
Device-type import: treat extension-less /blob/ folder URLs as folders
DenDanskeMine Jul 22, 2026
ef93044
3D: toggles for U numbers and device names
DenDanskeMine Jul 22, 2026
6ede10b
Photo ports P-I0/P-I1: image-anchored port markers on device types
DenDanskeMine Jul 24, 2026
7087bd9
Photo ports P-I2/P-I3: render image-anchored ports in 2D + 3D
DenDanskeMine Jul 24, 2026
99eebdf
3D cabling + photo-faceplate hardware: connect flow, speed tiers, inv…
DenDanskeMine Jul 24, 2026
79635c0
Clean up comments
DenDanskeMine Jul 24, 2026
49cad72
3D port card: status chip tinted like other badges (drop the dot)
DenDanskeMine Jul 24, 2026
98b2d57
BMC hardware health: Redfish collector reconciles inventory + statuses
DenDanskeMine Jul 24, 2026
317b9c6
User-defined SNMP sensors → inventory health (vendor OIDs)
DenDanskeMine Jul 24, 2026
b73c191
Scheduled hardware polling + tidy the device Monitoring tab
DenDanskeMine Jul 24, 2026
c050799
Device Monitoring tab: consistent card headers
DenDanskeMine Jul 24, 2026
9f82271
Surface hardware health on the device Overview
DenDanskeMine Jul 24, 2026
f92f9c9
Poll the right address: management IP, explicit override, honest errors
DenDanskeMine Jul 24, 2026
a00368a
Link SNMP-discovered interfaces to the ports you already labelled
DenDanskeMine Jul 24, 2026
bd00ce7
Hardware pane uses the shared table; search on every component table
DenDanskeMine Jul 24, 2026
3341442
Fix inventory pane freeze; show SNMP links on interfaces
DenDanskeMine Jul 24, 2026
72c87d8
Hardware: fix Inventory tab freeze, unlink SNMP names, speed presets
DenDanskeMine Jul 24, 2026
62e71c2
Docs: SNMP interface linking/unlinking + hardware speed presets
DenDanskeMine Jul 24, 2026
21a09d8
UI: every checkbox, radio and select uses the shared primitives
DenDanskeMine Jul 24, 2026
9d9a906
UI: real dropdown for suggested values, replacing <datalist>
DenDanskeMine Jul 24, 2026
2a0baec
Fix interface delete; unlink SNMP names; multi-add anywhere; OID expl…
DenDanskeMine Jul 24, 2026
34ae13a
Row actions hug their column; browse the OID tree; fix phantom link d…
DenDanskeMine Jul 24, 2026
8ac1904
SNMP: sync honors links, speed drifts, and ports can opt out of drift
DenDanskeMine Jul 24, 2026
1d41615
SNMP: an IP on the device still needs its port; move the drift-exclud…
DenDanskeMine Jul 24, 2026
fe2e0c1
Sensors: a bay the agent never reports stops claiming to be healthy
DenDanskeMine Jul 25, 2026
0f96645
Faceplate bays open the real part editor; richer popover
DenDanskeMine Jul 25, 2026
4df633b
Hardware health obeys the SoT contract; drift is visible; description…
DenDanskeMine Jul 25, 2026
17e9382
Legend keys what's drawn; drift reaches the 3D room; sharper panels
DenDanskeMine Jul 25, 2026
ea4854b
Fix the panel freeze; rich tooltips get a readable surface; sensor ca…
DenDanskeMine Jul 25, 2026
592aa65
Device bundles: export a configured model, import it anywhere
DenDanskeMine Jul 25, 2026
398c7ec
UI audit tier 0: revive three dead CSS rules, fix the primitives behi…
DenDanskeMine Jul 25, 2026
31b742e
UI audit tier 1a: permission gates, and guards on irreversible actions
DenDanskeMine Jul 25, 2026
7ccf5a7
UI audit tier 1b: 11 detail pages get an Overview tab, first and default
DenDanskeMine Jul 25, 2026
e005c4d
UI audit tier 1c: the last four gaps — deletes, URL sub-tabs, native …
DenDanskeMine Jul 25, 2026
1f2d0fe
UI audit: one nav guard in the floor-plan editor; the last native dia…
DenDanskeMine Jul 25, 2026
8e8b0bc
UI audit tier 2: one list-page chrome, and the parallel table system …
DenDanskeMine Jul 25, 2026
3dbcc05
Speed ramp goes back to static; only the hardware key adapts
DenDanskeMine Jul 25, 2026
f4bad26
UI audit tier 2: one hero, five column factories
DenDanskeMine Jul 25, 2026
1ad2072
Devices list shows SNMP drift, not just compliance violations
DenDanskeMine Jul 25, 2026
c715faa
Interfaces lists show SNMP drift, not just compliance violations
DenDanskeMine Jul 25, 2026
73c7201
One entity, one column factory: the last ten duplicate definitions
DenDanskeMine Jul 25, 2026
8484524
Device types get a real filter rail: images, tags, and six more facets
DenDanskeMine Jul 25, 2026
2c761b5
Sensors tab follows the page layout instead of sitting flush
DenDanskeMine Jul 25, 2026
938ba38
Module bays are placeable on photo ports
DenDanskeMine Jul 25, 2026
3d81d7a
Device types can be deleted in bulk
DenDanskeMine Jul 25, 2026
584ec45
Reimport device-type images from a library repo
DenDanskeMine Jul 25, 2026
77f73c2
3D room: keyboard navigation
DenDanskeMine Jul 25, 2026
1080360
Every faceplate marker is now a work surface, not a picture
DenDanskeMine Jul 25, 2026
d47dd28
Airflow is visible in the 3D room, and walking feels first-person
DenDanskeMine Jul 25, 2026
b1fcec8
Image reimport matches a 1000-type catalog in seconds, not an hour
DenDanskeMine Jul 25, 2026
6fb32b9
Raised floors are per-area data, and the plenum drives depth everywhere
DenDanskeMine Jul 25, 2026
f3958f3
Floor-plan editor: multi-select with a bulk bar (facing, delete)
DenDanskeMine Jul 25, 2026
d14306c
3D camera: Space rises, Shift descends (owner feedback)
DenDanskeMine Jul 25, 2026
7e6d5c5
Bulk device-type import stops guessing image extensions
DenDanskeMine Jul 25, 2026
e8fea80
Structure mode polish from first contact, and richer bulk editing
DenDanskeMine Jul 25, 2026
218f436
Build in advance: typed tiles stand on their own, in 2D and 3D
DenDanskeMine Jul 25, 2026
d272b95
Structure mode says when it saves, and planning tiles can face a dire…
DenDanskeMine Jul 25, 2026
1ddb6ab
The raised-floor save toast that d272b95 described but didn't ship
DenDanskeMine Jul 25, 2026
11107cb
The facing arrows were working invisibly, and one-tile selections open
DenDanskeMine Jul 25, 2026
a5e02ff
Folder imports survive pasted URLs with spaces, and empty folders fai…
DenDanskeMine Jul 25, 2026
27a3d76
Zones tint raised floors instead of vanishing inside them
DenDanskeMine Jul 25, 2026
b1197b3
A worker that can't find its run says so instead of eating the job
DenDanskeMine Jul 25, 2026
8329e4c
Add device from a device type's Devices tab, model pre-picked
DenDanskeMine Jul 25, 2026
7fcb741
Components tab wears its total, like Devices always did
DenDanskeMine Jul 25, 2026
b3758bf
Walls and doors: the backend half (P5)
DenDanskeMine Jul 25, 2026
7368831
0U gear renders as a shelf appliance in 3D, not a degenerate plane
DenDanskeMine Jul 25, 2026
2af6d81
Walls and doors: the frontend half (P5 complete)
DenDanskeMine Jul 25, 2026
b6473be
3D camera: the zoom wall becomes a walk (roadmap P1)
DenDanskeMine Jul 26, 2026
5162e05
3D x-ray, focus and isolation: the room learns to get out of the way …
DenDanskeMine Jul 26, 2026
08378e3
3D lighting: racks stand ON the floor now (P3)
DenDanskeMine Jul 26, 2026
a433d78
Shell modes v2: kill the shimmer, the ghost soup and the click traps
DenDanskeMine Jul 26, 2026
4808bdd
X-ray keeps the equipment; glass stops eating clicks
DenDanskeMine Jul 26, 2026
cd93ac1
The floor, properly (P4a): tile grid, grate tiles, per-area lift, cei…
DenDanskeMine Jul 26, 2026
ac4f216
Cables routed like an installer would (P8)
DenDanskeMine Jul 26, 2026
ae4c4c4
Zero-U side mounting: vertical PDUs hang on the rail (P5 step 1)
DenDanskeMine Jul 26, 2026
8119cf3
Rack type catalog: cabinet models that prefill racks and stamp their …
DenDanskeMine Jul 26, 2026
53919d3
3D room: readable trays, right-sized cues, and routing you can actual…
DenDanskeMine Jul 26, 2026
9f5e297
3D room: tray joints, runs that clear the racks, and two things too d…
DenDanskeMine Jul 26, 2026
5c4f710
A side-mounted strip picks its channel, so a PDU stops appearing on b…
DenDanskeMine Jul 26, 2026
c000fa9
Racks can re-sync with their type, the way devices re-sync with theirs
DenDanskeMine Jul 26, 2026
8d8dbc2
Rack sync compares accessories, not just their labels
DenDanskeMine Jul 26, 2026
80492b0
Tray joints: closed loops and collinear points; PDUs move inside the …
DenDanskeMine Jul 26, 2026
490e6dc
seed_dc_test: a hundred-cabinet hall for exercising the 3D room
DenDanskeMine Jul 26, 2026
a7a6384
DC-TEST gets aisles you can walk down, full cabinets, and the camera …
DenDanskeMine Jul 26, 2026
c5c4378
Cabinets stop colliding; the room stops choking on full racks
DenDanskeMine Jul 26, 2026
996a8e2
Middle-distance racks draw in one call; rear panels finally render
DenDanskeMine Jul 26, 2026
6c5c21c
DC-TEST runs follow the tray instead of flying over the cabinets
DenDanskeMine Jul 26, 2026
71c8bfc
The 3D room's lag was a request storm, not the light rig
DenDanskeMine Jul 26, 2026
517c885
Camera motion stops re-rendering the room; it only redraws it
DenDanskeMine Jul 26, 2026
a7bc47e
The top U stops being buried under the cabinet's own lid
DenDanskeMine Jul 26, 2026
596cd0b
Cables land on gear, and power cables exist at all
DenDanskeMine Jul 26, 2026
4bcf328
Airflow cues annotate a unit instead of covering it
DenDanskeMine Jul 26, 2026
39252ba
Cables land on the panel the port is on, not the face the box is bolt…
DenDanskeMine Jul 26, 2026
cd5f7cb
A traced cable can't be hidden by the room; PSUs are 1 and 2
DenDanskeMine Jul 26, 2026
d025ef9
Stop installing the dev docker-compose unit on production hosts
DenDanskeMine Jul 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
22 changes: 19 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,17 @@ SERVICE_HOME ?= /opt/danbyte
# Where the app writes danbyte.log + gunicorn logs (settings.LOGGING reads
# DANBYTE_LOG_DIR from .env; systemd still mirrors process output to journald).
LOG_DIR ?= /var/log/danbyte
SERVICES := danbyte-mockups danbyte-infra danbyte-backend danbyte-workers danbyte-docs
# Dev-only units. `danbyte-infra` runs Postgres + Redis in docker compose for a
# workstation; a production install provisions them natively (scripts/install.sh
# creates the role/database with psql), so these must NEVER be linked there —
# doing so left an idle, empty Postgres container on hosts that already had one.
DEV_SERVICES := danbyte-mockups danbyte-infra danbyte-backend
# Units both dev and production run.
SHARED_SERVICES := danbyte-workers danbyte-docs
SERVICES := $(DEV_SERVICES) $(SHARED_SERVICES)
# Timer-driven oneshots (monitoring beat). Each has a .service + a .timer; the
# timer is what gets enabled. Not part of `up`/`down` (they're not long-running).
TIMERS := danbyte-dispatch danbyte-materialise danbyte-prune danbyte-utilization danbyte-alert-maintenance danbyte-discover danbyte-cleanup danbyte-drift-dispatch danbyte-auto-upgrade danbyte-drive-outposts danbyte-digest
TIMERS := danbyte-dispatch danbyte-materialise danbyte-prune danbyte-utilization danbyte-alert-maintenance danbyte-discover danbyte-cleanup danbyte-drift-dispatch danbyte-auto-upgrade danbyte-drive-outposts danbyte-digest danbyte-hardware
PY := $(PROJECT_DIR)/.venv/bin/python

.PHONY: help install-services uninstall-services reload \
Expand Down Expand Up @@ -298,15 +305,24 @@ collectstatic:
# make install-prod-services
# systemctl --user stop danbyte-backend danbyte-frontend # the dev units
# systemctl --user enable --now danbyte-web danbyte-ws danbyte-frontend-prod
PROD_SERVICES := danbyte-web danbyte-ws danbyte-frontend-prod
# Everything a production host runs — web/ws/frontend plus the shared units.
# scripts/install.sh links ONLY these; it must not pull in DEV_SERVICES.
PROD_SERVICES := danbyte-web danbyte-ws danbyte-frontend-prod $(SHARED_SERVICES)

install-prod-services:
@mkdir -p $(SYSTEMD_DIR)
@for s in $(PROD_SERVICES); do \
ln -sfn $(PROJECT_DIR)/services/$$s.service $(SYSTEMD_DIR)/$$s.service ; \
echo " linked $$s.service" ; \
done
@for s in $(TIMERS); do \
ln -sfn $(PROJECT_DIR)/services/$$s.service $(SYSTEMD_DIR)/$$s.service ; \
ln -sfn $(PROJECT_DIR)/services/$$s.timer $(SYSTEMD_DIR)/$$s.timer ; \
done
@systemctl --user daemon-reload
@for s in $(TIMERS); do \
systemctl --user enable --now $$s.timer >/dev/null 2>&1 || true ; \
done
@echo "Linked. Build the frontend + collect static, then enable:"
@echo " make frontend-build collectstatic"
@echo " systemctl --user enable --now $(PROD_SERVICES)"
Expand Down
15 changes: 15 additions & 0 deletions api/api_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@
MACAddressViewSet,
RackViewSet,
RackRoleViewSet,
RackTypeViewSet,
RackTypeAccessoryViewSet,
DeviceRoleViewSet,
PlatformGroupViewSet,
PlatformViewSet,
Expand Down Expand Up @@ -143,7 +145,9 @@
FloorPlanTileViewSet,
SiteMarkerViewSet,
CableRouteViewSet,
FloorPlanRaisedFloorAreaViewSet,
FloorPlanTrayViewSet,
FloorPlanWallViewSet,
FloorPlanViewSet,
FloorTileTypeViewSet,
ModuleViewSet,
Expand Down Expand Up @@ -240,6 +244,9 @@
router.register(r"vm-interfaces", VMInterfaceViewSet, basename="vm-interface")
router.register(r"racks", RackViewSet, basename="rack")
router.register(r"rack-roles", RackRoleViewSet, basename="rack-role")
router.register(r"rack-types", RackTypeViewSet, basename="rack-type")
router.register(r"rack-type-accessories", RackTypeAccessoryViewSet,
basename="rack-type-accessory")
router.register(r"device-roles", DeviceRoleViewSet, basename="device-role")
router.register(r"platform-groups", PlatformGroupViewSet, basename="platform-group")
router.register(r"platforms", PlatformViewSet, basename="platform")
Expand Down Expand Up @@ -276,6 +283,14 @@
router.register(r"floor-plans", FloorPlanViewSet, basename="floor-plan")
router.register(r"floor-plan-tiles", FloorPlanTileViewSet, basename="floor-plan-tile")
router.register(r"floor-plan-trays", FloorPlanTrayViewSet, basename="floor-plan-tray")
router.register(
r"floor-plan-raised-floors",
FloorPlanRaisedFloorAreaViewSet,
basename="floor-plan-raised-floor",
)
router.register(
r"floor-plan-walls", FloorPlanWallViewSet, basename="floor-plan-wall"
)
router.register(r"cable-routes", CableRouteViewSet, basename="cable-route")
router.register(r"module-interface-templates", ModuleInterfaceTemplateViewSet, basename="module-interface-template")
router.register(r"modules", ModuleViewSet, basename="module")
Expand Down
2 changes: 1 addition & 1 deletion api/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def ready(self):
# by shipping an ``io.py`` that calls ``api.io.register_io``.
from django.utils.module_loading import autodiscover_modules

from . import io
from . import io, signals # noqa: F401 (signals register on import)

io.register_builtins()
autodiscover_modules("io")
Loading
Loading