Заполни по ходу работы — это часть оценки.
- Добавлен генератор синтетических JSONL-логов
generate_logs.py. - Реализован инкрементальный загрузчик
analytics.ingestв DuckDB. - Добавлена идемпотентность: повторная загрузка того же файла не создаёт дубликаты.
- Битые строки в логах пропускаются и учитываются в статистике загрузки.
- Бизнес-настройки и SQL-схемы вынесены в корневой пакет
configs/. - Структура лог-событий валидируется через Pydantic-модель из корневого пакета
models/. - Добавлены аналитические DuckDB view для длительностей этапов, ошибок и LLM-вызовов.
- Добавлен
analytics.reportдля вывода агрегированных метрик из DuckDB. - Настроены локальные команды в
Makefileи GitHub Actions CI: lint, генерация логов, ingest, повторный ingest и report. - Добавлены
Dockerfileиdocker-compose.ymlдля запуска полного пайплайна в контейнере. - Добавлены Docker-цели в
Makefile:docker-build,docker-compose-config,docker-run. - Добавлен
run.shкак единая точка запуска локального и Docker-пайплайна. - Написан
README.mdс описанием структуры проекта, быстрым стартом, Docker-командами и проверками.
- DuckDB выбран как простой локальный аналитический слой без отдельного сервера.
- Идемпотентность сделана на двух уровнях: хеш файла в
ingestion_logи стабильныйevent_idна основеsha256. - Для
event_idиспользуются поля события, которые отличают основные типы логов друг от друга. - Pydantic используется для нормализации типов и отбраковки некорректных JSON-событий.
- SQL и параметры отчёта вынесены в
configs/report.py, строки отчёта валидируются Pydantic-моделями изmodels/report.py. - Тестовые данные ingest вынесены в
configs/ingest_test_data.py, тест-кейсы описаны Pydantic-моделями изmodels/ingest_test_case.py. - Тестовые данные метрик вынесены в
configs/metrics_test_data.py, ожидаемые метрики описаны Pydantic-моделями изmodels/metrics_test_case.py. - Путь к DuckDB можно переопределить через
DUCKDB_PATH; это используется в Docker Compose для хранения базы в volume. run.sh localотвечает за runtime-сценарий, аmake ciдобавляет к нему lint и pytest.run.sh dockerвалидирует compose, собирает образ и запускает полный контейнерный пайплайн.- Сгенерированные артефакты (
*.log,*.duckdb) не коммитятся.
- Расширить pytest-покрытие на генератор и полную загрузку в DuckDB.
- Добавить CLI-аргумент для пути к DuckDB-базе.
- Добавить отчёты или экспорт агрегатов поверх созданных view.
make ci./run.sh local./run.sh dockeruv run ruff check analytics/ configs/ models/ tests/ generate_logs.pyuv run pytestuv run python generate_logs.py --tasks 200 --out sample_logs/app.loguv run python -m analytics.ingest sample_logs- Повторный запуск
uv run python -m analytics.ingest sample_logsдля проверки идемпотентности. uv run python -m analytics.reportdocker compose configdocker build -t data-assignment:latest .docker compose --profile full run --rm allmake docker-buildmake docker-compose-configmake docker-run