Очистка 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