mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-30 10:56:53 -05:00
44 lines
No EOL
1.2 KiB
CoffeeScript
44 lines
No EOL
1.2 KiB
CoffeeScript
fs = require 'fs'
|
|
path = require 'path'
|
|
config = require '../../server_config'
|
|
StatsD = require 'node-statsd'
|
|
|
|
if config.statsd
|
|
realClient = new StatsD(config.statsd)
|
|
else
|
|
mock = new StatsD(mock: true)
|
|
|
|
exports.client = realClient or mock
|
|
exports.middleware = (req, res, next) ->
|
|
|
|
req.statsd = exports.client
|
|
if realClient
|
|
time = process.hrtime();
|
|
cleanup = ->
|
|
res.removeListener 'finish', recordMetrics
|
|
res.removeListener 'error', cleanup
|
|
res.removeListener 'close', cleanup
|
|
|
|
recordMetrics = ->
|
|
diff = process.hrtime(time);
|
|
ms = (diff[0] * 1000 + diff[1] / 1e6);
|
|
path = req.route?.path or '/*'
|
|
stat = req.method + "." + path.replace /[^A-Za-z0-9]+/g, '_'
|
|
realClient.timing stat, ms
|
|
name = req.user?._id
|
|
realClient.unique 'users', name if name
|
|
|
|
res.once 'finish', recordMetrics
|
|
res.once 'error', cleanup
|
|
res.once 'close', cleanup
|
|
else
|
|
req.statsd = mock
|
|
|
|
next() unless not next
|
|
|
|
exports.trace = (name, callback) ->
|
|
return callback unless realClient
|
|
time = process.hrtime()
|
|
(args...) ->
|
|
realClient.timing name.replace(/[^A-Za-z0-9]+/g, '_'), ms
|
|
return callback.apply(this, args) |