About Page Site Statistics Reference Guide

:bookmark: Это справочное руководство описывает, как рассчитываются статистические данные на странице /about, и где найти Ruby-код для каждого показателя.

:person_raising_hand: Требуемый уровень доступа: все пользователи

Статистика страницы «О сайте»

У всех сайтов Discourse есть встроенная страница /about (например, вот страница «О сайте» для Meta), которая содержит список администраторов и модераторов сайта, а также несколько статистических данных о самом сайте.

Эти статистические данные включают всех пользователей, в том числе учётные записи администраторов и модераторов. Некоторые показатели также учитывают анонимные учётные записи (если эта функция включена на сайте).

Если включена настройка сайта «Показывать анонимизированную статистику» (по умолчанию она включена), раздел «Статистика сайта» на странице /about будет доступен в виде JSON-файла, который можно получить по адресу /about.json.

Если сайт является публичным, страница /about вместе со статистическими данными также будет доступна для всех.

:gem: Ruby-код для основных статистических показателей находится в файле: discourse/lib/statistics.rb. Модель Stat, которая координирует основные и плагинные статистические данные, находится в файле discourse/app/models/stat.rb.

Ниже приведено описание того, как рассчитывается каждый из этих показателей.

Темы

Количество тем, созданных в указанный период времени. Эта статистика не включает скрытые темы или личные сообщения.

topics = Topic.listable_topics

{
  last_day: topics.where("created_at > ?", 1.day.ago).count,
  "7_days": topics.where("created_at > ?", 7.days.ago).count,
  "30_days": topics.where("created_at > ?", 30.days.ago).count,
  count: topics.count,
}

Сообщения

Количество сообщений, созданных в указанный период времени. Личные сообщения включаются сюда и учитываются как обычные сообщения.

{
  last_day: Post.where("created_at > ?", 1.day.ago).count,
  "7_days": Post.where("created_at > ?", 7.days.ago).count,
  "30_days": Post.where("created_at > ?", 30.days.ago).count,
  count: Post.count,
}

Регистрации

Количество действительных пользователей, зарегистрировавших новые учётные записи в указанный период времени. «Действительный пользователь» — это реальный пользователь, который также активирован, не отстранён и не лишён возможности писать. Если включена настройка «Требовать одобрение пользователей», учитываются только одобренные пользователи.

def self.valid_users
  users = User.real.activated.not_suspended.not_silenced
  users = users.approved if SiteSetting.must_approve_users
  users
end

{
  last_day: valid_users.where("created_at > ?", 1.day.ago).count,
  "7_days": valid_users.where("created_at > ?", 7.days.ago).count,
  "30_days": valid_users.where("created_at > ?", 30.days.ago).count,
  count: valid_users.count,
}

:gem: Понятие «реальный» пользователь определено здесь: discourse/app/models/user.rb — оно исключает системных пользователей/ботов и анонимные теневые учётные записи.

Активные пользователи

Количество действительных пользователей, посетивших сайт в указанный период времени. Используется тот же фильтр valid_users, что и для регистраций (исключает неактивных, отстранённых и лишённых возможности писать пользователей). Включает пользователей анонимного режима, но не включает пользователей без учётной записи.

{
  last_day: valid_users.where("last_seen_at > ?", 1.day.ago).count,
  "7_days": valid_users.where("last_seen_at > ?", 7.days.ago).count,
  "30_days": valid_users.where("last_seen_at > ?", 30.days.ago).count,
}

Участвующие пользователи

Количество действительных пользователей, совершивших какое-либо действие (создали тему, сообщение, лайк и т. д.) в указанный период времени. Если включён чат, также учитываются пользователи, отправившие сообщения чата или добавившие реакции в чате.

{
  last_day: participating_users_count(1.day.ago),
  "7_days": participating_users_count(7.days.ago),
  "30_days": participating_users_count(30.days.ago),
}

:gem: Полная реализация находится в файле discourse/lib/statistics.rb.

Лайки

Общее количество лайков, полученных всеми темами и сообщениями в указанный период времени.

likes = UserAction.where(action_type: UserAction::LIKE)

{
  last_day: likes.where("created_at > ?", 1.day.ago).count,
  "7_days": likes.where("created_at > ?", 7.days.ago).count,
  "30_days": likes.where("created_at > ?", 30.days.ago).count,
  count: likes.count,
}

Посетители и посетители из ЕС

Когда включена настройка сайта «Отображать статистику посетителей из ЕС», на странице «О сайте» также будут отображаться оценочные данные о количестве посетителей (общее и по пользователям из ЕС). Они рассчитываются путём объединения данных о посещениях авторизованных пользователей с оценочными данными об анонимных посетителях на основе соотношения просмотров страниц.

:gem: Полную логику расчёта см. в методах visitors и eu_visitors в файле discourse/lib/statistics.rb.

Сообщения чата

Количество сообщений чата, отправленных во всех каналах чата. Когда включён чат, также регистрируются следующие статистические данные: пользователи чата (уникальные пользователи, отправившие сообщения) и каналы чата (открытые каналы).

Эти показатели регистрируются как плагинные статистические данные плагином чата с помощью register_stat в файле plugins/chat/plugin.rb. Основные запросы находятся в файле plugins/chat/lib/chat/statistics.rb.

6 лайков