Skip to content

Политики ретенции и автоматическая очистка хранилища ​

В 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-очистку, удаляя самые старые часовые каталоги до восстановления целевого запаса памяти.

Алгоритм очистки ​

  1. Хронологический обход (FIFO): Планировщик проходит по Структуре файлов архива, начиная с самой старой директории {YYYY}/{MM}/{DD}/{HH}.
  2. Атомарное удаление: Удаляет как сам видеоконтейнер .mp4, так и файл индекса .idx.
  3. Удаление пустых директорий: Очищает опустевшие каталоги часов, дней и месяцев, поддерживая чистоту файловой системы.
  4. Синхронизация с БД: Удаляет записи об удалённых файлах из индекса BadgerDB, благодаря чему REST API и таймлайн веб-интерфейса обновляются мгновенно.
  5. Метрики 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"

Связанная документация ​

Released under the MIT License.