グローバルからwebサイトの状態を監視するのにhubotが使えそうだったので使ってみた
http responseのstatusが200以外だったらslackに通知する様にした
サンプルはモバイルhttpsのサイト用
scripts/monitor.coffee
# Description:
# Monitoring
https = require 'https'
cron = require('cron').CronJob
module.exports = (robot) ->
https_health_check = (host, path) ->
https.get {host: host, path: path, port: 443, headers: "User-Agent":"iPhone xxx Bot", method: 'GET'}, (res) ->
msg = "https://#{host}#{path} is #{res.statusCode}"
console.log msg
if res.statusCode != 200
console.log res.headers
robot.send {room: "notifications"}, msg
new cron('0 * * * * *', () =>
https_health_check('サイトドメイン', 'パス(/から記述)')
).start()
改良版 - 2015/06
- httpsでなくrequestモジュールを使ってみた
- cronをやめてagendaを使ってみた
- EventEmitterを使ってみた
監視用関数
request = require('request')
module.exports = (robot) ->
robot.on 'healthcheck:url', (url) ->
options = {
url: url
headers: "User-Agent":"iPhone"
}
request.get options, (err, res, body) ->
msg = "#{url} is #{res.statusCode}"
robot.logger.info msg
if err
robot.logger.error err
robot.send {room: "notifications"}, err
else if not res.statusCode == 200
robot.logger.error res.headers
robot.send {room: "notifications"}, msg
呼び出し側
Agenda = require('agenda')
agenda = new Agenda({db: { address: process.env.MONGOLAB_URI ? 'localhost:27017/agenda'}})
module.exports = (robot) ->
agenda.define 'agenda:monitoring', (job, done) ->
# 複数URL監視
robot.emit 'healthcheck:url', 'https://xxx.yyy/zzz'
robot.emit 'healthcheck:url', 'https://xxx.yyy/aaa'
robot.emit 'healthcheck:url', 'https://zzz.xxx.yyy/aaa'
done()
agenda.every('1 minutes', 'agenda:monitoring')
agenda.start()
npm package
hubot-healthcheck 公開した(2015/08/24)