Подсчёт просмотров страниц для пользователей (не сотрудников, не краулеров)

Привет, ребята,

Я не вижу этих данных в отчётах. Я использую плагин Data Explorer. Какой запрос позволил бы получить количество просмотров страниц только для наших пользователей за неделю, исключая активность поисковых роботов и сотрудников нашего форума, но включая анонимные просмотры страниц?

  • Сработает ли что-то вроде этого?
  • Будет ли это учитывать анонимные просмотры?
  • Также, есть ли способ преобразовать это в отчёт?
-- [params]
-- string :date = '2020-01-01'

WITH t AS (
    SELECT date(:date) AS START
),
f AS (
    SELECT id as user_id
    FROM users u
    WHERE u.moderator = 'True' or u.admin = 'True'
)

    SELECT
    date_part('year', viewed_at) as year,
    date_part('week', viewed_at) as week,
    COUNT(topic_id) AS topics_viewed
    FROM topic_views, t
    WHERE viewed_at > t.START
        AND user_id not in (select f.user_id from f)
    GROUP BY year, week
    ORDER BY year, week

Запрос, похоже, должен работать.

Да, в текущем виде он учитывает анонимные просмотры. Для анонимных просмотров тем user_id будет NULL, а ip_addressNOT NULL. Вы можете исключить анонимные просмотры, добавив к запросу следующее условие:

AND user_id IS NOT NULL

Это можно реализовать через плагин. Плагин Discourse Solved добавляет отчёт на панель администратора. В этом плагине может быть полезный код, который послужит примером того, как добавить отчёт: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub.

Так, что-то вроде этого? Тогда будет ли IP-адрес равен NULL для краулеров?

Мне нужно включить:

  • анонимных посетителей
  • авторизованных пользователей

Мне нужно исключить:

  • краулеров
  • сотрудников
-- [params]
-- string :date = '2020-01-01'
-- boolean :staff = false

WITH t AS (
    SELECT date(:date) AS START
),
f AS (
    SELECT id as user_id
    FROM users u
    WHERE u.moderator = 'True' or u.admin = 'True'
)

    SELECT
    user_id,
--    date_part('year', viewed_at) as year,
--    date_part('week', viewed_at) as week,
    COUNT(topic_id) AS topics_viewed
    FROM topic_views, t
    WHERE viewed_at > t.START
    AND ((ip_address is not null AND user_id is NULL) OR
        user_id not in (select f.user_id from f))
    GROUP BY user_id
    ORDER BY topics_viewed DESC
    -- GROUP BY year, week
    -- ORDER BY year, week

Выше приведена ошибка. Она занижает количество анонимных пользователей по сравнению с объединёнными просмотрами страниц в отчёте Discourse.

Похоже, мне стоит рассмотреть и другие таблицы?

Отчет «Просмотры страниц» выполняет запрос к таблице application_requests. Однако эта таблица не предоставляет данных для фильтрации просмотров сотрудников. Возвращаемые данные представляют собой сумму количества запросов каждого типа в день. Поле req_type возвращается в виде целого числа. Целые числа сопоставляются с типами запросов по следующим правилам:

"http_total" => 0,
"http_2xx" => 1,
"http_background" => 2,
"http_3xx" => 3,
"http_4xx" => 4,
"http_5xx" => 5,
"page_view_crawler" => 6,
"page_view_logged_in" => 7,
"page_view_anon" => 8,
"page_view_logged_in_mobile" => 9,
"page_view_anon_mobile" => 10

Таблица topic_views, используемая в вашем запросе, возвращает не более одной записи на пользователя или IP-адрес в день на тему. Эти данные нельзя использовать для отслеживания просмотров страниц, поскольку на один просмотр темы может приходиться несколько запросов к приложению.

Понятно. То есть исключить пользователей из числа сотрудников для получения точных показателей PV невозможно.

Надеюсь на чудо, но возможно ли исключить определённые категории (я предполагаю, что нет)? У нас есть некоторые приватные категории, доступные только внутренней команде, и мы не хотим, чтобы они искажали наши показатели PV пользователей.

Я не вижу способа исключить сотрудников из данных, предоставляемых таблицей application_requests. Также невозможно отфильтровать результаты этой таблицы по категории. Если вы пытаетесь получить данные об использовании вашего сайта, таблица topic_views, которую вы используете в своем исходном запросе, предоставит точную информацию о том, как используется ваш сайт, однако эти данные не будут совпадать с тем, что вы видите в отчете «Просмотры страниц».