# 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` - timestamps are RFC3339 - status is normalized to Reanimator-friendly values - missing PCIe serials may be generated from board serial + slot - missing CPU serials may be generated from board serial + socket - 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 ## Inclusion rules Included: - PCIe-class devices even when serial must be synthesized - contract `v2.4` component telemetry and health fields when source data exists - hardware sensors grouped into `fans`, `power`, `temperatures`, `other` - Redfish linked metric docs that carry component telemetry: `ProcessorMetrics`, `MemoryMetrics`, `DriveMetrics`, `EnvironmentMetrics`, `Metrics` Excluded: - 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.