Files
logpile/docs/bible/04-data-models.md
2026-02-25 12:17:17 +03:00

3.8 KiB

04 — Data Models

AnalysisResult

internal/models/ — the central data contract shared by parsers, collectors, exporters, and the HTTP layer.

Stability rule: Never break the JSON shape of AnalysisResult. Backward-compatible additions are allowed; removals or renames are not.

Key top-level fields:

Field Type Description
filename string Uploaded filename or generated live source identifier
source_type string archive or api
protocol string redfish, ipmi, or empty for archive uploads
target_host string BMC host for live collection
collected_at time.Time Upload/collection timestamp
hardware *HardwareConfig All normalized hardware inventory
events []Event Diagnostic events from parsers
fru []FRUInfo FRU/SDR-derived inventory details
sensors []SensorReading Sensor readings
raw_payloads map[string]any Raw vendor data (e.g. redfish_tree)

raw_payloads is the durable source for offline re-analysis (especially for Redfish). Normalized fields should be treated as derivable output from raw source data.

Hardware sub-structure

HardwareConfig
  ├── board        BoardInfo       — server/motherboard identity
  ├── devices      []HardwareDevice — CANONICAL INVENTORY (see below)
  ├── cpus         []CPU
  ├── memory       []MemoryDIMM
  ├── storage      []Storage
  ├── volumes      []StorageVolume  — logical RAID/VROC volumes
  ├── pcie_devices []PCIeDevice
  ├── gpus         []GPU
  ├── network_adapters []NetworkAdapter
  ├── network_cards    []NIC           (legacy/alternate source field)
  ├── power_supplies   []PSU
  └── firmware     []FirmwareInfo

Canonical Device Repository (hardware.devices)

hardware.devices is the single source of truth for hardware inventory.

Rules — must not be violated

  1. All UI tabs displaying hardware components must read from hardware.devices.
  2. The Device Inventory tab shows kinds: pcie, storage, gpu, network.
  3. The Reanimator exporter must use the same hardware.devices as the UI.
  4. Any discrepancy between UI data and Reanimator export data is a bug.
  5. New hardware attributes must be added to the canonical device schema first, then mapped to Reanimator/UI — never the other way around.
  6. The exporter should group/filter canonical records by section, not rebuild data from multiple sources.

Deduplication logic (applied once by repository builder)

Priority Key used
1 serial_number — usable (not empty, not N/A, NA, NONE, NULL, UNKNOWN, -)
2 bdf — PCI Bus:Device.Function address
3 No merge — records remain distinct if both serial and bdf are absent

Device schema alignment

Keep hardware.devices schema as close as possible to Reanimator JSON field names. This minimizes translation logic in the exporter and prevents drift.


Source metadata fields (stored directly on AnalysisResult)

Carried by both /api/status and /api/config:

{
  "source_type": "api",
  "protocol": "redfish",
  "target_host": "10.0.0.1",
  "collected_at": "2026-02-10T15:30:00Z"
}

Valid source_type values: archive, api Valid protocol values: redfish, ipmi (empty is allowed for archive uploads)


Raw Export Package (reopenable artifact)

Export Raw Data does not merely dump AnalysisResult; it emits a reopenable raw package (JSON or ZIP bundle) that carries source data required for re-analysis.

Design rules:

  • raw source is authoritative (redfish_tree or original file bytes)
  • imports must re-analyze from raw source
  • parsed field snapshots included in bundles are diagnostic artifacts, not the source of truth