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
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 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:
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.