Files
logpile/internal/parser/vendors/README.md
Michael Chus 512957545a Add LOGPile BMC diagnostic log analyzer
Features:
- Modular parser architecture for vendor-specific formats
- Inspur/Kaytus parser supporting asset.json, devicefrusdr.log,
  component.log, idl.log, and syslog files
- PCI Vendor/Device ID lookup for hardware identification
- Web interface with tabs: Events, Sensors, Config, Serials, Firmware
- Server specification summary with component grouping
- Export to CSV, JSON, TXT formats
- BMC alarm parsing from IDL logs (memory errors, PSU events, etc.)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 04:11:23 +03:00

4.1 KiB
Raw Blame History

Vendor Parser Modules

Каждый производитель серверов имеет свой формат диагностических архивов BMC. Эта директория содержит модули парсеров для разных производителей.

Структура модуля

vendors/
├── vendors.go              # Импорты всех модулей (добавьте сюда новый)
├── README.md               # Эта документация
├── template/               # Шаблон для нового модуля
│   └── parser.go.template
├── inspur/                 # Модуль Inspur/Kaytus
│   ├── parser.go           # Основной парсер + регистрация
│   ├── sdr.go              # Парсинг SDR (сенсоры)
│   ├── fru.go              # Парсинг FRU (серийники)
│   ├── asset.go            # Парсинг asset.json
│   └── syslog.go           # Парсинг syslog
├── supermicro/             # Будущий модуль Supermicro
├── dell/                   # Будущий модуль Dell iDRAC
└── hpe/                    # Будущий модуль HPE iLO

Как добавить новый модуль

1. Создайте директорию модуля

mkdir -p internal/parser/vendors/VENDORNAME

2. Скопируйте шаблон

cp internal/parser/vendors/template/parser.go.template \
   internal/parser/vendors/VENDORNAME/parser.go

3. Отредактируйте parser.go

  • Замените VENDORNAME на идентификатор вендора (например, supermicro)
  • Замените VENDOR_DESCRIPTION на описание (например, Supermicro)
  • Реализуйте метод Detect() для определения формата
  • Реализуйте метод Parse() для парсинга данных

4. Зарегистрируйте модуль

Добавьте импорт в vendors/vendors.go:

import (
    _ "git.mchus.pro/mchus/logpile/internal/parser/vendors/inspur"
    _ "git.mchus.pro/mchus/logpile/internal/parser/vendors/VENDORNAME"  // Новый модуль
)

5. Готово!

Модуль автоматически зарегистрируется при старте приложения через init().

Интерфейс VendorParser

type VendorParser interface {
    // Name возвращает человекочитаемое имя парсера
    Name() string

    // Vendor возвращает идентификатор вендора
    Vendor() string

    // Detect проверяет, подходит ли этот парсер для файлов
    // Возвращает уверенность 0-100 (0 = не подходит, 100 = точно этот формат)
    Detect(files []ExtractedFile) int

    // Parse парсит извлеченные файлы
    Parse(files []ExtractedFile) (*models.AnalysisResult, error)
}

Советы по реализации Detect()

  • Ищите уникальные файлы/директории для данного вендора
  • Проверяйте содержимое файлов на характерные маркеры
  • Возвращайте высокий confidence (70+) только при уверенном совпадении
  • Несколько парсеров могут вернуть >0, выбирается с максимальным confidence

Поддерживаемые вендоры

Вендор Идентификатор Статус Протестировано на
Inspur/Kaytus inspur Готов KR4268X2 (onekeylog)
Supermicro supermicro Планируется -
Dell iDRAC dell Планируется -
HPE iLO hpe Планируется -
Lenovo XCC lenovo Планируется -