Contagem de visualizações de página para usuários (não-staff, não-crawler)

Ei pessoal,

Não vejo esses dados nos relatórios. Estou usando o plugin Data Explorer. Qual consulta me daria as contagens de visualizações de página apenas para nossos usuários por semana, excluindo a atividade dos crawlers e os membros da equipe do nosso fórum, mas incluindo as visualizações anônimas?

  • Algo assim funcionaria?
  • Isso consideraria visualizações anônimas?
  • Além disso, há uma maneira de converter isso em um relatório?
-- [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

A consulta parece que deveria funcionar.

Sim, conforme está escrita, ela está contando visualizações anônimas. Para visualizações anônimas de tópicos, o user_id será NULL e o ip_address será NOT NULL. Você pode excluir visualizações anônimas adicionando a seguinte condição à consulta:

AND user_id IS NOT NULL

Isso pode ser feito por meio de um plugin. O plugin Discourse Solved adiciona um relatório ao painel de administração. Pode haver algum código nesse plugin que seja útil como exemplo de como adicionar um relatório: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub.

Então, algo assim? Então, o endereço IP seria nulo para os crawlers?

Quero incluir:

  • visualizadores anônimos
  • usuários logados

Quero excluir:

  • crawlers
  • usuários da equipe
-- [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

O acima está errado. Está subcontando usuários anônimos em comparação com as visualizações de página consolidadas do relatório do Discourse.

Parece que talvez eu precise considerar outras tabelas também?

O relatório de Visualizações de Página consulta a tabela application_requests. No entanto, essa tabela não fornece dados para filtrar visualizações de funcionários. O que ela retorna é a soma do número de solicitações de cada tipo por dia. O req_type é retornado como um número inteiro. Os inteiros são mapeados para o tipo de solicitação com as seguintes regras:

"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

A tabela topic_views, que sua consulta está utilizando, retorna no máximo uma entrada por usuário ou endereço IP por dia por tópico. Esses dados não podem ser usados para rastrear visualizações de página — pode haver múltiplas solicitações de aplicativo para uma única visualização de tópico.

Entendi. Então, essencialmente, não é possível excluir usuários do staff para obter números precisos de PV.

Tentando uma possibilidade remota aqui, é possível excluir certas categorias (acho que não)? Temos algumas categorias privadas que são apenas internas da equipe — e não queremos que elas contaminem nossos números de PV dos usuários.

Não estou vendo nenhuma maneira de excluir a equipe dos dados fornecidos pela tabela application_requests. Também não é possível filtrar os resultados dessa tabela por categoria. Se você estiver tentando obter dados sobre o uso do seu site, a tabela topic_views que você está usando em sua consulta original fornecerá dados precisos sobre como seu site está sendo usado, mas esses dados não corresponderão ao que você está vendo no relatório de Visualizações de Página.