Comptage des pages vues pour les utilisateurs (non personnel, non robot)

Salut à tous,

Je ne vois pas ces données dans les rapports. J’utilise le plugin Data Explorer. Quelle requête me donnerait le nombre de pages vues uniquement pour nos utilisateurs par semaine, en excluant l’activité des robots d’indexation et les membres du personnel de notre forum, mais en incluant les pages vues anonymes ?

  • Est-ce que quelque chose comme ceci fonctionnerait ?
  • Prendrait-il en compte les vues anonymes ?
  • De plus, existe-t-il un moyen de convertir cela en rapport ?
-- [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 requête semble devoir fonctionner.

Oui, telle qu’elle est écrite, elle compte les vues anonymes. Pour les vues de sujets anonymes, l’user_id sera NULL et l’ip_address sera NOT NULL. Vous pouvez exclure les vues anonymes en ajoutant la condition suivante à la requête :

AND user_id IS NOT NULL

Cela pourrait être réalisé via un plugin. Le plugin Discourse Solved ajoute un rapport au tableau de bord administrateur. Il pourrait y avoir du code dans ce plugin qui servirait d’exemple pour ajouter un rapport : discourse-solved/plugin.rb at main · discourse/discourse-solved · GitHub.

Donc, quelque chose comme ça ? L’adresse IP serait donc nulle pour les robots d’indexation ?

Je souhaite inclure :

  • les visiteurs anonymes
  • les utilisateurs connectés

Je souhaite exclure :

  • les robots d’indexation
  • les utilisateurs du personnel
-- [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

Ce qui précède est incorrect. Il y a une sous-estimation des utilisateurs anonymes par rapport aux vues de page consolidées du rapport Discourse.

Il semble que je doive envisager d’autres tables également ?

Le rapport « Vues de page » interroge la table application_requests. Cette table ne fournit aucune donnée pour filtrer les vues du personnel. Ce qu’elle renvoie, c’est un total du nombre de requêtes de chaque type par jour. Le champ req_type est renvoyé sous forme d’entier. Les entiers sont associés au type de requête selon les règles suivantes :

"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 table topic_views utilisée par votre requête renvoie au maximum une entrée par utilisateur ou adresse IP, par jour et par sujet. Ces données ne peuvent pas être utilisées pour suivre les vues de page : il peut y avoir plusieurs requêtes d’application pour une seule vue de sujet.

Je vois. Donc, essentiellement, il n’est pas possible d’exclure les utilisateurs du personnel pour obtenir des chiffres précis de pages vues (PV).

Je tente ma chance : est-il possible d’exclure certaines catégories (je suppose que non) ? Nous avons des catégories privées réservées uniquement à l’équipe interne et nous ne souhaitons pas qu’elles faussent nos chiffres de PV utilisateurs.

Je ne vois aucun moyen d’exclure le personnel des données fournies par la table application_requests. Il n’est pas non plus possible de filtrer les résultats de cette table par catégorie. Si vous essayez d’obtenir des données sur l’utilisation de votre site, la table topic_views que vous utilisez dans votre requête initiale vous donnera des données précises sur la façon dont votre site est utilisé, mais ces données ne correspondront pas à ce que vous voyez dans le rapport Vues de page.