Files
logpile/bible-local/05-collectors.md
2026-03-15 23:27:32 +03:00

2.8 KiB

05 — Collectors

Collectors live in internal/collector/.

Core files:

  • registry.go for protocol registration
  • redfish.go for live collection
  • redfish_replay.go for replay from raw payloads
  • ipmi_mock.go for the placeholder IPMI implementation
  • types.go for request/progress contracts

Redfish collector

Status: active production path.

Request fields passed from the server:

  • host
  • port
  • username
  • auth_type
  • credential field (password or token)
  • tls_mode
  • optional power_on_if_host_off

Core rule

Live collection and replay must stay behaviorally aligned. If the collector adds a fallback, probe, or normalization rule, replay must mirror it.

Preflight and host power

  • Probe() may be used before collection to verify API connectivity and current host PowerState
  • if the host is off and the user chose power-on, the collector may issue ComputerSystem.Reset with ResetType=On
  • power-on attempts are bounded and logged
  • after a successful power-on, the collector waits an extra stabilization window, then checks PowerState again and only starts collection if the host is still on
  • if the collector powered on the host itself for collection, it must attempt to power it back off after collection completes
  • if the host was already on before collection, the collector must not power it off afterward
  • if power-on fails, collection still continues against the powered-off host
  • all power-control decisions and attempts must be visible in the collection log so they are preserved in raw-export bundles

Discovery model

The collector does not rely on one fixed vendor tree. It discovers and follows Redfish resources dynamically from root collections such as:

  • Systems
  • Chassis
  • Managers

Stored raw data

Important raw payloads:

  • raw_payloads.redfish_tree
  • raw_payloads.redfish_fetch_errors
  • raw_payloads.source_timezone when available

Snapshot crawler rules

  • bounded by LOGPILE_REDFISH_SNAPSHOT_MAX_DOCS
  • prioritized toward high-value inventory paths
  • tolerant of expected vendor-specific failures
  • normalizes @odata.id values before queueing

Redfish implementation guidance

When changing collection logic:

  1. Prefer alternate-path support over vendor hardcoding
  2. Keep expensive probing bounded
  3. Deduplicate by serial, then BDF, then location/model fallbacks
  4. Preserve replay determinism from saved raw payloads
  5. Add tests for both the motivating topology and a negative case

Known vendor fallbacks

  • empty standard drive collections may trigger bounded Disk.Bay probing
  • Storage.Links.Enclosures[*] may be followed to recover physical drives
  • PowerSubsystem/PowerSupplies is preferred over legacy Power when available

IPMI collector

Status: mock scaffold only.

It remains registered for protocol completeness, but it is not a real collection path.