Some ports are never meant to be up: compute-storage-01's nic1-nic3, and large1's spare NIC and USB adapter. They kept their hosts "degraded", and they were behind tonight's false alerts (#31, reverted in #33).
What changes
Device page. A down interface gets a Mark unused button (admins only) with an optional reason, and In use again undoes it. Unused rows are greyed out with a dashed dot and an "unused" badge; the reason shows on hover. The header count leaves them out, for example "3 of 3 up · 1 unused".
Monitor. An unused interface:
raises no link-down alert;
can't count toward the cluster-wide alert;
doesn't count toward the host's status;
shows as unused in the snapshot, so the dashboard host cards and the rack drawings grey it out too.
The list is reloaded every cycle.
Marking closes any link-down alert open on that interface, without a recovery note, because nothing recovered.
API.PUT / DELETE /api/device/<host>/interfaces/<iface>/unused requires admin rights. PUT takes a JSON body {reason}. Interface names are validated. /api/device/<host> returns unused_interfaces.
Schema. A new table, unused_interfaces, is created with the cutsheet tables.
Candidates on production now
These are all the down interfaces:
compute-storage-01: nic1, nic2, nic3
large1: enp36s0, enx66630b4cce4a
micro1: enp3s0. Leave this one: it's meant to be up and is waiting on a cable (ticket 666018103).
Testing
Automated: 378 tests pass, 8 new:
unused interfaces never alert
they don't degrade the host, and show as unused in the snapshot
API mark and clear, admin, JSON and name checks, and the device API listing
MariaDB:
marking closes an open alert quietly, with recovery_notified set so no note is queued
marking again updates the reason
clear is idempotent
Playwright: mark, then the row turns unused and the count updates, then undo; no JS errors.
Lint: flake8 is clean and ESLint reports 0 errors.
## Why
Some ports are never meant to be up: compute-storage-01's `nic1`-`nic3`, and large1's spare NIC and USB adapter. They kept their hosts "degraded", and they were behind tonight's false alerts (#31, reverted in #33).
## What changes
**Device page.** A down interface gets a **Mark unused** button (admins only) with an optional reason, and **In use again** undoes it. Unused rows are greyed out with a dashed dot and an "unused" badge; the reason shows on hover. The header count leaves them out, for example "3 of 3 up · 1 unused".
**Monitor.** An unused interface:
- raises no link-down alert;
- can't count toward the cluster-wide alert;
- doesn't count toward the host's status;
- shows as `unused` in the snapshot, so the dashboard host cards and the rack drawings grey it out too.
The list is reloaded every cycle.
**Marking** closes any link-down alert open on that interface, without a recovery note, because nothing recovered.
**API.** `PUT` / `DELETE /api/device/<host>/interfaces/<iface>/unused` requires admin rights. `PUT` takes a JSON body `{reason}`. Interface names are validated. `/api/device/<host>` returns `unused_interfaces`.
**Schema.** A new table, `unused_interfaces`, is created with the cutsheet tables.
## Candidates on production now
These are all the down interfaces:
- compute-storage-01: `nic1`, `nic2`, `nic3`
- large1: `enp36s0`, `enx66630b4cce4a`
- micro1: `enp3s0`. Leave this one: it's meant to be up and is waiting on a cable (ticket 666018103).
## Testing
- **Automated:** 378 tests pass, 8 new:
- unused interfaces never alert
- they don't degrade the host, and show as `unused` in the snapshot
- API mark and clear, admin, JSON and name checks, and the device API listing
- **MariaDB:**
- marking closes an open alert quietly, with `recovery_notified` set so no note is queued
- marking again updates the reason
- clear is idempotent
- **Playwright:** mark, then the row turns unused and the count updates, then undo; no JS errors.
- **Lint:** flake8 is clean and ESLint reports 0 errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Ports that are never meant to be up (compute-storage-01 nic1-3, large1's
spare NIC and USB adapter) kept their hosts "degraded" and were the source
of tonight's false alerts. An admin can now mark an interface unused from
the device page, with an optional reason. Unused interfaces raise no
link-down alerts, don't count toward the cluster-wide alert or the host's
status, and show greyed as "unused" on the dashboard, device page and rack.
Marking one closes any open link-down alert on it without a recovery note.
New table unused_interfaces, created with the cutsheet tables.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jared
scheduled this pull request to auto merge when all checks succeed 2026-11-11 17:50:11 -05:00
jared
merged commit 6b03fe7b44 into main2026-11-11 17:50:14 -05:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Why
Some ports are never meant to be up: compute-storage-01's
nic1-nic3, and large1's spare NIC and USB adapter. They kept their hosts "degraded", and they were behind tonight's false alerts (#31, reverted in #33).What changes
Device page. A down interface gets a Mark unused button (admins only) with an optional reason, and In use again undoes it. Unused rows are greyed out with a dashed dot and an "unused" badge; the reason shows on hover. The header count leaves them out, for example "3 of 3 up · 1 unused".
Monitor. An unused interface:
unusedin the snapshot, so the dashboard host cards and the rack drawings grey it out too.The list is reloaded every cycle.
Marking closes any link-down alert open on that interface, without a recovery note, because nothing recovered.
API.
PUT/DELETE /api/device/<host>/interfaces/<iface>/unusedrequires admin rights.PUTtakes a JSON body{reason}. Interface names are validated./api/device/<host>returnsunused_interfaces.Schema. A new table,
unused_interfaces, is created with the cutsheet tables.Candidates on production now
These are all the down interfaces:
nic1,nic2,nic3enp36s0,enx66630b4cce4aenp3s0. Leave this one: it's meant to be up and is waiting on a cable (ticket 666018103).Testing
unusedin the snapshotrecovery_notifiedset so no note is queued🤖 Generated with Claude Code