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>
194 lines
7.7 KiB
Markdown
194 lines
7.7 KiB
Markdown
# BMC Analyzer - Инструкции для Claude Code
|
||
|
||
## Описание проекта
|
||
|
||
Приложение для анализа диагностической информации с BMC серверов (IPMI).
|
||
Представляет собой standalone Go-бинарник со встроенным веб-интерфейсом.
|
||
|
||
### Функциональность
|
||
|
||
**Входные данные:**
|
||
- Архив (tar.gz/zip) с диагностическими данными IPMI сервера
|
||
|
||
**Обработка:**
|
||
- Парсинг System Event Log (SEL) - журнал событий IPMI
|
||
- Парсинг FRU (Field Replaceable Unit) - серийные номера компонентов
|
||
- Парсинг конфигурации сервера (CPU, RAM, диски, и т.д.)
|
||
|
||
**Выходные данные:**
|
||
- Веб-интерфейс с человекочитаемой информацией
|
||
- Экспорт логов в TXT/JSON
|
||
- Экспорт конфигурации в JSON
|
||
- Экспорт серийных номеров в CSV
|
||
|
||
## Архитектура
|
||
|
||
- **Тип:** Standalone бинарник с embedded веб-сервером
|
||
- **Язык:** Go
|
||
- **UI:** Embedded HTML + CSS + Vanilla JS (или Alpine.js)
|
||
- **Порт:** localhost:8080 (по умолчанию)
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
bmc-analyzer/
|
||
├── cmd/bmc-analyzer/main.go # Точка входа
|
||
├── internal/
|
||
│ ├── parser/ # Парсинг архивов и IPMI данных
|
||
│ ├── models/ # Модели данных
|
||
│ ├── analyzer/ # Логика анализа
|
||
│ ├── exporter/ # Экспорт данных
|
||
│ └── server/ # HTTP сервер и handlers
|
||
├── web/ # Embedded веб-интерфейс
|
||
│ ├── static/ # CSS, JS, изображения
|
||
│ └── templates/ # HTML шаблоны
|
||
├── testdata/ # Примеры архивов для тестов
|
||
├── go.mod
|
||
├── Makefile
|
||
└── README.md
|
||
```
|
||
|
||
## Технический стек
|
||
|
||
### Backend
|
||
- Go 1.21+
|
||
- Стандартная библиотека (net/http, archive/tar, compress/gzip)
|
||
- embed для встраивания веб-ресурсов
|
||
- Возможно: fiber или gin для роутинга (на ваше усмотрение)
|
||
|
||
### Frontend
|
||
- Vanilla JavaScript или Alpine.js (минимализм)
|
||
- CSS (можно Tailwind CSS через CDN)
|
||
- Без сборщиков - всё embedded в бинарник
|
||
|
||
### Парсинг IPMI
|
||
- SEL формат: обычно текстовый вывод `ipmitool sel list` или бинарный
|
||
- FRU формат: вывод `ipmitool fru print`
|
||
- Конфигурация: различные текстовые файлы из архива
|
||
|
||
## Этапы разработки
|
||
|
||
### 1. Базовая структура ✓
|
||
- [x] Создана структура директорий
|
||
- [ ] go.mod инициализирован
|
||
- [ ] Makefile создан
|
||
|
||
### 2. Парсер архивов
|
||
- [ ] Распаковка tar.gz
|
||
- [ ] Распаковка zip
|
||
- [ ] Определение типов файлов внутри архива
|
||
|
||
### 3. Парсеры IPMI данных
|
||
- [ ] SEL parser (System Event Log)
|
||
- [ ] FRU parser (серийные номера)
|
||
- [ ] Config parser (конфигурация сервера)
|
||
|
||
### 4. Модели данных
|
||
- [ ] Event (события из SEL)
|
||
- [ ] Hardware (конфигурация)
|
||
- [ ] SerialNumber (серийники компонентов)
|
||
|
||
### 5. Веб-сервер
|
||
- [ ] HTTP сервер с embedded файлами
|
||
- [ ] Upload handler для архивов
|
||
- [ ] API endpoints для получения данных
|
||
- [ ] Handlers для экспорта
|
||
|
||
### 6. Веб-интерфейс
|
||
- [ ] Главная страница с upload формой
|
||
- [ ] Отображение событий (timeline/таблица)
|
||
- [ ] Отображение конфигурации
|
||
- [ ] Таблица серийных номеров
|
||
- [ ] Кнопки экспорта
|
||
|
||
### 7. Экспортеры
|
||
- [ ] CSV экспорт (серийники)
|
||
- [ ] JSON экспорт (конфиг, события)
|
||
- [ ] TXT отчет (логи)
|
||
|
||
### 8. Тестирование и сборка
|
||
- [ ] Unit тесты для парсеров
|
||
- [ ] Интеграционные тесты
|
||
- [ ] Cross-platform сборка (Linux, Windows, Mac)
|
||
|
||
## Примеры использования
|
||
|
||
```bash
|
||
# Простой запуск
|
||
./bmc-analyzer
|
||
|
||
# С указанием порта
|
||
./bmc-analyzer --port 9000
|
||
|
||
# С предзагрузкой файла
|
||
./bmc-analyzer --file /path/to/bmc-archive.tar.gz
|
||
|
||
# Кросс-компиляция
|
||
make build-all
|
||
```
|
||
|
||
## Формат данных IPMI
|
||
|
||
### SEL (System Event Log)
|
||
```
|
||
SEL Record ID : 0001
|
||
Record Type : 02
|
||
Timestamp : 01/15/2025 14:23:45
|
||
Generator ID : 0020
|
||
EvM Revision : 04
|
||
Sensor Type : Temperature
|
||
Sensor Number : 01
|
||
Event Type : Threshold
|
||
Event Direction : Assertion Event
|
||
Event Data : 010000
|
||
Description : Upper Critical - going high
|
||
```
|
||
|
||
### FRU (Field Replaceable Unit)
|
||
```
|
||
FRU Device Description : Builtin FRU Device (ID 0)
|
||
Board Mfg Date : Mon Jan 1 00:00:00 1996
|
||
Board Mfg : Supermicro
|
||
Board Product : X11DPH-T
|
||
Board Serial : WM194S001234
|
||
Board Part Number : X11DPH-TQ
|
||
```
|
||
|
||
## API Endpoints (планируемые)
|
||
|
||
```
|
||
POST /api/upload # Загрузить архив
|
||
GET /api/events # Получить список событий
|
||
GET /api/config # Получить конфигурацию
|
||
GET /api/serials # Получить серийные номера
|
||
GET /api/export/csv # Экспорт в CSV
|
||
GET /api/export/json # Экспорт в JSON
|
||
GET /api/export/txt # Экспорт текстового отчета
|
||
DELETE /api/clear # Очистить загруженные данные
|
||
```
|
||
|
||
## Следующие шаги
|
||
|
||
1. Инициализировать Go модуль
|
||
2. Создать базовую структуру пакетов
|
||
3. Реализовать парсер архивов (tar.gz)
|
||
4. Создать простой HTTP сервер с upload формой
|
||
5. Реализовать парсинг SEL логов
|
||
6. Добавить веб-интерфейс для отображения данных
|
||
|
||
## Примечания
|
||
|
||
- Все файлы веб-интерфейса должны быть embedded в бинарник через `//go:embed`
|
||
- Приоритет на простоту и минимум зависимостей
|
||
- Безопасность: валидация загружаемых архивов (размер, типы файлов)
|
||
- UI должен быть простым и функциональным, не перегруженным
|
||
- Поддержка русского языка в интерфейсе
|
||
|
||
## Вопросы для уточнения
|
||
|
||
1. Какие конкретно производители BMC используются? (Supermicro, Dell iDRAC, HP iLO, etc.)
|
||
2. Есть ли примеры реальных архивов для тестирования?
|
||
3. Нужна ли поддержка разных форматов SEL (текстовый vs бинарный)?
|
||
4. Какие метрики/события наиболее важны для анализа?
|
||
5. Нужна ли фильтрация событий по severity (Critical, Warning, Info)?
|