じわじわチャットへ通知する
なんかのバッチを実行していて、それが出力するログをじわじわチャットへ通知したい。(そのバッチはそれなりに時間がかかるものとする)
何も考慮しなければ、たとえば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
でインストールできる
ソースは、