5.0 KiB
5.0 KiB
LOGPile - Инструкции для Claude Code
Что это за проект
LOGPile - standalone Go-приложение для анализа BMC/IPMI диагностических архивов с веб-интерфейсом. Приложение запускает локальный HTTP-сервер, парсит архив, автоматически выбирает подходящий parser по vendor и показывает результат в UI + экспортирует данные.
Актуальная архитектура
- Язык: Go 1.22+
- HTTP: стандартный
net/http+http.ServeMux - UI: embedded (
//go:embed) HTML/CSS/Vanilla JS - Бинарник: один executable, без внешних зависимостей на runtime
- Порт по умолчанию:
8082(а не 8080)
Реальная структура репозитория
logpile/
├── cmd/logpile/main.go
├── internal/
│ ├── analyzer/
│ ├── exporter/
│ ├── models/
│ ├── parser/
│ │ └── vendors/
│ │ ├── generic/
│ │ ├── inspur/
│ │ ├── nvidia/
│ │ ├── nvidia_bug_report/
│ │ └── supermicro/
│ └── server/
├── web/
│ ├── static/
│ └── templates/
├── Makefile
└── go.mod
CLI и запуск (актуально)
# Сборка
make build
# Запуск (авто-открытие браузера включено)
./bin/logpile
# Явный порт
./bin/logpile --port 8082
# Не открывать браузер автоматически
./bin/logpile --no-browser
# Версия
./bin/logpile --version
Важно: сейчас нет subcommand serve, запуск идёт напрямую через флаги.
Основной runtime-flow
main.goрегистрирует embedded web FS и запускает сервер.POST /api/uploadпринимает архив и передаёт его вparser.BMCParser.DetectFormat()выбирает parser с максимальным confidence.- Результат сохраняется в памяти (
Server.result) и отдаётся через API. - UI строит вкладки: конфигурация, прошивки, сенсоры, серийники, события.
Поддерживаемые parser modules
supermicro- Supermicro parserinspur- Inspur/Kaytus parsernvidia- NVIDIA Field Diagnostics parsernvidia_bug_report- parser дляnvidia-bug-report.shgeneric- fallback parser
Реестр parser-ов: internal/parser/registry.go, подключение модулей: internal/parser/vendors/vendors.go.
API (фактически в коде)
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
GET /api/export/json
GET /api/export/txt
DELETE /api/clear
POST /api/shutdown
Форматы данных и экспорт
AnalysisResultагрегирует: events, sensors, FRU, hardware.- Экспорт реализован в
internal/exporter/exporter.go:- CSV: серийные номера компонентов
- JSON: полный
AnalysisResult - TXT: человекочитаемый отчёт
Важные текущие ограничения (чтобы не ошибаться в задачах)
- Upload через
/api/uploadиспользуетParseFromReader(), где сейчас поддержаны.tar,.tar.gz,.tgz. - Код распаковки
.zipесть, но в текущем upload-путиzipне обрабатывается. - Флаг
--fileприсутствует в CLI-конфиге, но preload вServer.Run()сейчас не выполняется. - Данные хранятся только в памяти процесса; перезапуск очищает состояние.
Практические рекомендации для доработок
- Если меняется parser-логика, обновляй
Version()соответствующего parser-модуля. - Новые vendor-парсеры регистрируй через import в
internal/parser/vendors/vendors.go. - Для API/контрактов проверяй согласованность
handlers.goиweb/static/js/app.js. - Для UI-изменений не забывай, что ассеты embedded через
web/embed.go.
Приоритетные следующие шаги
- Довести поддержку
zipв upload path (ParseFromReader). - Реализовать preload из
--file. - Добавить/актуализировать автотесты для parser и HTTP handlers.
- Расширить vendor coverage (Dell/HPE/Lenovo) по реальным дампам.