# 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)?