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>
97 lines
4.1 KiB
Markdown
97 lines
4.1 KiB
Markdown
# 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. Создайте директорию модуля
|
||
|
||
```bash
|
||
mkdir -p internal/parser/vendors/VENDORNAME
|
||
```
|
||
|
||
### 2. Скопируйте шаблон
|
||
|
||
```bash
|
||
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`:
|
||
|
||
```go
|
||
import (
|
||
_ "git.mchus.pro/mchus/logpile/internal/parser/vendors/inspur"
|
||
_ "git.mchus.pro/mchus/logpile/internal/parser/vendors/VENDORNAME" // Новый модуль
|
||
)
|
||
```
|
||
|
||
### 5. Готово!
|
||
|
||
Модуль автоматически зарегистрируется при старте приложения через `init()`.
|
||
|
||
## Интерфейс VendorParser
|
||
|
||
```go
|
||
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` | ⏳ Планируется | - |
|