えいのうにっき

誤字脱字・記述の誤りなどはこちら https://github.com/a-know/blog.a-know.me へお願いします

【Pixela アップデート情報】投稿・更新された値を判定してアラート通知できるようになりました

本日、Pixela( https://pixe.la/ )のアップデートをおこないました(v1.13.0)。これにより、Pixelaのグラフに対して投稿や更新された値を判定して、アラーティングのような通知をおこなうことができるようになりました。

f:id:a-know:20190921225739p:plain
slack に通知したときのようす。

現時点では、通知先としてはslackのみのサポートとなります。以下に利用方法などを解説します。

ユーザー作成から通知をおこなうまでのサンプル

まずはユーザー作成をおこないます。ユーザー名は notify-test としています。

$ curl -X POST https://pixe.la/v1/users -d '{"token":"thisissecret", "username":"notify-test", "agreeTermsOfService":"yes", "notMinor":"yes"}'
{"message":"Success.","isSuccess":true}

続いてグラフを作ります。グラフIDは test-graph としています。

$ curl -X POST https://pixe.la/v1/users/notify-test/graphs -H 'X-USER-TOKEN:thisissecret' -d '{"id":"test-graph","name":"graph-name","unit":"commit","type":"int","color":"shibafu","timezone":"Asia/Tokyo"}'
{"message":"Success.","isSuccess":true}

ここで、チャンネル(Channel)を定義しておきます。チャンネルとは、「どこに通知するか」という通知先に関する情報のことを指します。作成にはチャンネルIDを指定する必要があり、ここでは my-channel としています。

$ curl -X POST https://pixe.la/v1/users/notify-test/channels -H 'X-USER-TOKEN:thisissecret' -d '{"id":"my-channel","name":"My slack channel","type":"slack","detail":{"url":"https://hooks.slack.com/services/T035DA4QD/B06LMAV40/xxx","userName":"Pixela Notification","channelName":"pixela-notify"}}'
{"message":"Success.","isSuccess":true}

あらかじめ slack の incoming webhook を作成しておき、そのURLを detail.url に指定します。slack の incoming webhook の作成方法についての説明はここでは割愛しますが、詳細は以下を参照してください。

api.slack.com

そして、準備としては最後に、通知ルール(Notification)を定義します。通知ルールとは、「何がどうなったときに通知をおこなうか」という通知条件です。こちらもIDを指定する必要がありますので、my-notify-rule とします。

$ curl -X POST https://pixe.la/v1/users/notify-test/graphs/test-graph/notifications -H 'X-USER-TOKEN:thisissecret' -d '{"id":"my-notify-rule","name":"my notification rule","target":"quantity","condition":">","threshold":"3","channelID":"my-channel"}'
{"message":"Success.","isSuccess":true}

このリクエストにより、どういった通知条件が指定されているかというと、

  • 投稿・更新された値が("target":"quantity"
  • 閾値 "3"("threshold":"3"
  • よりも大きい("condition":">"
  • 場合に、チャンネルID my-channel を通知先として通知をおこなう("channelID":"my-channel"

......という条件になります。試しに、このグラフに値を投稿してみましょう。閾値3 なので、4 の値を投稿してみます。

$ curl -X POST https://pixe.la/v1/users/notify-test/graphs/test-graph -H 'X-USER-TOKEN:thisissecret' -d '{"date":"20190920","quantity":"4"}'
{"message":"Success.","isSuccess":true}

投稿はできましたね。slackの当該チャンネルを見てみましょう。

f:id:a-know:20190921225739p:plain

無事、通知させることができました!

もう少し詳しく

通知ルール(Notification)について、もう少し詳しく書きます。

設定可能な通知条件について

  • target
    • いまのところ、quantity しか指定することはできません。
    • そのうち、「そのグラフの最大・最小値」とか「そのグラフの平均値」とかが指定できるようになると良いですね。
  • threshold
    • 対象のグラフのタイプと矛盾のない値である必要があります。
    • グラフタイプが int なら、threshold も整数値である必要があります。
  • condition
    • 以下の4タイプをサポートしています。
      • > : 投稿および更新された quantity閾値よりも大きくなったときに通知をおこないます。
      • = : 投稿および更新された quantity閾値と等しい場合に通知をおこないます。
      • < : 投稿および更新された quantity閾値よりも小さくなったときに通知をおこないます。
      • multipleOf : 投稿および更新された quantity閾値の倍数になったときに通知をおこないます。
        • この条件を指定したい場合は、Pixelaサポーターである必要があります。詳細はこちらをご覧ください。

その他について

今回のリリースに関連するページなど

ぜひ使ってみてください

これまでの Pixela のおもしろ活用事例として、飲酒回数をPixelaに投稿したり、といったものがあったのですが、今回の通知機能を利用することにより、それが一定値を超えた場合にすぐにそのことに気がつくことができるはずです。つまり、超えてはいけないラインを超えてお酒を飲んでしまっているときに、そのことの通知を Pixela から受け取ることができるわけですね。これは明らかに便利そうです。ぜひ使ってみてもらえたらと思います。

blog.sushi.money