Производительность и масштабирование, пункты 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>
37 lines
1.7 KiB
Bash
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 — без ограничения)
|