Skip to content

Instantly share code, notes, and snippets.

@yug1224
Created August 10, 2015 14:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yug1224/a006b63da60e762ded6c to your computer and use it in GitHub Desktop.
Save yug1224/a006b63da60e762ded6c to your computer and use it in GitHub Desktop.
# Description:
# URL external monitoring
#
# Dependencies:
# "hubot-slack": "^3.3.0"
# "hubot-slack-attachement": "^1.0.1"
#
# Commands:
# None
CronJob = require("cron").CronJob
Promise = require("q").Promise
request = require "request"
urls = [
"https://aaa.example.jp"
"https://bbb.example.jp"
]
opt =
method: "HEAD"
headers:
"User-Agent": "hubot-external-monitoring"
module.exports = (robot) ->
getStatusCode = (url) ->
return new Promise (resolve, reject) ->
opt.url = url
request opt, (err, res) ->
if err then reject err
else
resolve
statusCode: res.statusCode
url: res.request.uri.href
sendSlack = (statusCode, url) ->
data =
content:
fallback: "CRITICAL: #{url} statusCode #{statusCode}"
text: "CRITICAL: <#{url}|#{url}> statusCode #{statusCode}"
color: "#e84050"
channel: "alert"
username: "bot"
icon_emoji: ":shit:"
robot.emit "slack.attachment", data
job = new CronJob
cronTime: "0 * * * * *"
onTick: () ->
for val in urls
getStatusCode val
.then (value) ->
if value.statusCode >= 400
sendSlack value.statusCode, value.url
.catch (err) ->
console.error err
job.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment