# Режимы подсчёта и обновления статистики

В Webim актуальность данных в отчётах зависит от версии модуля статистики (**версия 1** или **версия 2**) и выбранного режима подсчёта/обновления. В данном разделе рассматриваются режимы подсчёта и обновления статистики.

## Статистика версии 1

В **Статистике версии 1** часть данных кэшируется. В зависимости от настроек возможны разные сценарии обновления.

### 1) Быстрая статистика: только отображение рассчитанного кэша

В [редакторе настроек аккаунта (account config)](https://webim.ru/kb/devops/server-account-config-parameters.html) установлены параметры настроек сервера:

  * `new_stats_mode = true`

  * `stats_display_only = true`

Что происходит:

  * при открытии страницы статистики пересчёт **не запускается**;

  * показываются данные, рассчитанные заранее фоновым заданием (как правило — за прошлые сутки).

Данные в таком случае обновляются по расписанию (обычно 1 раз в сутки).

### 2) Быстрая статистика: кэш + расчёт при запросе

В [редакторе настроек аккаунта (account config)](https://webim.ru/kb/devops/server-account-config-parameters.html) установлены параметры настроек сервера:

  * `new_stats_mode = true`

  * `stats_display_only = false`

Что происходит:

  * при открытии статистики система **достраивает (дополняет) кэш** `chatstats` для выбранного периода и фильтров;

  * данные могут быть актуальнее, но запрос может выполняться дольше и создавать дополнительную нагрузку на **Chat Backend**.

Данные в таком случае обновляются при обращении к отчётам (в интерфейсе или через API статистики).

### 3) Полный пересчёт при запросе

В [редакторе настроек аккаунта (account config)](https://webim.ru/kb/devops/server-account-config-parameters.html) установлен параметр настройки сервера:

  * `new_stats_mode = false`

Что происходит:

  * статистика пересчитывается целиком за выбранный период при каждом запросе;

  * максимальная актуальность, но самый тяжёлый режим по времени и нагрузке.

!!! Note "N.B."
    В режимах 1–2 данные за текущий день могут обновляться не сразу: часть показателей появится после фонового расчёта или после расчёта при открытии страницы статистики. Для прошедших дней значения обычно стабилизируются после расчёта кэша.

## Статистика версии 2 (ClickHouse)

В **Статистике версии 2** отчёты строятся на данных в **ClickHouse**. Используются два подхода к наполнению ClickHouse.

### 1) Наполнение со стороны Chat Backend

Данные попадают в ClickHouse со стороны **Chat Backend**. Обновление может идти (почти) в реальном времени или с небольшой задержкой/периодичностью — в зависимости от настроек.

Параметры в [редакторе настроек аккаунта (account config)](https://webim.ru/kb/devops/server-account-config-parameters.html):

  * `analytics_v2_chat_backend_population` — включает заполнение статистики версии 2 данными со стороны Chat Backend;

  * `analytics_v2_chat_backend_realtime_population` — включает наполнение realtime-данными;

  * `analytics_v2_chat_backend_realtime_population_period` — период обновления realtime-данных (в секундах).

!!! Note "Важно"
    Параметры `analytics_v2_*` актуальны начиная с версии **10.8**. В версиях 10.4–10.7 использовались прежние имена (`clickhouse_stats`, `chat_backend_stats_population`, `chat_backend_realtime_population` и др.) — см. [описание параметров account config](https://webim.ru/kb/devops/server-account-config-parameters.html).

!!! Note "N.B."
    **Обычные данные** — это общие записи по чатам, оценкам, опросам, операторам и т. п., которые пополняются по мере изменений в системе и включают **все чаты**.

    **Realtime-данные** — это актуальный «срез» данных об онлайне системы и активных на данный момент операторах/чатах; как правило, они содержат **только активные чаты** и обновляются с заданной периодичностью.

### 2) Периодическое заполнение фоновой задачей

Для дозаполнения ClickHouse и устранения «пробелов» по данным используется фоновая задача. Ее можно запускать вручную или по расписанию. Подробнее: [Перенос данных в ClickHouse](https://webim.ru/kb/devops/populate-clickhouse.html).

## Нововведение в 10.8

Начиная с версии **10.8** в Webim есть отдельный микросервис **data-storager**. Он является третьим и **основным** способом обновления данных в **Статистике версии 2**. Эксплуатационное описание — в статье [Data Storager](https://webim.ru/kb/devops/services/data-storager.html).

Как он работает:

  * получает «триггеры» на обработку через брокер сообщений (Kafka). Триггер — это сообщение-задание с названием аккаунта (выполнение очередного шага обновления данных для этого аккаунта);

  * вычитывает изменения из основной базы данных Webim (MySQL/MariaDB/PostgreSQL — в зависимости от инсталляции). Сервис получает не сами данные, а только триггер, после чего самостоятельно читает нужные записи из БД;

  * записывает данные:

      * в **Elasticsearch** / **OpenSearch** (индексы, используемые для поиска чатов),

      * в **ClickHouse** (данные для отчётов **Статистики версии 2**).

Для инкрементального переноса используются **маркеры** (хранятся в Redis) — служебные значения прогресса, которые фиксируют, «до какого места» данные уже обработаны. Поэтому при повторных запусках **data-storager** переносит только новые и изменённые данные.

Если маркеров ещё нет (первый запуск), наполнение статистики в ClickHouse начинается с ограниченной **глубины переноса** — по умолчанию **последние 30 дней**.

  ![Схема режимов расчёта статистики (ES / data-storager)](https://webim.ru/kb/img/for-analytics/v2/analytics/statistics/calculation-modes/data-storager-diagram.svg)

!!! Note "Важно"
    **data-storager** получает триггеры через Kafka и вычитывает данные из основной БД Webim. Внутренние детали реализации в этом разделе не рассматриваются.

---

Источник: https://webim.ru/kb/for-analytics/statistics/calculation-modes.html
