Contando vistas de página para usuarios (no personal, no rastreador)

¡Hola a todos!

No veo estos datos en los informes. Estoy usando el plugin Data Explorer. ¿Qué consulta me daría los conteos de visitas a páginas solo para nuestros usuarios por semana, excluyendo la actividad de los rastreadores y los miembros del personal de nuestro foro, pero incluyendo las visitas anónimas?

  • ¿Funcionaría algo como esto?
  • ¿Consideraría las visitas anónimas?
  • Además, ¿hay alguna manera de convertir esto en un informe?
-- [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

La consulta parece que debería funcionar.

Sí, tal como está escrita, cuenta las vistas anónimas. Para las vistas anónimas de temas, el user_id será NULL y la ip_address será NOT NULL. Podrías excluir las vistas anónimas añadiendo la siguiente condición a la consulta:

AND user_id IS NOT NULL

Eso podría hacerse mediante un plugin. El plugin Discourse Solved añade un informe al panel de administración. Podría haber algún código en ese plugin que sea útil como ejemplo de cómo añadir un informe: discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub.

¿Así, algo como esto? Entonces, ¿la dirección IP sería nula para los rastreadores?

Quiero incluir:

  • espectadores anónimos
  • usuarios conectados

Quiero excluir:

  • rastreadores
  • usuarios del personal
-- [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

Lo anterior es incorrecto. Se están subestimando los usuarios anónimos en comparación con las vistas de página consolidadas del informe de Discourse.

¿Parece que quizás deba considerar también algunas otras tablas?

El informe de Vistas de Página consulta la tabla application_requests. Sin embargo, esa tabla no proporciona datos para filtrar las vistas del personal. Lo que devuelve es la suma del número de solicitudes de cada tipo por día. El req_type se devuelve como un entero. Los enteros se asignan al tipo de solicitud según las siguientes reglas:

"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

La tabla topic_views que utiliza tu consulta devuelve un máximo de una entrada por usuario o dirección IP por día por tema. Estos datos no pueden usarse para rastrear vistas de página: podría haber múltiples solicitudes de aplicación para una sola vista de tema.

Entiendo. Así que, esencialmente, no es posible excluir a los usuarios del personal para obtener cifras precisas de PV.

Intentando suerte, ¿es posible excluir ciertas categorías (supongo que no)? Tenemos algunas categorías privadas que son solo para uso interno del equipo y no queremos que contaminen nuestras cifras de PV de usuarios.

No veo ninguna manera de excluir al personal de los datos proporcionados por la tabla application_requests. Tampoco es posible filtrar los resultados de esa tabla por categoría. Si estás intentando obtener datos sobre el uso de tu sitio, la tabla topic_views que estás utilizando en tu consulta original te proporcionará datos precisos sobre cómo se utiliza tu sitio, pero esos datos no coincidirán con lo que ves en el informe de Vistas de página.