fix(parser): support Inspur onekeylog per-file component/*.txt D-Bus layout
Some onekeylog BMC firmware variants split the combined component.log into per-file D-Bus GetAll transcripts under component/ (e.g. PowerSupplyInfo.txt, FanInfo.txt), which the inspur parser did not read, leaving PSU and fan data empty. Add a GETALL block parser and wire it as a fallback for PSU and fan telemetry when component.log is absent; document the layout and known gaps in bible-local. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
4ce0251ce4
commit
5677c49998
@@ -1198,3 +1198,34 @@ Do not keep parallel report sections, filters, or table renderers in shell JavaS
|
||||
- Report-level filtering or extra report sections must be implemented in `internal/chart`, not in
|
||||
`web/static/js/app.js`.
|
||||
- Removing legacy DOM renderers from the shell is a correctness fix, not a behavior regression.
|
||||
|
||||
---
|
||||
|
||||
## ADL-047 — Inspur onekeylog per-file `component/*.txt` D-Bus layout is parsed alongside `component.log`
|
||||
|
||||
**Date:** 2026-07-23
|
||||
**Context:** A field dump (`dump_29E201150_20260723-1418.tar.gz`) came from an Inspur/Kaytus
|
||||
onekeylog BMC that does not produce the combined `component/component.log` the `inspur` parser
|
||||
expected. Instead it dumps each component separately under `component/*.txt` as raw D-Bus `GetAll`
|
||||
transcripts (`GETALL <object> OBJect` blocks, tab-separated `"field" "type":"x" "data":value`
|
||||
triples, not valid JSON). The archive root is also named `dump_<serial>_<timestamp>/` rather than
|
||||
`onekeylog/`, so path-based detection did not recognize the layout either. As a result PSU and fan
|
||||
data were silently empty on this archive class even though the source files carried full data.
|
||||
**Decision:** Treat the per-file `component/*.txt` D-Bus transcript as a second supported onekeylog
|
||||
layout, not a new vendor. Added `internal/parser/vendors/inspur/component_dbus.go` with a
|
||||
line-oriented GETALL block parser (`parseDBusGetAllObjects`), wired as a fallback in `parser.go`
|
||||
when `component.log` is absent: `ParseComponentDirPowerSupply` from `PowerSupplyInfo.txt` and
|
||||
`ParseComponentDirFan` from `FanInfo.txt`. Extended `Detect()` with `onekeylog_dreport.log` and
|
||||
`component/powersupplyinfo.txt` markers so this layout is recognized without relying solely on
|
||||
`asset.json` content markers. GETALL object names can recur across command sections with different
|
||||
field subsets (e.g. `Pwm_N` under FanPWM has a `Value` reading, the same name under FanControl has
|
||||
only a `Target` setpoint); fields are unioned across occurrences with first-seen-wins per key so a
|
||||
later content-free duplicate cannot blank out an earlier real reading.
|
||||
**Consequences:**
|
||||
- PSU and fan RPM/PWM telemetry now parse correctly for this onekeylog layout.
|
||||
- `component/NetworkAdapter.txt`, `component/HDDBpListInfo.txt` (busctl `--verbose` object-tree
|
||||
dump) and `component/RAID.txt` (mixed per-controller formats) remain unparsed for this layout;
|
||||
NIC data is not lost since PCIe inventory from `asset.json` already carries NIC model/MAC.
|
||||
Revisit only if a real archive needs that specific data and asset.json does not cover it.
|
||||
- Any future component/*.txt GETALL consumer should reuse `parseDBusGetAllObjects` rather than
|
||||
re-implementing block splitting or field extraction.
|
||||
|
||||
Reference in New Issue
Block a user