Gandi/hubot-es-logger

View on GitHub
scripts/eslogger_watcher.coffee

Summary

Maintainability
Test Coverage
# Description:
#   logger that transmits messages to elasticsearch
#
# Author:
#   mose

moment = require('moment')
ESLogger = require '../lib/eslogger'

module.exports = (robot) ->

  robot.eslogger ?= new ESLogger(robot)
  eslogger = robot.eslogger

  if eslogger.logEnabled? and eslogger.logEnabled isnt 'false'

    # hubot don't `hear` its own messages, we have to 'decorate'
    # the adapter `send` method to add an after-method

    override = (object, methodName, callback) ->
      object[methodName] = callback(object[methodName])

    after = (extra) ->
      (original) ->
        ->
          returnValue = original.apply(this, arguments)
          extra.apply(this, arguments)
          returnValue

    logMessageFromRobot = (room, text) ->
      log = {
        room: room
        nick: robot.name
        message: text
      }
      faketime = moment.utc().add(1, 'second').format()
      eslogger.logMessageES log, room, robot, faketime

    override robot.adapter, 'send', after (envelope, strings...) ->
      if envelope.room?
        for str in strings
          logMessageFromRobot envelope.room, str
    

    # normal message on channel
    robot.hear /.*/, (res) ->
      log = {
        room: res.message.room
        nick: res.message.user.name
        message: res.message.text
      }
      eslogger.logMessageES log, res.message.room, res

    robot.enter (res) ->
      log = {
        room: res.message.room
        nick: ''
        message: "#{res.message.user.name} has joined #{res.message.room}"
      }
      eslogger.logMessageES log, res.message.room, res

    robot.leave (res) ->
      log = {
        room: res.message.room
        nick: ''
        message: "#{res.message.user.name} has quit #{res.message.room} (#{res.message.text})"
      }
      eslogger.logMessageES log, res.message.room, res