// Package collector runs all hardware collectors and merges results // into a single HardwareSnapshot. Each sub-collector is independent: // a failure in one does not abort the others. package collector import ( "bee/audit/internal/schema" "log/slog" "time" ) // Run executes all collectors and returns the combined snapshot. // Partial failures are logged as warnings; collection always completes. func Run() schema.HardwareIngestRequest { start := time.Now() slog.Info("audit started") snap := schema.HardwareSnapshot{} board, biosFW := collectBoard() snap.Board = board snap.Firmware = append(snap.Firmware, biosFW...) cpus, cpuFW := collectCPUs(snap.Board.SerialNumber) snap.CPUs = cpus snap.Firmware = append(snap.Firmware, cpuFW...) snap.Memory = collectMemory() snap.Storage = collectStorage() snap.PCIeDevices = collectPCIe() snap.PowerSupplies = collectPSUs() // remaining collectors added in steps 1.8 – 1.10 slog.Info("audit completed", "duration", time.Since(start).Round(time.Millisecond)) sourceType := "livcd" protocol := "os-direct" return schema.HardwareIngestRequest{ SourceType: &sourceType, Protocol: &protocol, CollectedAt: time.Now().UTC().Format(time.RFC3339), Hardware: snap, } }