Files
logpile/bible-local/04-data-models.md
T

2.8 KiB

04 — Data Models

Core contract: AnalysisResult

internal/models/models.go defines the shared result passed between parsers, collectors, server handlers, and exporters.

Stability rule:

  • do not rename or remove JSON fields from AnalysisResult
  • additive fields are allowed
  • UI and exporter compatibility depends on this shape remaining stable

Key fields:

Field Meaning
filename Original upload name or synthesized live source name
source_type archive or api
protocol redfish, ipmi, or empty for archive uploads
target_host Hostname or IP for live collection
source_timezone Source timezone/offset if known
collected_at Canonical collection/upload time
raw_payloads Raw source data used for replay or diagnostics
events Parsed event timeline
fru FRU-derived inventory details
sensors Sensor readings
hardware Normalized hardware inventory

HardwareConfig

Main sections:

hardware.board
hardware.devices
hardware.cpus
hardware.memory
hardware.storage
hardware.volumes
hardware.pcie_devices
hardware.gpus
hardware.network_adapters
hardware.network_cards
hardware.power_supplies
hardware.firmware

network_cards is legacy/alternate source data. hardware.devices is the canonical cross-section inventory.

Canonical inventory: hardware.devices

hardware.devices is the single source of truth for device-oriented UI and Reanimator export.

Required rules:

  1. UI hardware views must read from hardware.devices
  2. Reanimator conversion must derive device sections from hardware.devices
  3. UI/export mismatches are bugs, not accepted divergence
  4. New shared device fields belong in HardwareDevice first

NUMA affinity

NUMA affinity is nullable throughout the internal and Reanimator export path. In Go it is represented as *int: nil means not reported / not applicable, while a pointer to 0 means the real NUMA node 0. Numeric zero must never be used as an absence sentinel.

Topology relationships outside the Reanimator ingest contract live in the separate versioned topology.json document and are not added to reanimator.json.

Deduplication priority:

Priority Key
1 usable serial_number
2 bdf
3 keep records separate

Raw payloads

raw_payloads is authoritative for replayable sources.

Current important payloads:

  • redfish_tree
  • redfish_fetch_errors
  • source_timezone

Normalized hardware fields are derived output, not the long-term source of truth.

Raw export package

/api/export/json produces a reopenable raw-export artifact.

Design rules:

  • raw source stays authoritative
  • uploads of raw-export artifacts must re-analyze from raw source
  • parsed snapshots inside the bundle are diagnostic only