じわじわチャットへ通知する

なんかのバッチを実行していて、それが出力するログをじわじわチャットへ通知したい。(そのバッチはそれなりに時間がかかるものとする)

何も考慮しなければ、たとえばslackであれば、

# #!/bin/bash
# notify_chat.sh

exec tee >(while read line; do curl -s --data '$line' $SLACK_ENDPOINT -o/dev/null; done

みたいにやれば、

$ ruby batch.rb | notify_chat.sh

で毎行slackさんへ通知してくれる。


このやり方だと、場所によってはAPIをどばっと叩いてしまって負荷をかけてしまったりするので、1秒間の出力はまとめてわたせるようにするコマンドthrottleというものを書いてみた。

  $ ruby batch.rb | tee >(throttle -interval 1s "curl -s --data '%%DATA%%' $SLACK_ENDPOINT -o /dev/null")

みたいにやると、1秒間の出力はまとめてcurlコマンドへ渡してくれる。1秒間の出力は、%%DATA%%の部分が置きかえられて実行される

$ go install github.com/walf443/throttle

でインストールできる

ソースは、

github.com