Очистка данных чатов за произвольный период времени
В версии 10.6 увидела свет новая функциональность Webim Server - скрипт для автоматической очистки данных чатов аккаунта за произвольный период времени. Это может быть полезно для всех hosted-размещений с большим количеством чатов. Скрипт позволяет оптимизировать память и уменьшить время ожидания ответа БД на запросы.
Файлы, прикреплённые к сообщениям, этим скриптом не удаляются. Для очистки файлов используйте отдельный скрипт purge_files.py (см. раздел Удаление файлов).
Внимание!
Следует отметить, что в некоторых странах существуют законодательные ограничения, связанные с хранением персональных данных. На территории Российской Федерации, согласно приказу Федеральной службы по надзору в сфере связи, информационных технологий и массовых коммуникаций от 28 октября 2022 г. N 179, действует ограничение, обязывающее хранить акт об уничтожении персональных данных и выгрузку из журнала в течение 3 лет с момента уничтожения персональных данных.
Список очищаемых сущностей
-
История изменений чатов (
pro:chatthreadhistory) -
Чат-сессии (
pro:chatvisitsession) -
Пройденные опросы (
pro:surveyanswer) -
Запущенные опросы (
pro:surveylaunch) -
Сообщения (
pro:chatmessage), кроме сообщений с файлами (KindFILE_OPERATORиFILE_VISITOR) -
Категории, назначенные чатам (
pro:thread_category) -
Оценки (
pro:chatrate) -
Чаты (
pro:chatthread)
Все приведённые выше сущности существуют в БД/схеме pro.
Опционально:
-
Статистика v1 (
pro:chatstats) -
Логи Статистики v1 (
pro:chatstatslog) -
Статистика на ClickHouse (
webim_stats:thread) -
Данные Elasticsearch / OpenSearch (поисковый индекс истории, если он используется)
Все остальные сущности (такие как список категорий, конфигурации опросов и т.д.) очистке не подвергаются.
Работа со скриптом
Работа со скриптом производится по следующему сценарию:
-
Перейдите в виртуальное окружение Chat Backend.
-
Перейдите в директорию
python/source/tools. -
Запустите скрипт
purge_data.sh.
Скрипт имеет следующий синтаксис:
purge_data.sh [аргументы] [флаги]
Скрипт принимает следующие аргументы:
-
--account: имя Вашего аккаунта Webim. Обязательный аргумент. -
--to-date: окончание временного периода, за который будут очищены данные чатов. Началом временного периода является момент создания БД. Удаляются чаты, созданные раньше этой даты; сама дата в период не входит. Формат ввода:yyyy-mm-dd. Дата не должна быть позже текущего дня. Обязательный аргумент. -
--visitors-export-path: путь к CSV-файлу, в который перед удалением выгружаются данные посетителей за очищаемый период: идентификатор, имя, адрес электронной почты и телефон. Обязательный аргумент.
Также существует несколько необязательных флагов, задающих дополнительные опции очистки данных:
-
--purge-clickhouse: очистка ClickHouse (данные Статистики). По умолчаниюfalse. -
--purge-stats: очистка Статистики v1. По умолчаниюfalse. -
--purge-elastic: очистка поискового индекса (Elasticsearch или OpenSearch). По умолчаниюfalse.
Актуальность флагов
Состав флагов зависит от версии Webim Server в вашей поставке. Перед запуском сверьте актуальный список в выводе purge_data.sh --help или в тексте скрипта на сервере.
Пример вызова скрипта для очистки данных чатов аккаунта testcom, созданных раньше 21.08.2023:
purge_data.sh --account testcom --to-date 2023-08-21 --visitors-export-path /tmp/testcom_visitors.csv
Удаление файлов
Скрипт purge_files.py удаляет файлы, которые посетители и операторы прикрепляли к сообщениям (Kind FILE_VISITOR и FILE_OPERATOR). Записи этих сообщений в БД скрипт не удаляет.
Удаление выполняется так же, как обычное удаление файлов на сервере. Из файловой системы объекты удаляются всегда, а при включённом параметре аккаунта use_s3_storage дополнительно удаляются объекты из S3-хранилища. Это важно, поскольку при включении режима S3 ранее загруженные файлы не переносятся в хранилище и остаются в файловой системе. Подробнее о режиме S3 см. в статье «Хранение файлов в S3 для каналов».
Для каждого такого сообщения скрипт по guid находит связанные объекты и удаляет сам файл, его дескриптор и превью изображений, если они есть. По умолчанию превью имеет размер 300x300; если у аккаунта задан custom_thumbnail_sizes, превью может быть несколько и с другими суффиксами. Путь к объектам скрипт определяет сам, в том числе во вложенных каталогах по дате. Искать файлы вручную в <client-data-dir>/<account>/files/ не требуется.
Запускайте скрипт через обёртку purge_files.sh. Она вызывает интерпретатор из указанного виртуального окружения и выставляет PYTHONPATH на каталог с исходным кодом. Переходить в это окружение и в директорию python/source/tools заранее не нужно.
Обёртка имеет следующий синтаксис:
purge_files.sh <путь_к_виртуальному_окружению> <путь_к_каталогу_python/source> [аргументы]
Первые два значения — обязательные позиционные аргументы. Второй из них — путь к каталогу python/source, а не к python/source/tools. Остальные аргументы обёртка передаёт в purge_files.py.
Обязательные аргументы:
-
--account: имя Вашего аккаунта Webim. -
--till_date: дата, раньше которой удаляются файлы. Сама дата в период не входит. Формат ввода:dd-mm-yyyy.
Необязательные аргументы:
-
--messages_per_chunk_limit: сколько сообщений с файлами обрабатывать за одну итерацию. По умолчанию1000. -
--file_deletion_delay: пауза между удалениями файлов, в секундах. По умолчанию0.05. -
--query_delay: пауза между запросами к БД, в секундах. По умолчанию5.0.
Прогресс сохраняется в файл <client-data-dir>/<account>/delete_files_data.json. При повторном запуске скрипт продолжает с последней обработанной метки времени и не обрабатывает более ранние сообщения заново.
Пример вызова для удаления файлов аккаунта testcom, созданных раньше 21.08.2023:
purge_files.sh <путь_к_виртуальному_окружению> <путь_к_каталогу_python/source> --account testcom --till_date 21-08-2023