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

Очистка данных чатов за произвольный период времени

В версии 10.6 увидела свет новая функциональность Webim Server - скрипт для автоматической очистки данных чатов аккаунта за произвольный период времени. Это может быть полезно для всех hosted-размещений с большим количеством чатов. Скрипт позволяет оптимизировать память и уменьшить время ожидания ответа БД на запросы.

Файлы, прикреплённые к сообщениям, этим скриптом не удаляются. Для очистки файлов используйте отдельный скрипт purge_files.py (см. раздел Удаление файлов).

Внимание!

Следует отметить, что в некоторых странах существуют законодательные ограничения, связанные с хранением персональных данных. На территории Российской Федерации, согласно приказу Федеральной службы по надзору в сфере связи, информационных технологий и массовых коммуникаций от 28 октября 2022 г. N 179, действует ограничение, обязывающее хранить акт об уничтожении персональных данных и выгрузку из журнала в течение 3 лет с момента уничтожения персональных данных.

Список очищаемых сущностей

  • История изменений чатов (pro:chatthreadhistory)

  • Чат-сессии (pro:chatvisitsession)

  • Пройденные опросы (pro:surveyanswer)

  • Запущенные опросы (pro:surveylaunch)

  • Сообщения (pro:chatmessage), кроме сообщений с файлами (Kind FILE_OPERATOR и FILE_VISITOR)

  • Категории, назначенные чатам (pro:thread_category)

  • Оценки (pro:chatrate)

  • Чаты (pro:chatthread)

Все приведённые выше сущности существуют в БД/схеме pro.

Опционально:

  • Статистика v1 (pro:chatstats)

  • Логи Статистики v1 (pro:chatstatslog)

  • Статистика на ClickHouse (webim_stats:thread)

  • Данные Elasticsearch / OpenSearch (поисковый индекс истории, если он используется)

Все остальные сущности (такие как список категорий, конфигурации опросов и т.д.) очистке не подвергаются.

Работа со скриптом

Работа со скриптом производится по следующему сценарию:

  1. Перейдите в виртуальное окружение Chat Backend.

  2. Перейдите в директорию python/source/tools.

  3. Запустите скрипт 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