Перейти к содержанию

Очистка WebSocket-сообщений (retention)

Эта функция позволяет автоматически ограничивать объём таблицы WebSocketMessage, сохраняя только последние N сообщений глобально (без привязки к пользователю).

Настройка количества сообщений

Переменная окружения:

  • WEBSOCKET_MESSAGES_RETENTION_TOTAL — сколько последних сообщений хранить. По умолчанию 1000.

Пример (файл .env):

WEBSOCKET_MESSAGES_RETENTION_TOTAL=1500

Как работает очистка

  • Берётся N‑я последняя запись по убыванию времени sent_at (с тай-брейкером id).
  • Её sent_at используется как порог.
  • Все записи с sent_at меньше порога удаляются.
  • Если у нескольких записей одинаковый sent_at, итоговое число хранимых записей может быть чуть больше N — это ожидаемо и корректно.

Ручной запуск

python manage.py cleanup_websocket_messages --limit 1000
  • Ключ --limit переопределяет значение из переменной окружения на один запуск.

Периодический запуск (каждые 24 часа)

Celery Beat вызывает задачу по расписанию (ежедневно в 00:00):

  • Имя задачи: cleanup_websocket_messages_total
  • Конфигурация расписания: src/planiqum/core/celery.py

Важные файлы

  • Очистка (ORM): src/planiqum/core/websocket/cleanup.py
  • Команда: src/planiqum/core/management/commands/cleanup_websocket_messages.py
  • Задача Celery: project/tasks.py: cleanup_websocket_messages_total_task
  • Расписание Celery Beat: src/planiqum/core/celery.py