feat: add standalone server topology view

This commit is contained in:
Mikhail Chusavitin
2026-09-14 10:29:36 +03:00
parent 5b8be0e464
commit 9ac38c2914
28 changed files with 1287 additions and 31 deletions
+37
View File
@@ -572,6 +572,8 @@ both CPUs or have no CPU affinity). This data is needed for topology-aware diagn
provide CPUAffinity at all.
- `TestParseDellCPUAffinity` verifies numeric values parsed correctly and "Not Applicable"→0.
The zero-as-absence representation in this decision is superseded by ADL-068.
---
## ADL-023 — Reanimator export must match ingest contract exactly
@@ -1983,3 +1985,38 @@ with **same-length neutral fillers**, in place.
`TestSanitize_Zip_*`, `TestSanitize_BinaryMemberFlagged`,
`TestNeutralZonesAreValidAndSameLength`, `TestTZFiller`),
`internal/server` (`TestHandleSanitize_*`).
---
## ADL-068 — Standalone topology document and nullable NUMA affinity
**Date:** 2026-09-14
**Context:** A server topology cannot distinguish the real NUMA node 0 from an
unknown affinity while the Go model uses numeric zero as its absence sentinel.
Bee support bundles also contain useful relationships (DIMM-to-socket,
disk-to-controller, and GPU/NVLink links) which are not part of the Reanimator
hardware ingest schema. Adding those relationships to `reanimator.json` would
couple a standard inventory document to one viewer.
**Decision:**
- Represent `numa_node` as `*int` throughout LOGPile's PCIe, network, canonical
device, and Reanimator projection models. `nil` means absent/N/A; `&0` means
NUMA node 0.
- Keep `reanimator.json` schema-preserving. Store semantic topology as a
separate, versioned `topology.json` document containing nodes and edges, but
no presentation coordinates.
- Render `/topology/current` as a LOGPile-owned, static SVG page opened in a
separate browser tab. Do not modify the `internal/chart` submodule.
- The Easy Bee parser may retain the small static evidence files required to
enrich topology. Rendering must never execute commands, poll metrics, or
depend on live state.
**Consequences:**
- JSON can round-trip both an absent NUMA affinity and the real value 0.
- Ordinary inputs get the topology supported by their normalized inventory;
rich Bee bundles additionally get memory, storage-controller, and NVLink
relationships.
- Raw-export ZIP bundles include `topology.json` separately from
`reanimator.json`.
- Fan RPM animation, PSU live load, and other Bee live-only presentation are
intentionally out of scope.