Skip to content

ilindan-dev/dungeon-log

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dungeon Log

Консольный процессор логов для автоматического преобразования событий во время симуляции и расчета метрик прохождения подземелий.

Приложение спроектировано в парадигме 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

Примеры использования

  1. Логи и отчет печатаются в Stdout:
./bin/dungeon-log -c path/to/config.json -e path/to/events
  1. Разделение логов и аналитики по разным файлам:
./bin/dungeon-log -c path/to/config.json -e path/to/events -o raw_logs.txt -r final_report.txt

Флаги CLI

  • -c, --config: Путь до файла конфигурации подземелья (Обязательный)
  • -e, --events: Путь до файла с логами событий (Обязательный)
  • -o, --output: Путь до файла, куда запишется эхо логов (По умолчанию: stdout)
  • -r, --report: Путь до файла, куда запишется финальный аналитический отчет (По умолчанию: stdout)

Тестирование и линтер

Проект покрыт unit-тестами для стейт-машины и e2e-тестами, проверяющими скомпилированный бинарник как черный ящик.

# Запуск линтеров
make lint
# или: golangci-lint run ./...

# Запуск тестов (включая e2e)
make test
# или: go test -v -race ./...

About

FSM-based game log processor for real-time event transformation and metrics calculation, strictly adhering to Clean Architecture.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors