Files
ros_control/.env.example
T
ayurishchevandClaude Opus 5.5 ba8ac7be71 Кэш списка бакета, БД без блокировки event loop, один процесс на БД
Производительность и масштабирование, пункты 8–10 ревью (docs/changes/019):
- кэш списка бакета и связей файлов с копиями (BACKUPS_CACHE_TTL, 60 с):
  sync_rows только при реальном чтении бакета; сброс после бэкапа и
  удаления, счётчик поколений против гонки; refresh=1 и «Обновить список»;
- обработчики API/UI без await — обычные функции (пул потоков FastAPI),
  запуск задач остаётся async; запись статуса, задачи и sync_rows —
  через asyncio.to_thread; SQLite: WAL, synchronous=NORMAL, busy_timeout;
- файловая блокировка <файл БД>.lock: второй процесс на той же БД не
  стартует; раздел «Ограничения» в README.

Тесты: 24 из 24. Стенд (порт 8001): кэш 0,014 с против 0,138 с, второй
uvicorn на боевой БД отклонён блокировкой, боевые данные не изменены.
Ручная проверка UI пользователем на момент коммита не подтверждена.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 12:18:32 +03:00

37 lines
1.7 KiB
Bash

# База метаданных
DATABASE_URL=sqlite:///./data/ros_control.db
# Ключ Fernet для шифрования паролей устройств:
# python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
SECRET_KEY=
# Секрет подписи cookie-сессии UI
SESSION_SECRET=change-me
# Администратор UI и токен API
ADMIN_USER=admin
ADMIN_PASSWORD=change-me
API_TOKEN=change-me
# Yandex Object Storage (S3)
S3_ENDPOINT=https://storage.yandexcloud.net
S3_REGION=ru-central1
S3_BUCKET=
S3_ACCESS_KEY=
S3_SECRET_KEY=
S3_PREFIX=backups
# Кэш списка бакета (страница «Бэкапы», GET /api/v1/backups): секунд без обращения к S3, 0 — выключить кэш
BACKUPS_CACHE_TTL=60
# Ограничение параллельных обращений к устройствам
MAX_CONCURRENCY=10
# Обнаружение недоступности устройств
ROS_CONNECT_TIMEOUT=4 # секунд на установление соединения
POLL_INTERVAL=30 # период фонового опроса, секунд (0 — выключить)
UPDATE_CHECK_INTERVAL=1800 # как часто проверять обновления ROS в опросе, секунд
# Ротация журнала событий: значения по умолчанию (действующие настройки меняются в UI: Журнал → Настройки)
EVENTS_RETENTION_DAYS=90 # хранить записи, дней (0 — без ограничения)
EVENTS_MAX_ROWS=100000 # максимум записей (0 — без ограничения)