Extract firmware from: - asset.json: BIOS, ME, BKC, CPU Microcode, HDD/SSD/NVMe - component.log: PSU firmware, Network adapter firmware Deduplicate entries to avoid showing same firmware twice. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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 |
⏳ Планируется | - |