Глобально уникальные ID (docs/changes/016): - у устройств, групп, задач, резервных копий и записей журнала ID вида <префикс>_<uuid7> (dev_, grp_, job_, bkp_, evt_): типы не пересекаются, внутри типа ID не повторяются и сортируются по времени; - миграция БД v1 заменяет числовые ID с пересчётом ссылок (копия файла БД перед миграцией, сверка числа строк, одна транзакция); - резервная копия = пара файлов с одним bkp_ ID, файлы в S3 получают метаданные backup-id/device-id; синхронизация метаданных с бакетом; - журнал событий в БД (events): создание/изменение/удаление, задачи, бэкапы, смена online/offline, вход в UI; API чтения GET /api/v1/events. Журнал в UI, ротация и очистка (docs/changes/017): - страница «Журнал»: фильтры, подгрузка «Показать ещё», окно записи; - настройки ротации (срок и максимум записей) хранятся в БД (схема v2), ротация при старте, раз в час и после сохранения настроек; - очистка журнала только через окно с паролем пользователя, блокировка после 5 неверных попыток, остаётся запись о факте очистки; через API очистки нет. Тесты: 20 из 20. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
34 lines
1.5 KiB
Bash
34 lines
1.5 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
|
|
|
|
# Ограничение параллельных обращений к устройствам
|
|
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 — без ограничения)
|