Automatisierungsskript Zeitplan PM mit Data Explorer-Ergebnissen sendet keine PMs

Wir verwenden eine gehostete Discourse-Instanz und nutzen das bereitgestellte Automatisierungs-Plugin mit seinen Skripten und Triggern. Wir haben jedoch Probleme beim Empfang von PMs aus dem Skript „PM mit Data Explorer-Ergebnissen planen“.
Es sieht so aus, als ob der Automatisierungs-Trigger funktioniert und die Data Explorer-Abfrage ausgeführt wird (diese Abfrage funktioniert und liefert Ergebnisse, wenn sie manuell ausgeführt wird). Wir erhalten jedoch keine PMs danach. Ich habe versucht, mich selbst als Empfänger und auch die Gruppe „Admin“ zu verwenden, aber in beiden Fällen werden keine PMs empfangen.

Ich bin mir nicht sicher, ob ich hier etwas Offensichtliches übersehe, aber jede Hilfe wäre willkommen.

1 „Gefällt mir“

Hallo Christian :wave:

Siehst du etwas Ähnliches in /logs?

2 „Gefällt mir“

Ich glaube, ich sehe etwas Ähnliches:

Die Data Explorer-Abfrage scheint ausgeführt worden zu sein:

Aber es wird kein PM geliefert.

Ich sehe diesen Fehler 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'

Ich erhalte auch einen ‘500’-Fehler, wenn ich versuche, die Automatisierung manuell auszulösen, und diesen (leicht anderen) Fehler in den Protokollen:

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'

Schieben wir es mal zu Bug und sehen, ob wir jemanden finden, der sich das ansieht. :+1:

2 „Gefällt mir“

Nach weiterer Untersuchung glaube ich, dass es mit der Art der Abfrage zusammenhängen könnte, die Sie ausführen möchten. Ich habe es gerade mit einer sehr einfachen Abfrage versucht und konnte sie ausführen und eine PM senden. Könnten Sie mitteilen, wie Ihre Abfrage lautet?

1 „Gefällt mir“

Vielen Dank, dass Sie sich darum gekümmert haben.
Die Abfrage ist nicht ganz einfach und sieht so aus:

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

Wie ich schon sagte, sie läuft manuell und liefert Ergebnisse.

1 „Gefällt mir“

Meinen Sie mit manuell, dass Sie die Abfrage vom Daten-Explorer aus auslösen oder das Skript vom Automatisierungs-Plugin aus auslösen?

1 „Gefällt mir“

Vom Daten-Explorer.

1 „Gefällt mir“

Ich glaube, es hat etwas mit der user_id-Magie zu tun, die der Daten-Explorer macht, wenn er sie von bloßen IDs in benutzbare Links umwandelt. Wenn ich Ihren Bericht so ausführe, wie er ist, gibt er einen Fehler aus, genau wie Sie ihn sehen. Aber wenn ich sowohl t.user_id als auch t.last_post_user_id aus der SELECT-Anweisung entferne, funktioniert er.

Wenn ich diese in einfache Benutzernamen umwandle, scheint es auch über die Automatisierung ordnungsgemäß zu funktionieren:


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

Wir haben jedoch auch jemanden mit mehr Wissen gebeten, sich das genauer anzusehen. :+1: :slight_smile:


Obwohl ich separat nicht sicher bin, ob Ihre Abfrage das tut, was Sie wollen. Hat es etwas mit der Lösung zu tun, da ich viele PMs in meinen Ergebnissen sehe?

3 „Gefällt mir“

Danke, ich werde es mit Änderungen an der Benutzer-ID versuchen.

Ich habe diese Abfrage ursprünglich nicht geschrieben, daher muss ich noch feststellen, ob sie uns überhaupt das liefert, was wir wollen, also werde ich sie wahrscheinlich neu schreiben.

2 „Gefällt mir“

Es ist diese Zeile: 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

Die if-Bedingung am Ende ist falsch: colrender soll spärlich sein, nicht dicht gepackt. Sie wird Nullen enthalten, wenn einige, aber nicht alle Spalten zusätzliche Rendering-Daten liefern.

Die korrekte Prüfung wäre wahrscheinlich unless colrender[col_index].nil?

Außerdem scheint dieser Code die Rendering-Typen url, reltime und html zu vernachlässigen, da es sich nicht um ActiveRecord-Klassen handelt.

6 „Gefällt mir“

Was mich betrifft, scheint es, dass ich dieses Automatisierungsskript nicht erfolgreich auslösen kann, unabhängig von der Data Explorer-Abfrage. Zum Beispiel:

SELECT username from users
LIMIT 10

Fehler 500, wenn ich manuell von Automatisierung aus auslöse:

Nachricht (3 Kopien gemeldet)

TypeError (Nil ist keine gültige JSON-Quelle.)
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

Diese Probleme sollten mit diesem PR behoben sein:

4 „Gefällt mir“

Dieses Thema wurde nach 2 Tagen automatisch geschlossen. Neue Antworten sind nicht mehr möglich.