Files
dzentra_bot/app/README.md

133 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Приложение Dzentra
Каталог `app` содержит исполняемое Python-приложение, зависимости,
настройки и тесты Dzentra. Приложение объединяет Telegram-бота и
принятую Production-вертикаль Trades Feed.
## Реализованные границы
| Возможность | Текущее состояние |
|---|---|
| Live Trades, reconnect и REST Recovery | Подключены к Production Runtime |
| Persistent Trades и checkpoint | Опционально подключены через `MARKET_DATA_STORAGE_ENABLED` |
| Startup Hydration и Recovery | Выполняются при включённом Storage |
| Historical Access и Replay | Готовы для явного вызова; автоматически не запускаются |
| Quote/Candle REST feeds | Используются существующими Trading/UI сценариями |
| Quote/Candle WebSocket и persistence | Runtime/Consistency/Recovery и persistent writers не подключены |
| Retention и месячные партиции | Только явный вызов; Scheduler их не запускает |
Подробности приведены в
[текущей архитектуре Trades Feed](../docs/architecture/trades_feed.md).
## Требования
- Python 3.12;
- PostgreSQL, доступный по параметрам `DB_*`;
- Telegram Bot Token;
- отдельное виртуальное окружение `app/.venv`.
PostgreSQL нужен даже при выключенных Trade Stream и Market Data Storage:
обычный Bootstrap всегда инициализирует таблицы журнала и balance
snapshots.
## Подготовка окружения
Из корня репозитория:
```bash
python3.12 -m venv app/.venv
app/.venv/bin/python -m pip install \
--require-hashes \
-r app/requirements-dev.lock
app/.venv/bin/python -m pip check
test -e app/.env || cp app/.env.example app/.env
```
Замените значения-заглушки в `app/.env`. Не добавляйте этот файл в Git и
не перезаписывайте существующий `.env`. Для каждого секрета разрешён либо
прямой параметр, либо соответствующий `*_FILE`, но не оба одновременно.
`requirements-dev.txt` остаётся читаемым источником прямых developer
dependencies. Установка выполняется из `requirements-dev.lock`, который
сохраняет версии Production `requirements.lock` и добавляет pytest/Pyright.
Вручную редактировать dependency records обоих lock-файлов не следует.
## Режимы Trades Feed
| `TRADE_STREAM_ENABLED` | `MARKET_DATA_STORAGE_ENABLED` | Поведение |
|---:|---:|---|
| `false` | `false` | Trade Runtime и отдельный Market Data pool не создаются |
| `true` | `false` | Live/Recovery работают только с состоянием в памяти |
| `true` | `true` | Добавляются persistent Trades, checkpoint, Hydration и Startup Recovery |
| `false` | `true` | Недопустимая конфигурация; startup завершается ошибкой |
При включённом Trade Stream обязательны явные `TRADE_STREAM_WS_URL`,
`TRADE_STREAM_SYMBOLS` и `EXCHANGE_BASE_URL`. Полный контракт настроек и
Docker secrets находится в
[эксплуатационном руководстве](../docs/operations/trades_feed_runtime.md).
## Запуск
Из каталога `app`:
```bash
.venv/bin/python -m src.main
```
Ошибка включённого Trade Runtime, Storage или Startup Recovery является
фатальной и завершает всё приложение, а не оставляет Telegram polling в
частично работающем состоянии.
## Проверки разработчика
Обязательная отдельная проверка типов запускается из корня репозитория:
```bash
./scripts/check_python_types.sh
app/.venv/bin/python scripts/check_documentation_integrity.py
```
Ожидаемый результат — `0 errors, 0 warnings` для Pyright и `issues=0`
для documentation gate. Default offline regression запускается из `app`:
```bash
.venv/bin/python -m pytest -q
```
Default-набор исключает маркеры `integration`, `stress` и `live`. При
этом он включает `tests/static/test_python_type_gate.py`, поэтому полный
запуск дополнительно контролирует Pyright. Один целевой тест этот gate не
заменяет.
Полная локальная CI-последовательность запускается из корня repository:
```bash
./scripts/run_ci_gate.sh all
```
Подробный manual-canary contract приведён в
[CI runbook](../docs/operations/ci_gate.md).
Назначение и безопасные команды opt-in наборов:
- `integration` — локальные сетевые и PostgreSQL-сценарии;
- `stress` — fixed stress и opt-in soak;
- `live` — только явно разрешённая проверка внешних Dzengi endpoints.
Параметры этих запусков не дублируются здесь и поддерживаются в
[runbook](../docs/operations/trades_feed_runtime.md).
## Структура и навигация
- `src/` — production-код;
- `tests/unit/` и `tests/static/` — default offline regression;
- `tests/integration/`, `tests/stress/`, `tests/live/` — opt-in проверки;
- `scripts/` и `tools/` — диагностические и исследовательские утилиты,
не automatic Production Runtime;
- [обзор структуры проекта](../docs/architecture/project_structure.md);
- [границы пакета Storage](src/storage/README.md);
- [архитектура Build 060.30](../docs/migrations/build_060_30_architecture.md).
Корневой `bootstrap_project.py` является историческим генератором
каркаса. Для текущего checkout его запускать не нужно.