Skip to content

Instantly share code, notes, and snippets.

@flammenmensch
Created July 27, 2012 07:28
Show Gist options
  • Select an option

  • Save flammenmensch/3186652 to your computer and use it in GitHub Desktop.

Select an option

Save flammenmensch/3186652 to your computer and use it in GitHub Desktop.
Pushover.net Transport for Winston
'use strict';
var util = require('util'),
https = require('https'),
winston = require('winston'),
querystring = require('querystring');
var PushoverLogger = winston.transports.PushoverLogger = function (options) {
this.token = options.token;
this.user = options.user;
this.name = 'Pushover.net Logger';
this.level = options.level || 'error';
};
util.inherits(PushoverLogger, winston.Transport);
PushoverLogger.prototype.log = function (level, msg, meta, callback) {
if (!callback) {
callback = function () {};
}
var parameters = querystring.stringify({
priority: 1,
token: this.token,
user: this.user,
message: 'An error has occurred: ' + msg
}),
req = https.request({
method: 'POST',
hostname: 'api.pushover.net',
path: '/1/messages.json',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': parameters.length
}
}, function (res) {
var output = "";
res.setEncoding('utf8');
res.on('data', function (chunk) { output += chunk; });
res.on('end', function () {
try {
var jsonOutput = JSON.parse(output);
callback(null, jsonOutput);
} catch (err) {
callback(err);
}
});
}).on('error', function (err) {
callback(err);
});
req.write(parameters);
req.end();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment