feat(hpe-ilo): parse AHS files, fix event logs export, add logs CSV export
- HPE iLO AHS parser: handle truncated last entry gracefully, recognize Alletra product line, expand event type/severity inference, trim iLO frame separators from event messages - Fix event_logs always 0 in Reanimator export: normalizeEventLogSource now maps "HPE iLO" → "bmc" - Fix chart JS not loading in LOGPile: rewriteChartStaticPaths now also rewrites src="/static/view.js" → /chart/static/view.js - Add "Logs Export" button (CSV, semicolon-delimited, UTF-8 BOM) and remove PDF button - Fix collector test broken by pciids rename of Intel VMD device - Update submodules: chart v2.7, pciids, bible Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -153,6 +153,29 @@ func TestParseAHSInventory(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseAHSTruncatedEntry(t *testing.T) {
|
||||
p := &Parser{}
|
||||
// Build archive where the last entry's declared size exceeds available data.
|
||||
archive := makeAHSArchive(t, []ahsTestEntry{
|
||||
{Name: "CUST_INFO.DAT", Payload: []byte("HPE\x00ProLiant DL380 Gen11\x00CZ2D1X0GS3\x00P52560-421")},
|
||||
{Name: "0000150-2025-11-27.zbb", Payload: []byte("some content")},
|
||||
})
|
||||
// Corrupt the size field of the second entry to exceed len(archive).
|
||||
secondHeaderOffset := ahsHeaderSize + len([]byte("HPE\x00ProLiant DL380 Gen11\x00CZ2D1X0GS3\x00P52560-421"))
|
||||
binary.LittleEndian.PutUint32(archive[secondHeaderOffset+8:secondHeaderOffset+12], 0xFFFFFFFF)
|
||||
|
||||
result, err := p.Parse([]parser.ExtractedFile{{
|
||||
Path: "HPE_CZ2D1X0GS3_20251127.ahs",
|
||||
Content: archive,
|
||||
}})
|
||||
if err != nil {
|
||||
t.Fatalf("expected graceful handling of truncated entry, got error: %v", err)
|
||||
}
|
||||
if result == nil {
|
||||
t.Fatal("expected non-nil result")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseExampleAHS(t *testing.T) {
|
||||
path := filepath.Join("..", "..", "..", "..", "example", "HPE_CZ2D1X0GS3_20260330.ahs")
|
||||
content, err := os.ReadFile(path)
|
||||
|
||||
Reference in New Issue
Block a user