UNPKG

resque-slack

Version:

Trigger Slack notifications on job events.

88 lines (74 loc) 2.19 kB
var got = require('got'); module.exports = ResqueSlack; function ResqueSlack(worker, func, queue, job, args, options) { this.name = 'resqueSlack'; this.worker = worker; this.queue = queue; this.func = func; this.job = job; this.args = args; this.options = options || {}; this.messages = { before_enqueue: { success: 'About to queue job:', error: 'Job could not be queued:' }, after_enqueue: { success: 'Hot dang! Job queued:', error: 'Bummer! Job failed after being queued:' }, before_perform: { success: 'About to perform job:', error: 'Job could not be performed:' }, after_perform: { success: 'Hot dang! Job done successfully:', error: 'Bummer! Job failed after being performed:' } }; }; ResqueSlack.prototype.runHook = function(hook, done) { if (!this.options[hook]) return done(); var message = this.messages[hook]; if (this.worker.error) this.notify(message.error, done); else this.notify(message.success, done); }; ResqueSlack.prototype.notify = function(message, done) { var notification = { username: 'Resque SlackBot', icon_emoji: ':robot_face:', text: message + ' ' + this.func, attachments: [{ color: this.worker.error ? 'danger' : 'good', fields: this.args.map(function(arg, index) { return { title: 'Argument ' + index, value: arg, short: false } }) }], }; if (this.worker.error) notification.text += this.worker.error; got.post(this.options.webhook, { body: JSON.stringify(notification), }) .then(function(response) { return done(null, response.body); }) .catch(function(error) { return done(new Error(error)); }); }; ResqueSlack.prototype.before_enqueue = function(done) { return this.runHook('before_enqueue', done); }; ResqueSlack.prototype.after_enqueue = function(done) { return this.runHook('after_enqueue', done); }; ResqueSlack.prototype.before_perform = function(done) { return this.runHook('before_perform', done); }; ResqueSlack.prototype.after_perform = function(done) { return this.runHook('after_perform', done); };