diff --git a/README.md b/README.md index 1c3d42c..883f7ad 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,9 @@ Add middleware immediately before your router. All options are optional. + * `dogstatsd` node-dogstatsd client. `default = new (require("node-dogstatsd")).StatsD()` +* `datadogOptions` *object* configuration for the node-dogstatds client(if you don't pass one yourself). `default = {}` * `stat` *string* name for the stat. `default = "node.express.router"` * `tags` *array* of tags to be added to the histogram. `default = []` * `path` *boolean* include path tag. `default = false` diff --git a/lib/index.js b/lib/index.js index dd47dbf..0423f11 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,53 +1,58 @@ -var DD = require("node-dogstatsd").StatsD; - -module.exports = function (options) { - var datadog = options.dogstatsd || new DD(); - var stat = options.stat || "node.express.router"; - var tags = options.tags || []; - var path = options.path || false; - var base_url = options.base_url || false; - var response_code = options.response_code || false; - - return function (req, res, next) { - if (!req._startTime) { - req._startTime = new Date(); - } - - var end = res.end; - res.end = function (chunk, encoding) { - res.end = end; - res.end(chunk, encoding); - - if (!req.route || !req.route.path) { - return; - } - - var baseUrl = (base_url !== false) ? req.baseUrl : ''; - var statTags = [ +var DD = require("node-dogstatsd") + .StatsD; + +module.exports = function(options) { + var datadogOptions = options.datadogOptions; + var datadog = options.dogstatsd || new DD(datadogOptions); + var stat = options.stat || "node.express.router"; + var tags = options.tags || []; + var path = options.path || false; + var base_url = options.base_url || false; + var response_code = options.response_code || false; + + return function(req, res, next) { + if (!req._startTime) { + req._startTime = new Date(); + } + + var end = res.end; + res.end = function(chunk, encoding) { + res.end = end; + res.end(chunk, encoding); + + if (!req.route || !req.route.path) { + return; + } + + var baseUrl = (base_url !== false) ? req.baseUrl : ''; + var statTags = [ "route:" + baseUrl + req.route.path ].concat(tags); - if (options.method) { - statTags.push("method:" + req.method.toLowerCase()); - } + if (options.method) { + statTags.push("method:" + req.method.toLowerCase()); + } - if (options.protocol && req.protocol) { - statTags.push("protocol:" + req.protocol); - } + if (options.protocol && req.protocol) { + statTags.push("protocol:" + req.protocol); + } - if (path !== false) { - statTags.push("path:" + baseUrl + req.path); - } + if (path !== false) { + statTags.push("path:" + baseUrl + req.path); + } - if (response_code) { - statTags.push("response_code:" + res.statusCode); - datadog.increment(stat + '.response_code.' + res.statusCode , 1, statTags); - datadog.increment(stat + '.response_code.all' , 1, statTags); - } + if (response_code) { + statTags.push("response_code:" + res.statusCode); + datadog.increment(stat + '.response_code.' + res.statusCode, + 1, statTags); + datadog.increment(stat + '.response_code.all', 1, + statTags); + } - datadog.histogram(stat + '.response_time', (new Date() - req._startTime), 1, statTags); - }; + datadog.histogram(stat + '.response_time', (new Date() - + req._startTime), 1, statTags); + }; - next(); - }; + next(); + }; };