Ruboty で Redash のデータを通知する ruboty-redash 作った

Ruboty で Redash のデータを通知したい

Redash で数値を可視化している環境の場合、その最新の値を Slack で通知したい。 Ruboty を使って bot を運用しているので、 Ruboty プラグインとして Redash の値を取ってくるものを作った。

ruboty-redash

github.com

使い方

Ruboty にプラグインを追加して、以下の2つの環境変数を追加する。

  • REDASH_ROOT … Ruboty に URL のルート (例: https://app.redash.io/)
  • REDASH_USER_APIKEY … Redash のユーザの API キー

あとはチャット上で以下のようなコマンドを実行する。

@ruboty redash show <クエリID> <ERB メッセージフォーマット>

<クエリ ID> は、Redash のクエリの画面を開いた時に URL に表示される ID のこと。

<ERB メッセージフォーマット> は、メッセージのフォーマットを ERB で指定する。 例えば

@ruboty redash show 11 昨日の生産性スコアは <%= data['rows'][-1]['productivity_pulse'] %> です。

のようになる。 この data のデータ構造の調べ方が少しややこしいので、以下で解説する。

data のデータ構造の調べ方

Redash で該当のクエリのページを Google Chrome を表示する。 Developer Tools の Network タブを開いて query_results でフィルタする。

f:id:mallowlabs:20200223144726p:plain

その返ってきた JSONPreviewquery_result 配下の data フィールドが data 変数に格納されるという仕組み。

query_result の値を見ていることからわかるように、最後の実行結果を取得するという仕組みになっている。 そのため、一度も実行されていないクエリは ruboty-redash で取得することはできない。 また、クエリの実行は Redash 側でスケジュール化しておいて常に実行されるようにしておかないと値は最新化されない。

まとめ

Ruboty で Redash の値を通知できるような仕組みを作った。 本文中の「生産性スコア」が気になった方は Redash で作る「じぶんダッシュボード」 というタイトルで発表した - mallowlabsの備忘録 の記事も参考にして欲しい。