Lo script di automazione Schedule PM con i risultati di Data Explorer non invia i PM

Utilizziamo un’istanza ospitata di Discourse e facciamo uso del plugin Automation fornito con la sua gamma di script e trigger, tuttavia stiamo riscontrando problemi nel ricevere messaggi privati dallo script ‘Schedule PM with data explorer results’.
Sembra che il trigger di Automation funzioni e che la query di Data Explorer venga eseguita (questa query funziona e produce risultati quando eseguita manualmente), tuttavia non riceviamo alcun messaggio privato in seguito. Ho provato con me stesso come destinatario e anche con il gruppo ‘Admin’, ma in entrambi i casi non vengono ricevuti messaggi privati.

Non sono sicuro se mi stia sfuggendo qualcosa di ovvio, ma qualsiasi aiuto sarebbe apprezzato.

1 Mi Piace

Ciao Christian :wave:

Vedi qualcosa di correlato in /logs?

2 Mi Piace

Penso di vedere una cosa simile:

La query di esplorazione dati sembra essere stata eseguita:

Ma nessun PM viene consegnato.

Vedo questo errore in /logs:

Message (5 copies reported)

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'

Ricevo anche un errore ‘500’ se tento di attivare manualmente l’automazione, e questo errore (leggermente diverso) nei log:

Message (4 copies reported)

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'

Spostiamolo in Bug e vediamo se qualcuno può dare un’occhiata. :+1:

2 Mi Piace

Dopo ulteriori indagini, penso che potrebbe essere collegato al tipo di query che stai cercando di eseguire. Ho appena provato con una molto semplice e sono riuscito a eseguirla e inviare un PM. Potresti condividere la tua query?

1 Mi Piace

Grazie per aver esaminato la questione.
La query non è del tutto semplice e si presenta così:

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

Come dicevo, viene eseguita manualmente e produce risultati.

1 Mi Piace

Per manualmente, intendi attivare la query da data explorer o attivare lo script dal plugin di automazione?

1 Mi Piace

Dall’esploratore di dati.

1 Mi Piace

Penso che abbia a che fare con la magia dello stile user_id che l’esploratore di dati fa quando li converte da ID grezzi a collegamenti utilizzabili. Se eseguo il tuo report così com’è, si verifica un errore proprio come stai vedendo, ma se rimuovo sia t.user_id che t.last_post_user_id dalla SELECT, funziona.

Se li converto in nomi utente semplici, sembra funzionare correttamente anche attraverso l’automazione:


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

Anche se abbiamo segnalato la cosa a qualcuno più esperto per dare un’occhiata più in dettaglio. :+1: :slight_smile:


Anche se separatamente, non sono sicuro che la tua query faccia quello che vuoi. È in qualche modo correlata alla Soluzione, dato che vedo molti PM nei miei risultati?

3 Mi Piace

Grazie, ci proverò con delle modifiche all’ID utente.

Originariamente non ho scritto questa query, quindi devo ancora determinare se ci darà comunque ciò che vogliamo, quindi probabilmente la riscriverò.

2 Mi Piace

È questa riga: 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 condizione if alla fine è errata: colrender dovrebbe essere sparso, non compatto. Conterrà valori null se alcune, ma non tutte, le colonne forniscono dati di rendering aggiuntivi.

Il controllo corretto sarebbe probabilmente unless colrender[col_index].nil?

Inoltre, questo codice sembra trascurare i tipi di rendering url, reltime e html perché non sono classi ActiveRecord.

6 Mi Piace

Per quanto mi riguarda, sembra che non riesca a far scattare correttamente questo script di automazione, indipendentemente dalla query dell’esploratore di dati. Ad esempio:

SELECT username from users
LIMIT 10

Errore 500 quando attivo manualmente da Automazione:

Messaggio (3 copie segnalate)

TypeError (Nil non è una sorgente JSON valida.)
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/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

Questi problemi riscontrati dovrebbero essere risolti con questa PR:

4 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 2 giorni. Non sono più consentite nuove risposte.