Files
bee/bible-local/architecture/api-surface.md
Mikhail ChusavitinandClaude Sonnet 5 bb2a501a28 feat(sat): fan ceiling check + topology fan tiles
Repurpose the previously-unwired RunFanStressTest into RunFanCheck, a
Load-tier SAT test that drives stressapptest (CPU+memory) and, when a GPU
is present, a GPU burn to 100% simultaneously, then watches every fan
until none has climbed for ~60s. The observed peak RPM per fan is the
"ceiling"; it is persisted through the existing fan-observation store.

MSI G4201 / AMI MegaRAC exposes no host-side fan force (every OEM IPMI
command returns 0xc1; Redfish Thermal is GET-only), so load-driven ramp
is the closest safe equivalent. See
bible-local/decisions/2026-09-04-fan-ceiling-check.md.

- platform.ResolveFanMaxRPM: per-fan max with fallback (persisted peak ->
  peer peak -> current RPM), resolved in platform, not the view.
- platform.ErrTestNotApplicable: no load source or no fan sensors ->
  task lands as cancelled ("not applicable"), never failed, so an
  engineer never sees a false red. executeTaskWithOptions maps the
  sentinel; finalizeTaskForResult honours a pre-set TaskCancelled.
- Verdict FAIL only for a fan at 0 RPM / IPMI cr-nr under load.
- /topo: one small spinning square per fan, sized by RPM / resolved max,
  clickable through to a new "fan" component-detail type; per-fan status
  recorded to the component-status DB from the fan SAT summary.
- Wiring: /api/sat/fan/run route, "fan" task target, Load-page card,
  stress-mode Run All.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019VHG21rgTUiR1G3qFHTVmN
2026-09-04 10:35:34 +03:00

11 KiB

API Surface

HTTP endpoints exposed by bee web (binds 0.0.0.0:80). Handler registration: audit/internal/webui/server.goNewHandler().


Health & readiness

Method Path Description
GET /healthz Always 200. Used by load balancers / boot scripts.
GET /api/ready 200 when audit JSON exists and is readable.
GET /loading HTML loading page shown before first audit.

Audit

Method Path Description
GET /audit.json Latest audit JSON with SAT overlay applied.
GET /runtime-health.json Latest runtime preflight JSON.
POST /api/audit/run Enqueue a full bee audit run. Returns task ID.
GET /api/audit/stream SSE: audit run log lines (data: + newline per line).
GET /api/preflight Run runtime preflight check (synchronous, returns JSON).
GET /api/hardware-summary Hardware health summary (status counts + failures).
GET /api/components/{type} HTML fragment for component detail dialog (e.g. cpu, memory, storage, pcie).

SAT (System Acceptance Testing)

All SAT run endpoints enqueue an async task. Response: {"task_id": "..."}.

Method Path Description
POST /api/sat/nvidia/run NVIDIA DCGM SAT
POST /api/sat/nvidia-targeted-stress/run NVIDIA targeted stress validate
POST /api/sat/nvidia-compute/run NVIDIA max compute load
POST /api/sat/nvidia-targeted-power/run NVIDIA targeted power
POST /api/sat/nvidia-pulse/run NVIDIA pulse test
POST /api/sat/nvidia-interconnect/run NCCL all_reduce_perf
POST /api/sat/nvidia-bandwidth/run NVBandwidth + PCIe link under load
POST /api/sat/nvidia-stress/run NVIDIA stress pack
POST /api/sat/memory/run Memory acceptance
POST /api/sat/storage/run Storage acceptance (smartctl)
POST /api/sat/cpu/run CPU acceptance (stress-ng)
POST /api/sat/amd/run AMD GPU SAT (ROCm)
POST /api/sat/amd-mem/run AMD memory integrity + bandwidth
POST /api/sat/amd-bandwidth/run AMD memory bandwidth
POST /api/sat/amd-stress/run AMD GPU stress
POST /api/sat/memory-stress/run Memory stress
POST /api/sat/sat-stress/run Combined storage+memory stress
POST /api/sat/platform-stress/run Fan + thermal stress
POST /api/sat/fan/run Fan ceiling check (CPU+GPU load until fans plateau; Load tier). Not-applicable → task cancelled, not failed.
POST /api/sat/run-all Plan + enqueue the whole validate/check set server-side. Body: {stress_mode, amd_targets[], nvidia_gpu_indices[]} (operator intent only). Response: {task_ids[], task_count, notes[]}. Hardware presence/readiness and which tasks to run are decided by handler.planSATRunAll, not the page.
GET /api/sat/stream SSE: live SAT log stream
POST /api/sat/abort Abort the running SAT task

Benchmarks

Method Path Description
POST /api/bee-bench/nvidia/perf/run NVIDIA performance benchmark
POST /api/bee-bench/nvidia/power/run NVIDIA power benchmark
POST /api/bee-bench/nvidia/autotune/run Power source autotune (prerequisite for benchmarks)
GET /api/bee-bench/nvidia/autotune/status Current autotune result / status
GET /api/benchmark/results List completed benchmark result archives

Tasks (async job queue)

Method Path Description
GET /api/tasks List all tasks with status
POST /api/tasks/cancel-all Cancel all pending/running tasks
POST /api/tasks/kill-workers Force-kill worker goroutines
POST /api/tasks/{id}/cancel Cancel a specific task
POST /api/tasks/{id}/priority Elevate task priority
GET /api/tasks/{id}/stream SSE: live log stream for a task
GET /api/tasks/{id}/charts List chart names for a task
GET /api/tasks/{id}/chart/ SVG chart for a task result
GET /tasks/{id} HTML task detail page

Services

Method Path Description
GET /api/services List bee-* systemd services and their states
POST /api/services/action start/stop/restart a service

Network

Method Path Description
GET /api/network List interfaces with state and IPv4 addresses
POST /api/network/dhcp Run dhclient on one or all interfaces
POST /api/network/static Set static IPv4 address
POST /api/network/toggle Bring interface up or down
POST /api/network/confirm Confirm pending network change (clears rollback)
POST /api/network/rollback Restore pre-change network snapshot

Export

Method Path Description
GET /export/support.tar.gz Download support bundle (live-generated)
GET /export/file Download a file from the export dir by path param
GET /export/ Browse export dir (HTML index)
GET /api/export/list JSON list of files in export dir
GET /api/export/usb List removable USB targets available for export

GPU

Method Path Description
GET /api/gpu/presence {"nvidia", "amd", "nvidia_initializing", "amd_initializing": bool}. *_initializing = PCI GPU present but driver not up yet (distinct from absent). Backed by app.DetectGPUPresence.
GET /api/gpu/nvidia List NVIDIA GPUs from nvidia-smi
GET /api/gpu/nvidia-status Per-GPU status (ECC, power, throttle)
POST /api/gpu/nvidia-reset GPU reset by index
GET /api/gpu/tools nvidia-smi / rocm-smi tool availability

System

Method Path Description
GET /api/system/ram-status toram boot state and ISO copy status
POST /api/system/install-to-ram Copy ISO to RAM and verify active loop backing
GET /api/system/time Current host epoch, local wall-clock text, and timezone
POST /api/system/time-sync Set host time and timezone from the browser
POST /api/system/reboot Reboot the host
POST /api/system/shutdown Power off the host
GET /api/install/disks List block devices suitable for disk installation
POST /api/install/run Install bee to disk (background task)

Tools & NVMe

Method Path Description
GET /api/tools/check Check availability of required CLI tools
GET /api/tools/nvme-formats List NVMe format options for a device
POST /api/tools/nvme-format/run Run nvme-format on a device

Live metrics

Method Path Description
GET /api/metrics/stream SSE: live metrics (GPU power, temp, utilization)
GET /api/metrics/latest Latest metrics snapshot (JSON)
GET /api/metrics/chart/ SVG chart for a metric over time
GET /api/metrics/export.csv Download metrics history as CSV

Blackbox logging

Method Path Description
GET /api/blackbox/status Blackbox log state (enabled, size, path)
POST /api/blackbox/enable Start recording blackbox log
POST /api/blackbox/disable Stop recording, flush to disk

UI pages

Method Path Description
GET / Main dashboard (serves all page routes)
GET /viewer Standalone JSON viewer for uploaded audit files

All pages are rendered server-side as HTML. The / route handles sub-paths such as /network, /services, /sat, /benchmark, /install, /validate, /export.