Политики ретенции и автоматическая очистка хранилища
В RUSEON Core встроен автоматический фоновый планировщик ретенции (internal/recorder/), который непрерывно контролирует использование дискового пространства, соблюдает заданные сроки хранения и предотвращает переполнение накопителей.
Стратегии ретенции
RUSEON Core поддерживает два взаимодополняющих механизма очистки, настраиваемых в config.yaml:
1. Ретенция по времени (retention_days)
- Задаёт максимальный срок хранения видеозаписей (глобально или по камерам).
- Файлы старше
retention_daysавтоматически удаляются при следующем проходе планировщика. - Пример: При значении
retention_days: 30гарантируется автоматическая очистка записей старше 30 дней.
2. Квота дискового пространства (min_disk_free_gb / max_disk_usage_percent)
- Защищает файловую систему от 100% заполнения, которое может привести к сбою базы данных или ОС.
- Если свободный объём падает ниже
min_disk_free_gb(например, 20 ГБ) или использование превышаетmax_disk_usage_percent(например, 90%), планировщик немедленно запускает экстренную FIFO-очистку, удаляя самые старые часовые каталоги до восстановления целевого запаса памяти.
Алгоритм очистки
- Хронологический обход (FIFO): Планировщик проходит по Структуре файлов архива, начиная с самой старой директории
{YYYY}/{MM}/{DD}/{HH}. - Атомарное удаление: Удаляет как сам видеоконтейнер
.mp4, так и файл индекса.idx. - Удаление пустых директорий: Очищает опустевшие каталоги часов, дней и месяцев, поддерживая чистоту файловой системы.
- Синхронизация с БД: Удаляет записи об удалённых файлах из индекса BadgerDB, благодаря чему REST API и таймлайн веб-интерфейса обновляются мгновенно.
- Метрики Prometheus: Увеличивает счётчики
ruseon_retention_deleted_bytes_totalиruseon_retention_deleted_files_total.
Пример конфигурации
yaml
recording:
enabled: true
storage_path: "/data/recordings"
# Срок хранения в днях (0 = без ограничений по времени, только по диску)
retention_days: 14
# Пороговые значения защиты диска
min_disk_free_gb: 25
max_disk_usage_percent: 90
# Интервал проверки
cleanup_interval: "10m"