UNPKG

librato-express

Version:

Middleware for expressjs to send metrics to Librato.

58 lines (49 loc) 1.67 kB
var path = require('path'); var util = require('util'); var https = require('https'); var pack = require(path.resolve(__dirname, '../package.json')); var postOptions = { hostname : '', path : '', method : 'POST', auth : '', headers : { 'User-Agent': 'librato-express/'+ pack.version, 'Content-Type': 'application/json', 'Content-Length': null } }; function Transport ( opt ) { this.silent = opt.silent || true; postOptions.hostname = 'metrics-api.librato.com'; postOptions.path = '/v1/metrics'; postOptions.auth = opt.email +':'+ opt.token; } module.exports = Transport; // Special function to reduce garbage collection Transport.prototype.postMetrics = function (metric, cb) { httpsRequest.call(this, postOptions, metric, cb) }; Transport.prototype.deleteMetrics = function (data, cb) { var options = util._extend({}, postOptions); options.method = 'DELETE'; httpsRequest.call(this, options, data, cb) }; Transport.prototype.postAnnotation = function (stream, data, cb) { var options = util._extend({}, postOptions); options.path = '/v1/annotations/' + stream; httpsRequest.call(this, options, data, cb); }; function httpsRequest (options, data, cb) { var silent = this.silent; var obj = JSON.stringify(data); options.headers['Content-Length'] = Buffer.byteLength(obj); var req = https.request(options, function (res) { if (!cb) return; if ( silent ) cb(); else if ( res.statusCode > 399 ) cb( res.headers ); else cb(); }); req.write(obj); req.end(); }