Консольный процессор логов для автоматического преобразования событий во время симуляции и расчета метрик прохождения подземелий.
Приложение спроектировано в парадигме Hexagonal Architecture и реализует строгую, детерминированную машину состояний (FSM) для обработки входящих игровых событий в реальном времени.
- Чистая Архитектура: Полное разделение бизнес-логики (
core/domain,service) и инфраструктурных деталей (парсеры логов, консольный вывод, конфигурация). Зависимости строго контролируются с помощьюdepguard. - Fail-Fast валидация: Защита от невалидных логов и логических петель (например, перемещение мертвого игрока, повторное убийство босса). Ошибочные действия логируются и изолируются, предотвращая падение системы.
- Гибкое распределение потоков вывода: Возможность выводить логи событий и итоговый аналитический отчет как в единый
стандартный поток (
stdout), так и разносить по разным файлам через CLI-флаги. - Строгое соответствие линтерам: Код полностью удовлетворяет жестким требованиям
golangci-lint(включая линтеры когнитивной сложностиgocognitи стилистики кодаgocritic).
make build
# или напрямую через go:
go build -o bin/dungeon-log cmd/dungeon-log/main.go- Логи и отчет печатаются в Stdout:
./bin/dungeon-log -c path/to/config.json -e path/to/events- Разделение логов и аналитики по разным файлам:
./bin/dungeon-log -c path/to/config.json -e path/to/events -o raw_logs.txt -r final_report.txt-c,--config: Путь до файла конфигурации подземелья (Обязательный)-e,--events: Путь до файла с логами событий (Обязательный)-o, --output: Путь до файла, куда запишется эхо логов (По умолчанию:stdout)-r,--report: Путь до файла, куда запишется финальный аналитический отчет (По умолчанию:stdout)
Проект покрыт unit-тестами для стейт-машины и e2e-тестами, проверяющими скомпилированный бинарник как черный ящик.
# Запуск линтеров
make lint
# или: golangci-lint run ./...
# Запуск тестов (включая e2e)
make test
# или: go test -v -race ./...