Implement the full architectural plan: unified ingest.Service entry point for archive and Redfish payloads, modular redfishprofile package with composable profiles (generic, ami-family, msi, supermicro, dell, hgx-topology), score-based profile matching with fallback expansion mode, and profile-driven acquisition/analysis plans. Vendor-specific logic moved out of common executors and into profile hooks. GPU chassis lookup strategies and known storage recovery collections (IntelVROC/HA-RAID/MRVL) now live in ResolvedAnalysisPlan, populated by profiles at analysis time. Replay helpers read from the plan; no hardcoded path lists remain in generic code. Also splits redfish_replay.go into domain modules (gpu, storage, inventory, fru, profiles) and adds full fixture/matcher/directive test coverage including Dell, AMI, unknown-vendor fallback, and deterministic ordering. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
118 lines
2.9 KiB
Go
118 lines
2.9 KiB
Go
package redfishprofile
|
|
|
|
func genericProfile() Profile {
|
|
return staticProfile{
|
|
name: "generic",
|
|
priority: 100,
|
|
safeForFallback: true,
|
|
matchFn: func(MatchSignals) int { return 10 },
|
|
extendAcquisition: func(plan *AcquisitionPlan, _ MatchSignals) {
|
|
ensurePrefetchPolicy(plan, AcquisitionPrefetchPolicy{
|
|
IncludeSuffixes: []string{
|
|
"/Bios",
|
|
"/SecureBoot",
|
|
"/Processors",
|
|
"/Memory",
|
|
"/Storage",
|
|
"/SimpleStorage",
|
|
"/PCIeDevices",
|
|
"/PCIeFunctions",
|
|
"/Accelerators",
|
|
"/GraphicsControllers",
|
|
"/EthernetInterfaces",
|
|
"/NetworkInterfaces",
|
|
"/NetworkAdapters",
|
|
"/Drives",
|
|
"/Power",
|
|
"/PowerSubsystem/PowerSupplies",
|
|
"/NetworkProtocol",
|
|
"/UpdateService",
|
|
"/UpdateService/FirmwareInventory",
|
|
},
|
|
ExcludeContains: []string{
|
|
"/Fabrics",
|
|
"/Backplanes",
|
|
"/Boards",
|
|
"/Assembly",
|
|
"/Sensors",
|
|
"/ThresholdSensors",
|
|
"/DiscreteSensors",
|
|
"/ThermalConfig",
|
|
"/ThermalSubsystem",
|
|
"/EnvironmentMetrics",
|
|
"/Certificates",
|
|
"/LogServices",
|
|
},
|
|
})
|
|
ensureScopedPathPolicy(plan, AcquisitionScopedPathPolicy{
|
|
SystemCriticalSuffixes: []string{
|
|
"/Bios",
|
|
"/SecureBoot",
|
|
"/Oem/Public",
|
|
"/Oem/Public/FRU",
|
|
"/Processors",
|
|
"/Memory",
|
|
"/Storage",
|
|
"/PCIeDevices",
|
|
"/PCIeFunctions",
|
|
"/Accelerators",
|
|
"/GraphicsControllers",
|
|
"/EthernetInterfaces",
|
|
"/NetworkInterfaces",
|
|
"/SimpleStorage",
|
|
"/Storage/IntelVROC",
|
|
"/Storage/IntelVROC/Drives",
|
|
"/Storage/IntelVROC/Volumes",
|
|
},
|
|
ChassisCriticalSuffixes: []string{
|
|
"/Oem/Public",
|
|
"/Oem/Public/FRU",
|
|
"/Power",
|
|
"/NetworkAdapters",
|
|
"/PCIeDevices",
|
|
"/Accelerators",
|
|
"/Drives",
|
|
"/Assembly",
|
|
},
|
|
ManagerCriticalSuffixes: []string{
|
|
"/NetworkProtocol",
|
|
},
|
|
SystemSeedSuffixes: []string{
|
|
"/SimpleStorage",
|
|
"/Storage/IntelVROC",
|
|
"/Storage/IntelVROC/Drives",
|
|
"/Storage/IntelVROC/Volumes",
|
|
},
|
|
})
|
|
addPlanPaths(&plan.CriticalPaths,
|
|
"/redfish/v1/UpdateService",
|
|
"/redfish/v1/UpdateService/FirmwareInventory",
|
|
)
|
|
ensureSnapshotMaxDocuments(plan, 100000)
|
|
ensureSnapshotWorkers(plan, 6)
|
|
ensurePrefetchWorkers(plan, 4)
|
|
ensureETABaseline(plan, AcquisitionETABaseline{
|
|
DiscoverySeconds: 8,
|
|
SnapshotSeconds: 90,
|
|
PrefetchSeconds: 20,
|
|
CriticalPlanBSeconds: 20,
|
|
ProfilePlanBSeconds: 15,
|
|
})
|
|
ensurePostProbePolicy(plan, AcquisitionPostProbePolicy{
|
|
EnableNumericCollectionProbe: true,
|
|
})
|
|
ensureRecoveryPolicy(plan, AcquisitionRecoveryPolicy{
|
|
EnableCriticalCollectionMemberRetry: true,
|
|
EnableCriticalSlowProbe: true,
|
|
})
|
|
ensureRatePolicy(plan, AcquisitionRatePolicy{
|
|
TargetP95LatencyMS: 900,
|
|
ThrottleP95LatencyMS: 1800,
|
|
MinSnapshotWorkers: 2,
|
|
MinPrefetchWorkers: 1,
|
|
DisablePrefetchOnErrors: true,
|
|
})
|
|
},
|
|
}
|
|
}
|