199 lines
7.6 KiB
Markdown
199 lines
7.6 KiB
Markdown
# 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 должен быть простым и функциональным, не перегруженным
|
||
- Поддержка русского языка в интерфейсе |