Парсер internal/parser/vendors/inspur/ на реальном дампе dump_<SN>_<date>.tar.gz (HGX B200, KR9288-X3) вернул stats: {events: 1740, fru: 0, sensors: 0}. SEL разобрался, весь остальной инвентарь и диагностические логи потеряны: парсер завязан на devicefrusdr.log, которого в этом варианте дампа нет, и не читает часть богатых источников вообще.
Диагностический кейс — интермиттентное пропадание GPU с PCIe (деградация GPU-бейзборда). Именно те данные, что помогают закрыть такой кейс, LOGPile сейчас дропает.
Два layout'а дампов
onekeylog/.../devicefrusdr.log — старый, парсер заточен под него.
dump_<SN>_<date>/ (текущий) — нетdevicefrusdr.log. Вместо него:
Нет devicefrusdr.log → FRU из component/fru.txt, сенсоры из component/sensor.txt + component/sdr.txt (при необходимости component/SDR.DAT).
Acceptance: на dump_<SN>_*stats.fru > 0 и stats.sensors > 0; в FRU есть Product Serial <SN> и GPU-бейзборд (партномер YZCA-04672-101, S/N <baseboard-SN>).
P0 — Новый источник PCIe/GPU-присутствия: diagnose/OtrdDiagnoseComponent.json
Прямой источник GPU-присутствия/линка на момент дампа, дополняет gpu_status.go (сейчас статус выводится только из SEL через applyGPUStatusFromEvents/extractFaultyGPUSet).
Флагать деградацию линка: PresentStatus=1, но CurrentLinkSpeed < MaxLinkSpeed или NegotiatedLinkWidth < MaxLinkWidth.
Acceptance: на этом дампе — 8 GPU в слотах 100–107, Present, Gen5 x16.
P1 — Признаки со стороны BMC-компонентов (log/bmc/commer-comp/*)
commerslot/commerslot.log: Data Update fail for dev serial-N как события с timestamp.
commerhmc (HGX Management Controller), commerswvr (switch-VR/питание свитча), commerswcpld — ERROR/фейлы как события.
Учесть логротейт: *.log + *.tar.gz.0..9, парсить и архивные части. Фильтровать шум (Error in update redis, MutexTimeout = 0, Invalid Comp Data — не отказы).
Acceptance: в события попадают Data Update fail for dev serial-6/serial-7 от 2026-07-27.
P1 — SEL: источник и дедуп
При отсутствии devicefrusdr.log/selelist.csv читать SEL из log/sel.csv (сейчас работает — 1740 событий) и/или log/bmc/struct-log/sel_json.log.
Схлопывать задвоенные SEL-строки (одно событие приходит дважды) по (timestamp, event_type, description) — сейчас дубликаты уходят в экспорт и удваивают счёт эпизодов.
P2 — Контекст перезагрузок и BIOS
runningdata/bmc-device/biosChangedSettings/Bios_change_settings*.json — события «BIOS settings changed».
log/server/progress_log/host0/* — BIOS POST-коды.
P2 — Диагностика видимости
Если Detect() дал высокую уверенность, но sensors==0 || fru==0 — вернуть в /api/upload предупреждение («inventory sources not found: devicefrusdr.log absent, fell back to …»).
Не ломать
Обратную совместимость со старым onekeylog/.../devicefrusdr.log layout.
Существующие тесты internal/parser/vendors/inspur/*_test.go; добавить фикстуры нового layout'а (обрезанный dump_<SN>_<date>/).
Тестовый артефакт
~/Downloads/dump_<SN>_<date>.tar.gz (6.3 МБ). Эталоны: SEL 1740 событий (после дедупа ~870 уникальных), 34 PCIe present-mismatch, 8 GPU present/Gen5x16 в diagnose-json.
## Контекст
Парсер `internal/parser/vendors/inspur/` на реальном дампе `dump_<SN>_<date>.tar.gz` (HGX B200, KR9288-X3) вернул `stats: {events: 1740, fru: 0, sensors: 0}`. SEL разобрался, весь остальной инвентарь и диагностические логи потеряны: парсер завязан на `devicefrusdr.log`, которого в этом варианте дампа нет, и не читает часть богатых источников вообще.
Диагностический кейс — интермиттентное пропадание GPU с PCIe (деградация GPU-бейзборда). Именно те данные, что помогают закрыть такой кейс, LOGPile сейчас дропает.
## Два layout'а дампов
1. `onekeylog/.../devicefrusdr.log` — старый, парсер заточен под него.
2. `dump_<SN>_<date>/` (текущий) — **нет** `devicefrusdr.log`. Вместо него:
- `component/sensor.txt`, `component/sdr.txt`, `component/SDR.DAT` — сенсоры/SDR
- `component/fru.txt` — FRU (S/N сервера, партномера MB и GPU-бейзборда)
- `log/sel.csv`, `log/sel.log`, `log/bmc/struct-log/sel_json.log` — SEL
- `log/bmc/diagnose/OtrdDiagnoseComponent.json` — структурный PCIe-снимок
- `log/bmc/commer-comp/*` — покомпонентные логи BMC
## Задачи
### P0 — Fallback сенсоров/FRU без `devicefrusdr.log`
- Нет `devicefrusdr.log` → FRU из `component/fru.txt`, сенсоры из `component/sensor.txt` + `component/sdr.txt` (при необходимости `component/SDR.DAT`).
- **Acceptance:** на `dump_<SN>_*` `stats.fru > 0` и `stats.sensors > 0`; в FRU есть Product Serial `<SN>` и GPU-бейзборд (партномер `YZCA-04672-101`, S/N `<baseboard-SN>`).
### P0 — Новый источник PCIe/GPU-присутствия: `diagnose/OtrdDiagnoseComponent.json`
- Парсить массив `"Pcie Device Info"`: `LocString` (`#GPU0..#GPU7`, `#SlotNN`), `PcieSlot`, `PresentStatus`, `VendorId`, `DeviceId`, `CurrentLinkSpeed`, `MaxLinkSpeed`, `NegotiatedLinkWidth`, `MaxLinkWidth`.
- Маппинг `VendorId 4318 (0x10de)` + `DeviceId 0x2901` = NVIDIA B200.
- Прямой источник GPU-присутствия/линка на момент дампа, дополняет `gpu_status.go` (сейчас статус выводится только из SEL через `applyGPUStatusFromEvents`/`extractFaultyGPUSet`).
- Флагать деградацию линка: `PresentStatus=1`, но `CurrentLinkSpeed < MaxLinkSpeed` или `NegotiatedLinkWidth < MaxLinkWidth`.
- **Acceptance:** на этом дампе — 8 GPU в слотах 100–107, Present, Gen5 x16.
### P1 — Признаки со стороны BMC-компонентов (`log/bmc/commer-comp/*`)
- `commerslot/commerslot.log`: `Data Update fail for dev serial-N` как события с timestamp.
- `commerhmc` (HGX Management Controller), `commerswvr` (switch-VR/питание свитча), `commerswcpld` — ERROR/фейлы как события.
- Учесть логротейт: `*.log` + `*.tar.gz.0..9`, парсить и архивные части. Фильтровать шум (`Error in update redis`, `MutexTimeout = 0`, `Invalid Comp Data` — не отказы).
- **Acceptance:** в события попадают `Data Update fail for dev serial-6/serial-7` от 2026-07-27.
### P1 — SEL: источник и дедуп
- При отсутствии `devicefrusdr.log`/`selelist.csv` читать SEL из `log/sel.csv` (сейчас работает — 1740 событий) и/или `log/bmc/struct-log/sel_json.log`.
- Схлопывать задвоенные SEL-строки (одно событие приходит дважды) по `(timestamp, event_type, description)` — сейчас дубликаты уходят в экспорт и удваивают счёт эпизодов.
### P2 — Контекст перезагрузок и BIOS
- `runningdata/bmc-device/biosChangedSettings/Bios_change_settings*.json` — события «BIOS settings changed».
- `log/server/progress_log/host0/*` — BIOS POST-коды.
### P2 — Диагностика видимости
- Если `Detect()` дал высокую уверенность, но `sensors==0 || fru==0` — вернуть в `/api/upload` предупреждение («inventory sources not found: devicefrusdr.log absent, fell back to …»).
## Не ломать
- Обратную совместимость со старым `onekeylog/.../devicefrusdr.log` layout.
- Существующие тесты `internal/parser/vendors/inspur/*_test.go`; добавить фикстуры нового layout'а (обрезанный `dump_<SN>_<date>/`).
## Тестовый артефакт
`~/Downloads/dump_<SN>_<date>.tar.gz` (6.3 МБ). Эталоны: SEL 1740 событий (после дедупа ~870 уникальных), 34 PCIe present-mismatch, 8 GPU present/Gen5x16 в diagnose-json.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Контекст
Парсер
internal/parser/vendors/inspur/на реальном дампеdump_<SN>_<date>.tar.gz(HGX B200, KR9288-X3) вернулstats: {events: 1740, fru: 0, sensors: 0}. SEL разобрался, весь остальной инвентарь и диагностические логи потеряны: парсер завязан наdevicefrusdr.log, которого в этом варианте дампа нет, и не читает часть богатых источников вообще.Диагностический кейс — интермиттентное пропадание GPU с PCIe (деградация GPU-бейзборда). Именно те данные, что помогают закрыть такой кейс, LOGPile сейчас дропает.
Два layout'а дампов
onekeylog/.../devicefrusdr.log— старый, парсер заточен под него.dump_<SN>_<date>/(текущий) — нетdevicefrusdr.log. Вместо него:component/sensor.txt,component/sdr.txt,component/SDR.DAT— сенсоры/SDRcomponent/fru.txt— FRU (S/N сервера, партномера MB и GPU-бейзборда)log/sel.csv,log/sel.log,log/bmc/struct-log/sel_json.log— SELlog/bmc/diagnose/OtrdDiagnoseComponent.json— структурный PCIe-снимокlog/bmc/commer-comp/*— покомпонентные логи BMCЗадачи
P0 — Fallback сенсоров/FRU без
devicefrusdr.logdevicefrusdr.log→ FRU изcomponent/fru.txt, сенсоры изcomponent/sensor.txt+component/sdr.txt(при необходимостиcomponent/SDR.DAT).dump_<SN>_*stats.fru > 0иstats.sensors > 0; в FRU есть Product Serial<SN>и GPU-бейзборд (партномерYZCA-04672-101, S/N<baseboard-SN>).P0 — Новый источник PCIe/GPU-присутствия:
diagnose/OtrdDiagnoseComponent.json"Pcie Device Info":LocString(#GPU0..#GPU7,#SlotNN),PcieSlot,PresentStatus,VendorId,DeviceId,CurrentLinkSpeed,MaxLinkSpeed,NegotiatedLinkWidth,MaxLinkWidth.VendorId 4318 (0x10de)+DeviceId 0x2901= NVIDIA B200.gpu_status.go(сейчас статус выводится только из SEL черезapplyGPUStatusFromEvents/extractFaultyGPUSet).PresentStatus=1, ноCurrentLinkSpeed < MaxLinkSpeedилиNegotiatedLinkWidth < MaxLinkWidth.P1 — Признаки со стороны BMC-компонентов (
log/bmc/commer-comp/*)commerslot/commerslot.log:Data Update fail for dev serial-Nкак события с timestamp.commerhmc(HGX Management Controller),commerswvr(switch-VR/питание свитча),commerswcpld— ERROR/фейлы как события.*.log+*.tar.gz.0..9, парсить и архивные части. Фильтровать шум (Error in update redis,MutexTimeout = 0,Invalid Comp Data— не отказы).Data Update fail for dev serial-6/serial-7от 2026-07-27.P1 — SEL: источник и дедуп
devicefrusdr.log/selelist.csvчитать SEL изlog/sel.csv(сейчас работает — 1740 событий) и/илиlog/bmc/struct-log/sel_json.log.(timestamp, event_type, description)— сейчас дубликаты уходят в экспорт и удваивают счёт эпизодов.P2 — Контекст перезагрузок и BIOS
runningdata/bmc-device/biosChangedSettings/Bios_change_settings*.json— события «BIOS settings changed».log/server/progress_log/host0/*— BIOS POST-коды.P2 — Диагностика видимости
Detect()дал высокую уверенность, ноsensors==0 || fru==0— вернуть в/api/uploadпредупреждение («inventory sources not found: devicefrusdr.log absent, fell back to …»).Не ломать
onekeylog/.../devicefrusdr.loglayout.internal/parser/vendors/inspur/*_test.go; добавить фикстуры нового layout'а (обрезанныйdump_<SN>_<date>/).Тестовый артефакт
~/Downloads/dump_<SN>_<date>.tar.gz(6.3 МБ). Эталоны: SEL 1740 событий (после дедупа ~870 уникальных), 34 PCIe present-mismatch, 8 GPU present/Gen5x16 в diagnose-json.Реализовано в
74e6bf0(см. коммит) + bible-local/10-decisions.md ADL-048.