misc: sds format support, convert limits, dell dedup, supermicro removal, bible updates

Parser / archive:
- Add .sds extension as tar-format alias (archive.go)
- Add tests for multipart upload size limits (multipart_limits_test.go)
- Remove supermicro crashdump parser (ADL-015)

Dell parser:
- Remove GPU duplicates from PCIeDevices (DCIM_VideoView vs DCIM_PCIDeviceView
  both list the same GPU; VideoView record is authoritative)

Server:
- Add LOGPILE_CONVERT_MAX_MB env var for independent convert batch size limit
- Improve "file too large" error message with current limit value

Web:
- Add CONVERT_MAX_FILES_PER_BATCH = 1000 cap
- Minor UI copy and CSS fixes

Bible:
- bible-local/06-parsers.md: add pci.ids enrichment rule (enrich model from
  pciids when name is empty but vendor_id+device_id are present)
- Sync bible submodule and local overview/architecture docs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-01 22:23:44 +03:00
parent 9c5512d238
commit 21ea129933
22 changed files with 268 additions and 446 deletions

View File

@@ -99,8 +99,8 @@ func (p *Parser) Parse(files []parser.ExtractedFile) (*models.AnalysisResult, er
result.Hardware.PowerSupply = dedupePSU(result.Hardware.PowerSupply)
result.Hardware.NetworkAdapters = dedupeNetworkAdapters(result.Hardware.NetworkAdapters)
result.Hardware.NetworkCards = nicCardsFromAdapters(result.Hardware.NetworkAdapters)
result.Hardware.PCIeDevices = dedupePCIe(result.Hardware.PCIeDevices)
result.Hardware.GPUs = dedupeGPU(result.Hardware.GPUs)
result.Hardware.PCIeDevices = removePCIeOverlappingWithGPUs(dedupePCIe(result.Hardware.PCIeDevices), result.Hardware.GPUs)
result.Hardware.CPUs = dedupeCPU(result.Hardware.CPUs)
result.Hardware.Memory = dedupeDIMM(result.Hardware.Memory)
result.Hardware.Firmware = dedupeFirmware(result.Hardware.Firmware)
@@ -1248,6 +1248,39 @@ func nicCardsFromAdapters(items []models.NetworkAdapter) []models.NIC {
return out
}
// removePCIeOverlappingWithGPUs drops PCIe entries that duplicate a GPU already
// captured from DCIM_VideoView. Dell TSR lists GPUs in both DCIM_VideoView and
// DCIM_PCIDeviceView; the VideoView record is authoritative (has serial, firmware,
// temperature) so the PCIe duplicate must be removed.
func removePCIeOverlappingWithGPUs(pcie []models.PCIeDevice, gpus []models.GPU) []models.PCIeDevice {
if len(gpus) == 0 {
return pcie
}
gpuSlots := make(map[string]struct{}, len(gpus))
gpuBDFs := make(map[string]struct{}, len(gpus))
for _, g := range gpus {
if s := strings.ToLower(strings.TrimSpace(g.Slot)); s != "" {
gpuSlots[s] = struct{}{}
}
if b := strings.ToLower(strings.TrimSpace(g.BDF)); b != "" {
gpuBDFs[b] = struct{}{}
}
}
out := make([]models.PCIeDevice, 0, len(pcie))
for _, p := range pcie {
slot := strings.ToLower(strings.TrimSpace(p.Slot))
bdf := strings.ToLower(strings.TrimSpace(p.BDF))
if _, ok := gpuSlots[slot]; ok && slot != "" {
continue
}
if _, ok := gpuBDFs[bdf]; ok && bdf != "" {
continue
}
out = append(out, p)
}
return out
}
func dedupePCIe(items []models.PCIeDevice) []models.PCIeDevice {
out := make([]models.PCIeDevice, 0, len(items))
seen := make(map[string]int)