Gandi/hubot-pager-v2

View on GitHub
scripts/pagerv2_hook.coffee

Summary

Maintainability
Test Coverage
# Description:
#   webhook endpoint for Pagerduty
#
# Dependencies:
#
# Configuration:
#   PAGERV2_ENDPOINT
#   PAGERV2_ANNOUNCE_ROOM
#
# Commands:
#
# Author:
#   mose

Pagerv2 = require '../lib/pagerv2'

module.exports = (robot) ->

  pagerEndpoint = process.env.PAGERV2_ENDPOINT or '/hook'
  pagerAnnounceRoom = process.env.PAGERV2_ANNOUNCE_ROOM

  robot.brain.data.pagerv2 ?= {
    users: { }
  }
  robot.pagerv2 ?= new Pagerv2 robot, process.env
  pagerv2 = robot.pagerv2

  # Webhook listener
  # console.log robot.adapterName
  if pagerAnnounceRoom?
    robot.router.post pagerEndpoint, (req, res) ->
      if req.body? and req.body.messages? and
              (req.body.messages[0].type? or req.body.messages[0].event?)
        robot.logger.debug req.body
        if (/^incident.*$/.test(req.body.messages[0].type)) or
                /^incident.*$/.test(req.body.messages[0].event) or
                /^incident.*$/.test(req.body.messages.event)
          pagerv2.parseWebhook(robot.adapterName, req.body.messages)
          .then (messages) ->
            for message in messages
              robot.messageRoom pagerAnnounceRoom, message
          res.status(200).end()
        else
          robot.logger.warning '[pagerv2] Invalid hook payload ' +
                               "type #{req.body.messages[0].type} from #{req.ip}"
          pagerv2.logError 'invalid payload', req.body
          res.status(422).end()
      # WebHook V3
      else if req.body? and req.body.event?
        if req.body.event.data?
          pagerv2.parseWebhookv3(robot.adapterName, [req.body])
          .then (messages) ->
            for message in messages
              robot.messageRoom pagerAnnounceRoom, message
          res.status(200).end()
      else
        robot.logger.warning "[pagerv3] Invalid hook payload from #{req.ip}"
        pagerv2.logError 'invalid payload', req.body
        res.status(422).end()