【cloudpack 大阪 BLOG】MSPのシステム化について(不定期連載) Hubotに定期的につぶやかせる&作業の管理をさせる
なんて記事が出ていて、時代の先を行っているな俺とかわけのわからん優越感に
浸っていますw
今回は<Hubotに日次作業を定期的につぶやかせる&作業の管理をさせる>です
①と②のやり取りの部分は前回で基本は出来るようになります•••
そしてよくHubotの最初に実装されている機能で、Slackにpingと入力したらpongと
返したりするのを少し楽しみますが・・・これからどう活用するの?で
PCの電源をそっとOFFにして、Heroku上には実装を待ち続ける、野良Hubotが
5万といるのではないかと推測されます・・・汗
とりあえず日次業務をつぶやかせるには、Hubotの機能だけでは無理なので
状態を管理する機能と、時間になったらHubotをつぶかす機能が必要になります。
今回状態を管理させるのは、Redisを使用し、
時間によるトリガーはnode.jsのモジュールである、cronモジュールを使います。
redisのインストールと設定は
sudo yum --enablerepo=epel install npm redis
sudo /etc/init.d/redis start
sudo chkconfig redis on
で、行いcronのインストールは
npm install cron
で、行いました。
これで下準備はOKでつぶやかせるには○の所に時間を入れて
cron = require('cron').CronJob
client = require("redis").createClient()module.exports = (robot) ->
new cron('0 0 ○ * * *', () ->
robot.messageRoom つぶやかしたいルーム名, "MSPの皆様おはようございます。本日の日次処理担当の方、○時になりましたので日次処理の対応よろしくお願いします"
, null, true, 'Asia/Tokyo').start()
で出来て、redisへの値のセットは
client.set "○", 1
な感じで(○はキー名として時間で”1”はセットしたい値です)簡単に値のセットが可能です・・・が、hubotに対する指示(ここでは作業を着手した)を、毎回キーボードで
入力してって言ったら、間違いなく使ってくれない・・・と言う事で、
HubotがURLを表示して、クリックされたらHubotが受け付けてつぶやく事をやめるような、お手軽なUIの実装を行います。
Hubotはnode.jsなので
request = require 'request'
module.exports = (robot) ->
robot.router.get "/hubot/daily", (req, res) ->
な形で、WEBサーバーとしてURLを受け付ける事も可能ですが、
SlackでURLを表示してしまうと、もれなくSlackのプレビュー機能で、
そのURLがコールされるというかなり残念な状況になってしまい、
表示=URLを叩かれた状態で処理が勝手に完了して、
全く無意味な状態になるので、コード上でユーザーエージェントを確認し
if req.headers['user-agent'] == 'Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)'
return
slackからのプレビュー表示なら、処理を抜けるような実装をしてあげる必要があります。
で後は
client.get "○",(err, val) ->
if err
return
# エラーが無ければデータを取得
if val == 1
client.set "○", 0
robot.messageRoom "ルーム名","*○時の日時処理の受付完了しました*"
な感じで、redisから値を取得して状態を見て、問題なければつぶやくような実装をすれば
な感じでつぶやいてくれるようになります。
なお今回の機能を実装するにあたり下記のページを参考にさせて頂きました
私のブログは実装側を目的としているのではなく、
課題に対するアプローチがメインなので、ざっくりとした形で抜粋させてもらっていますので、実装は色んなBLOGを参考にして頂ければと思います。
今回の実装の仕方は、Hubotが初めてでもあったのと、見たサンプルを元に
実装していったために、作りが固定で汎用性が無いものになっていますが
とりあえず24/365を目標にずっと稼働しているので、今のところは目的を果たしていますし、担当者が作業を忘れていても、Slackを見ている他の人が気がつくようになっています。
クリックしないと、10分おき(時間が遅くなると5分おき)につぶやくので、
Slack上でのやり取りを中断してしまう?って話もありましたが、
気がつけばすぐにクリックと、作業漏れや作業着手の遅れが可視化されたので、
とりあえずはよしかなと思っていますが、よりMSPや他のメンバーにわかりやすくできる案が頭の中では出来たので、いつのタイミングかで実装/投入したいと思います。
次回はこの機能の実装を汎用化させた、
googleカレンダーとgoogle app scriptとhubotとslackの連携を書きます。