Re:dashで取得したデータをSlackに投稿する(とRe:dash内pythonを書くときの注意点)


やりたい

  • Re:dashで取得したデータを、pythonデータソースを使って、Slackに投稿したい
  • Re:dashのalert機能は便利だが、条件が解消しないとずっと出続けてしまう問題があった

準備

  • Slack AdminでIncoming Webhooksを設定し、Webhook URLを取得する。
  • Re:dashには、既にpythonデータソースが用意されている前提。ググればいっぱい出てくる

Slack投稿用のサンプル

import requests
import json

SLACK_URL = "[WEBHOOK_URL]"
content = "`Daijin` は `Hentai`"
payload = {
    "text": content
}
data = json.dumps(payload)
response = requests.post(SLACK_URL, data)

実際にやったこと

  • Re:dashで取得したある条件に合ったデータをSlackに投稿する
    • Re:dash上で定期実行するが、その時間を秒単位では指定できず、ほっとくと重複したデータを投稿してしまう。そこをSlack APIを使って既に投稿したデータは投稿しない処理を加えた。
    • 結果75行の割と大きめのソースとなった

その際ハマった注意点

  • python側で使うライブラリは、Data Sourceの画面で追加できる。但し、標準ライブラリのみで、pip installが必要なものはGUIだけではできなそうだった

    ここでsaveするだけでimportできるようにはなった
  • なぜか関数を作れない。関数を作って実行すると関数内からglobal変数にアクセスできない
  • 引数付きのクエリは実行できなそうである
  • get_query_resultではクエリは実行されない
  • redashの定期実行は割とブレる。1minute毎のやつでも30秒くらいずれる。弊社の環境だと、なぜか90秒サイクルで実行されてた。1秒以内で実行されるクエリなんだが
13:32:20
13:33:50
13:35:20
13:36:50
13:38:20

参考

» Re:Dashでpythonデータソースを使ってクエリ結果をごにょごにょしたい