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

В версии [10.6](https://webim.ru/webim-10-6/) увидела свет новая функциональность **Webim Server** - скрипт для автоматической очистки данных чатов аккаунта за произвольный период времени. Это может быть полезно для всех hosted-размещений с большим количеством чатов. Скрипт позволяет оптимизировать память и уменьшить время ожидания ответа БД на запросы.

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

!!! Warning "Внимание!"
    Следует отметить, что в некоторых странах существуют законодательные ограничения, связанные с хранением персональных данных. На территории Российской Федерации, согласно приказу Федеральной службы по надзору в сфере связи, информационных технологий и массовых коммуникаций от 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**.

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

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

!!! Note "Актуальность флагов"
    Состав флагов зависит от версии **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
```

## Удаление файлов { #file-deletion }

Скрипт `purge_files.py` удаляет файлы, которые посетители и операторы прикрепляли к сообщениям (`Kind` `FILE_VISITOR` и `FILE_OPERATOR`). Записи этих сообщений в БД скрипт не удаляет.

Удаление выполняется так же, как обычное удаление файлов на сервере. Из файловой системы объекты удаляются всегда, а при включённом параметре аккаунта `use_s3_storage` дополнительно удаляются объекты из S3-хранилища. Это важно, поскольку при включении режима S3 ранее загруженные файлы не переносятся в хранилище и остаются в файловой системе. Подробнее о режиме S3 см. в статье [«Хранение файлов в S3 для каналов»](https://webim.ru/kb/devops/s3-file-storage.html).

Для каждого такого сообщения скрипт по `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
```

---

Источник: https://webim.ru/kb/devops/purge-data.html
