2014-05-06 11:52:03 -04:00
|
|
|
_ = require("underscore")
|
|
|
|
|
|
|
|
module.exports =
|
|
|
|
monitor: (mongodb_require_path, logger) ->
|
|
|
|
Db = require("#{mongodb_require_path}/lib/mongodb/db").Db
|
|
|
|
|
|
|
|
Metrics = require("./metrics")
|
|
|
|
|
|
|
|
monitorMethod = (base, method, type) ->
|
|
|
|
_method = base[method]
|
|
|
|
|
|
|
|
base[method] = (db_command, options, callback) ->
|
|
|
|
if (typeof callback == 'undefined')
|
|
|
|
callback = options
|
|
|
|
options = {}
|
|
|
|
callback = () ->
|
|
|
|
|
2014-05-06 12:19:04 -04:00
|
|
|
collection = db_command.collectionName
|
|
|
|
if collection.match(/\$cmd$/)
|
|
|
|
# Ignore noisy command methods like authenticating, ismaster and ping
|
2014-05-06 12:01:41 -04:00
|
|
|
return _method.call this, db_command, options, callback
|
|
|
|
|
2014-05-07 06:50:09 -04:00
|
|
|
key = "mongo-requests.#{collection}.#{type}"
|
2014-05-06 11:52:03 -04:00
|
|
|
if db_command.query?
|
|
|
|
query = Object.keys(db_command.query).sort().join("_")
|
|
|
|
key += "." + query
|
|
|
|
|
|
|
|
timer = new Metrics.Timer(key)
|
|
|
|
start = new Date()
|
|
|
|
_method.call this, db_command, options, () ->
|
|
|
|
timer.done()
|
|
|
|
time = new Date() - start
|
|
|
|
logger.log
|
|
|
|
query: db_command.query
|
2014-05-13 10:24:23 -04:00
|
|
|
query_type: type
|
2014-05-06 12:19:04 -04:00
|
|
|
collection: collection
|
2014-05-06 11:52:03 -04:00
|
|
|
"response-time": new Date() - start
|
|
|
|
"mongo request"
|
|
|
|
callback.apply this, arguments
|
|
|
|
|
|
|
|
monitorMethod(Db.prototype, "_executeQueryCommand", "query")
|
|
|
|
monitorMethod(Db.prototype, "_executeRemoveCommand", "remove")
|
|
|
|
monitorMethod(Db.prototype, "_executeInsertCommand", "insert")
|
|
|
|
monitorMethod(Db.prototype, "_executeUpdateCommand", "update")
|