Le script d'automatisation Schedule PM avec les résultats de Data Explorer n'envoie pas de PM

Nous utilisons une instance hébergée de Discourse et nous utilisons le plugin Automation fourni avec sa gamme de scripts et de déclencheurs. Cependant, nous rencontrons des problèmes pour recevoir des MP du script « Planifier un MP avec les résultats de l’explorateur de données ».
Il semble que le déclencheur d’automatisation fonctionne et que la requête de l’explorateur de données soit exécutée (cette requête fonctionne et produit des résultats lorsqu’elle est exécutée manuellement), mais nous ne recevons aucun MP par la suite. J’ai essayé avec moi-même comme destinataire et aussi avec le groupe « Admin », mais dans les deux cas, aucun MP n’est reçu.

Je ne suis pas sûr de manquer quelque chose d’évident ici, mais toute aide serait appréciée.

1 « J'aime »

Bonjour Christian :wave:

Voyez-vous quelque chose de pertinent dans /logs ?

2 « J'aime »

Je pense que je vois quelque chose de similaire :

La requête de l’explorateur de données semble s’être exécutée :

Mais aucun PM n’est livré.

Je vois cette erreur dans /logs :

Message (5 copies signalées)

Job exception : undefined method `to_sym' for nil:NilClass


Backtrace

/var/www/discourse/plugins/discourse-data-explorer/lib/result_to_markdown.rb:20:in `block (2 levels) in convert'
/var/www/discourse/plugins/discourse-data-explorer/lib/result_to_markdown.rb:18:in `each'
/var/www/discourse/plugins/discourse-data-explorer/lib/result_to_markdown.rb:18:in `each_with_index'
/var/www/discourse/plugins/discourse-data-explorer/lib/result_to_markdown.rb:18:in `block in convert'
/var/www/discourse/plugins/discourse-data-explorer/lib/result_to_markdown.rb:15:in `each'
/var/www/discourse/plugins/discourse-data-explorer/lib/result_to_markdown.rb:15:in `convert'
/var/www/discourse/plugins/discourse-data-explorer/lib/report_generator.rb:20:in `generate'
/var/www/discourse/plugins/discourse-data-explorer/plugin.rb:117:in `block (4 levels) in activate!'
/var/www/discourse/plugins/discourse-automation/app/models/discourse_automation/automation.rb:83:in `trigger!'
/var/www/discourse/plugins/discourse-automation/app/jobs/scheduled/discourse_automation_tracker.rb:36:in `run_pending_automation'

J’obtiens également une erreur ‘500’ si j’essaie de déclencher manuellement l’automatisation, et cette erreur (légèrement différente) dans les logs :

Message (4 copies signalées)

NoMethodError (undefined method `to_sym' for nil:NilClass)
app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
app/controllers/application_controller.rb:418:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

plugins/discourse-data-explorer/lib/result_to_markdown.rb:20:in `block (2 levels) in convert'
plugins/discourse-data-explorer/lib/result_to_markdown.rb:18:in `each'
plugins/discourse-data-explorer/lib/result_to_markdown.rb:18:in `each_with_index'
plugins/discourse-data-explorer/lib/result_to_markdown.rb:18:in `block in convert'
plugins/discourse-data-explorer/lib/result_to_markdown.rb:15:in `each'
plugins/discourse-data-explorer/lib/result_to_markdown.rb:15:in `convert'
plugins/discourse-data-explorer/lib/report_generator.rb:20:in `generate'
plugins/discourse-data-explorer/plugin.rb:117:in `block (4 levels) in activate!'
plugins/discourse-automation/app/models/discourse_automation/automation.rb:83:in `trigger!'
plugins/discourse-automation/app/controllers/discourse_automation/automations_controller.rb:10:in `trigger'

Faisons glisser cela vers Bug et voyons si quelqu’un peut y jeter un coup d’œil. :+1:

2 « J'aime »

Après un peu plus d’investigation, je pense que cela pourrait être lié au type de requête que vous essayez d’exécuter. Je viens d’essayer avec une requête très simple et j’ai réussi à la faire fonctionner et à envoyer un message privé. Pourriez-vous partager votre requête ?

1 « J'aime »

Merci de vous pencher sur ce problème.
La requête n’est pas totalement simple et ressemble à ceci :

WITH
ua AS (
  SELECT target_topic_id, COUNT(id) FROM user_actions
  WHERE action_type = 15
  GROUP BY target_topic_id
)
SELECT
  t.id,
  t.title,
  t.created_at,
  t.last_posted_at,
  t.views,
  t.posts_count,
  t.user_id,
  t.last_post_user_id
FROM topics t
INNER JOIN users us ON us.id = t.user_id
LEFT JOIN ua ON ua.target_topic_id = t.id
WHERE t.deleted_at IS NULL
  AND t.closed = false
  AND t.archived = false
  AND t.visible = true
  AND ua.target_topic_id IS NULL
  AND us.username_lower != 'system'
  AND t.created_at > now() - INTERVAL '7' DAY
ORDER BY created_at DESC

Comme je le dis, elle s’exécute manuellement et produit des résultats.

1 « J'aime »

Par manuel, entendez-vous le déclenchement de la requête à partir de l’explorateur de données ou le déclenchement du script à partir du plugin d’automatisation ?

1 « J'aime »

De l’explorateur de données.

1 « J'aime »

Je pense que cela a quelque chose à voir avec la magie de style user_id que l’explorateur de données fait lorsqu’il les convertit des identifiants bruts en liens utilisables. Si j’exécute votre rapport tel quel, il génère une erreur comme vous le voyez, mais si je supprime t.user_id et t.last_post_user_id de la sélection, cela fonctionne.

Si je les convertis en noms d’utilisateur simples, cela semble également fonctionner correctement via l’automatisation :


WITH
ua AS (
  SELECT target_topic_id, COUNT(id) FROM user_actions
  WHERE action_type = 15
  GROUP BY target_topic_id
)
SELECT
  t.id,
  t.title,
  t.created_at,
  t.last_posted_at,
  t.views,
  t.posts_count,
  us.username,
  u2.username
FROM topics t
INNER JOIN users us ON us.id = t.user_id
LEFT JOIN ua ON ua.target_topic_id = t.id
JOIN users u2 ON u2.id = t.last_post_user_id
WHERE t.deleted_at IS NULL
  AND t.closed = false
  AND t.archived = false
  AND t.visible = true
  AND ua.target_topic_id IS NULL
  AND us.username_lower != 'system'
  AND t.created_at > now() - INTERVAL '7' DAY
ORDER BY created_at DESC

Bien que nous ayons également contacté quelqu’un de plus compétent pour examiner cela plus en détail. :+1: :slight_smile:


Cependant, séparément, je ne suis pas sûr que votre requête fasse ce que vous voulez. Est-ce lié à la solution, car je vois beaucoup de MP dans mes résultats ?

3 « J'aime »

Merci, je vais essayer avec des modifications à l’identifiant utilisateur.

Je n’ai pas écrit cette requête à l’origine, donc je ne sais pas encore si elle nous donne ce que nous voulons, donc je vais probablement la réécrire.

2 « J'aime »

C’est cette ligne : https://github.com/discourse/discourse-data-explorer/blob/705753216cc632b4f6505d2000926ab3b73d8628/lib/result_to_markdown.rb#L20

related = relations.dig(colrender[col_index].to_sym) if col_index < colrender.size

La condition if à la fin est incorrecte : colrender est censé être éparse, pas compact. Il contiendra des nulls si certaines, mais pas toutes, les colonnes fournissent des données de rendu supplémentaires.

La vérification correcte serait probablement unless colrender[col_index].nil?

De plus, ce code semble négliger les types de rendu url, reltime et html car ce ne sont pas des classes ActiveRecord.

6 « J'aime »

Pour ma part, il semble que je ne parvienne pas à déclencher correctement ce script d’automatisation, quelle que soit la requête de l’explorateur de données. Par exemple :

SELECT username from users
LIMIT 10

Erreur 500 lorsque je déclenche manuellement depuis Automatisation :

Message (3 copies signalées)

TypeError (Nil n'est pas une source JSON valide.)
app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
app/controllers/application_controller.rb:418:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/middleware/content_security_policy.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

plugins/discourse-data-explorer/lib/report_generator.rb:42:in `parse'
plugins/discourse-data-explorer/lib/report_generator.rb:42:in `params_to_hash'
plugins/discourse-data-explorer/lib/report_generator.rb:15:in `generate'
plugins/discourse-data-explorer/plugin.rb:117:in `block (4 levels) in activate!'
plugins/discourse-automation/app/models/discourse_automation/automation.rb:83:in `trigger!'
plugins/discourse-automation/app/controllers/discourse_automation/automations_controller.rb:10:in `trigger'
actionpack (7.0.4.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.4.3) lib/abstract_controller/base.rb:215:in `process_action'
actionpack (7.0.4.3) lib/action_controller/metal/rendering.rb:53:in `process_action'
actionpack (7.0.4.3) lib/abstract_controller/callbacks.rb:234:in `block in process_action'

Env

HTTP HOSTS: discourse.canapin.dev

Ces problèmes rencontrés devraient être corrigés avec cette PR :

4 « J'aime »

Ce sujet a été automatiquement fermé après 2 jours. Les nouvelles réponses ne sont plus autorisées.