Это справочное руководство описывает, как рассчитываются статистические данные на странице
/about, и где найти Ruby-код для каждого показателя.
Требуемый уровень доступа: все пользователи
Статистика страницы «О сайте»
У всех сайтов Discourse есть встроенная страница /about (например, вот страница «О сайте» для Meta), которая содержит список администраторов и модераторов сайта, а также несколько статистических данных о самом сайте.
Эти статистические данные включают всех пользователей, в том числе учётные записи администраторов и модераторов. Некоторые показатели также учитывают анонимные учётные записи (если эта функция включена на сайте).
Если включена настройка сайта «Показывать анонимизированную статистику» (по умолчанию она включена), раздел «Статистика сайта» на странице /about будет доступен в виде JSON-файла, который можно получить по адресу /about.json.
Если сайт является публичным, страница /about вместе со статистическими данными также будет доступна для всех.
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,
}
Понятие «реальный» пользователь определено здесь: 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),
}
Полная реализация находится в файле 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,
}
Посетители и посетители из ЕС
Когда включена настройка сайта «Отображать статистику посетителей из ЕС», на странице «О сайте» также будут отображаться оценочные данные о количестве посетителей (общее и по пользователям из ЕС). Они рассчитываются путём объединения данных о посещениях авторизованных пользователей с оценочными данными об анонимных посетителях на основе соотношения просмотров страниц.
Полную логику расчёта см. в методах
visitorsиeu_visitorsв файле discourse/lib/statistics.rb.
Сообщения чата
Количество сообщений чата, отправленных во всех каналах чата. Когда включён чат, также регистрируются следующие статистические данные: пользователи чата (уникальные пользователи, отправившие сообщения) и каналы чата (открытые каналы).
Эти показатели регистрируются как плагинные статистические данные плагином чата с помощью register_stat в файле plugins/chat/plugin.rb. Основные запросы находятся в файле plugins/chat/lib/chat/statistics.rb.
