# LOGPile - Инструкции для 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 - **Порт:** localhost:8080 (по умолчанию) ## Структура проекта ``` logpile/ ├── cmd/logpile/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.22+ - Стандартная библиотека (net/http, archive/tar, compress/gzip) - embed для встраивания веб-ресурсов ### Frontend - Vanilla JavaScript - CSS (встроенный в бинарник) - Без сборщиков - всё embedded в бинарник ### Парсинг IPMI - SEL формат: текстовый вывод `ipmitool sel list` или бинарный - FRU формат: вывод `ipmitool fru print` - Конфигурация: различные текстовые файлы из архива ## Реализованные функции ### 1. Базовая структура - [x] Создана структура директорий - [x] go.mod инициализирован - [x] Makefile создан ### 2. Парсер архивов - [x] Распаковка tar.gz - [x] Распаковка zip - [x] Определение типов файлов внутри архива ### 3. Парсеры IPMI данных - [x] SEL parser (System Event Log) - [x] FRU parser (серийные номера) - [x] Config parser (конфигурация сервера) - [x] Поддержка нескольких производителей (Supermicro, Inspur, Nvidia, etc.) ### 4. Модели данных - [x] Event (события из SEL) - [x] Hardware (конфигурация) - [x] SerialNumber (серийники компонентов) ### 5. Веб-сервер - [x] HTTP сервер с embedded файлами - [x] Upload handler для архивов - [x] API endpoints для получения данных - [x] Handlers для экспорта ### 6. Веб-интерфейс - [x] Главная страница с upload формой - [x] Отображение событий (timeline/таблица) - [x] Отображение конфигурации - [x] Таблица серийных номеров - [x] Кнопки экспорта ### 7. Экспортеры - [x] CSV экспорт (серийники) - [x] JSON экспорт (конфиг, события) - [x] TXT отчет (логи) ### 8. Тестирование и сборка - [x] Unit тесты для парсеров - [x] Интеграционные тесты - [x] Cross-platform сборка (Linux, Windows, Mac) ## Примеры использования ```bash # Сборка make build # Запуск веб-сервера ./bin/logpile serve # Открыть в браузере open http://localhost:8080 # С указанием порта ./bin/logpile serve --port 9000 # С предзагрузкой файла ./bin/logpile serve --file /path/to/bmc-archive.tar.gz ``` ## Формат данных 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/status # Получить статус парсинга GET /api/parsers # Получить список доступных парсеров GET /api/events # Получить список событий GET /api/sensors # Получить показания сенсоров GET /api/config # Получить конфигурацию GET /api/serials # Получить серийные номера GET /api/firmware # Получить версии прошивок GET /api/export/csv # Экспорт в CSV GET /api/export/json # Экспорт в JSON GET /api/export/txt # Экспорт текстового отчета DELETE /api/clear # Очистить загруженные данные POST /api/shutdown # Завершить работу приложения ``` ## Поддерживаемые производители - Supermicro - Inspur/Kaytus - Nvidia - Generic (fallback) ## Следующие шаги 1. Добавление поддержки других производителей BMC (Dell iDRAC, HP iLO, Lenovo XCC) 2. Расширение функционала экспорта данных 3. Добавление фильтрации и сортировки данных в UI 4. Улучшение производительности парсинга больших архивов 5. Добавление поддержки других форматов IPMI данных ## Примечания - Все файлы веб-интерфейса должны быть embedded в бинарник через `//go:embed` - Приоритет на простоту и минимум зависимостей - Безопасность: валидация загружаемых архивов (размер, типы файлов) - UI должен быть простым и функциональным, не перегруженным - Поддержка русского языка в интерфейсе