94 lines
4.4 KiB
Markdown
94 lines
4.4 KiB
Markdown
# 07 — Exporters
|
|
|
|
## Export surfaces
|
|
|
|
| Endpoint | Output | Purpose |
|
|
|----------|--------|---------|
|
|
| `GET /api/export/csv` | CSV | Serial-number export |
|
|
| `GET /api/export/json` | raw-export ZIP bundle | Reopen and re-analyze later |
|
|
| `GET /api/export/reanimator` | JSON | Reanimator hardware payload |
|
|
| `POST /api/convert` | async ZIP artifact | Batch archive-to-Reanimator conversion |
|
|
|
|
## Raw export
|
|
|
|
Raw export is not a final report dump.
|
|
It is a replayable artifact that preserves enough source data for future parser improvements.
|
|
|
|
Current bundle contents:
|
|
- `raw_export.json`
|
|
- `collect.log`
|
|
- `parser_fields.json`
|
|
|
|
Design rules:
|
|
- raw source is authoritative
|
|
- uploads of raw export must replay from raw source
|
|
- parsed snapshots inside the bundle are diagnostic only
|
|
|
|
## Reanimator export
|
|
|
|
Implementation files:
|
|
- `internal/exporter/reanimator_models.go`
|
|
- `internal/exporter/reanimator_converter.go`
|
|
- `internal/server/handlers.go`
|
|
- `bible-local/docs/hardware-ingest-contract.md`
|
|
|
|
Conversion rules:
|
|
- canonical source is merged canonical inventory derived from `hardware.devices` plus legacy hardware slices
|
|
- output must conform to the strict Reanimator ingest contract in `docs/hardware-ingest-contract.md`
|
|
- local mirror currently tracks upstream contract `v2.7`
|
|
- timestamps are RFC3339
|
|
- status is normalized to Reanimator-friendly values
|
|
- missing component serial numbers must stay absent; LOGPile must not synthesize fake serials for Reanimator export
|
|
- CPU `firmware` field means CPU microcode, not generic processor firmware inventory
|
|
- `NULL`-style board manufacturer/product values are treated as absent
|
|
- optional component telemetry/health fields are exported when LOGPile already has the data
|
|
- partial `hardware.devices` must not suppress components still present only in legacy parser/collector fields
|
|
- `present` is not serialized for exported components; presence is expressed by the existence of the component record itself
|
|
- Reanimator ingest may apply its own server-side fallback serial rules for CPU and PCIe when LOGPile leaves serials absent
|
|
|
|
## Inclusion rules
|
|
|
|
Included:
|
|
- PCIe-class devices when the component itself is present, even if serial number is missing
|
|
- contract `v2.7` component telemetry and health fields when source data exists
|
|
- hardware sensors grouped into `fans`, `power`, `temperatures`, `other` only when the sensor has a real numeric reading
|
|
- sensor `location` is not exported; LOGPile keeps only sensor `name` plus measured values and status
|
|
- Redfish linked metric docs that carry component telemetry: `ProcessorMetrics`, `MemoryMetrics`, `DriveMetrics`, `EnvironmentMetrics`, `Metrics`
|
|
- `pcie_devices.slot` is treated as the canonical PCIe address; `bdf` is used only as an internal fallback/dedupe key and is not serialized in the payload
|
|
- `event_logs` are exported only from normalized parser/collector events that can be mapped to contract sources `host` / `bmc` / `redfish` without synthesizing content
|
|
- `manufactured_year_week` is exported only as a reliable passthrough when the parser/collector already extracted a valid `YYYY-Www` value
|
|
|
|
Excluded:
|
|
- storage endpoints from `pcie_devices`; disks and NVMe drives export only through `hardware.storage`
|
|
- fake serial numbers for PCIe-class devices; any fallback serial generation belongs to Reanimator ingest, not LOGPile
|
|
- sensors without a real numeric reading
|
|
- events with internal-only or unmappable sources such as LOGPile internal warnings
|
|
- memory with missing serial number
|
|
- memory with `present=false` or `status=Empty`
|
|
- CPUs with `present=false`
|
|
- storage without `serial_number`
|
|
- storage with `present=false`
|
|
- power supplies without `serial_number`
|
|
- power supplies with `present=false`
|
|
- non-present network adapters
|
|
- non-present PCIe / GPU devices
|
|
- device-bound firmware duplicated at top-level firmware list
|
|
- any field not present in the strict ingest contract
|
|
|
|
## Batch convert
|
|
|
|
`POST /api/convert` accepts multiple supported files and produces a ZIP with:
|
|
- one `*.reanimator.json` file per successful input
|
|
- `convert-summary.txt`
|
|
|
|
Behavior:
|
|
- unsupported filenames are skipped
|
|
- each file is parsed independently
|
|
- one bad file must not fail the whole batch if at least one conversion succeeds
|
|
- result artifact is temporary and deleted after download
|
|
|
|
## CSV export
|
|
|
|
`GET /api/export/csv` uses the same merged canonical inventory as Reanimator export,
|
|
with legacy network-card fallback kept only for records that still have no canonical device match.
|