diff options
Diffstat (limited to 'node_modules/mongodb/lib/apm.js')
-rw-r--r-- | node_modules/mongodb/lib/apm.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/node_modules/mongodb/lib/apm.js b/node_modules/mongodb/lib/apm.js new file mode 100644 index 0000000..f78e4aa --- /dev/null +++ b/node_modules/mongodb/lib/apm.js @@ -0,0 +1,31 @@ +'use strict'; +const EventEmitter = require('events').EventEmitter; + +class Instrumentation extends EventEmitter { + constructor() { + super(); + } + + instrument(MongoClient, callback) { + // store a reference to the original functions + this.$MongoClient = MongoClient; + const $prototypeConnect = (this.$prototypeConnect = MongoClient.prototype.connect); + + const instrumentation = this; + MongoClient.prototype.connect = function(callback) { + this.s.options.monitorCommands = true; + this.on('commandStarted', event => instrumentation.emit('started', event)); + this.on('commandSucceeded', event => instrumentation.emit('succeeded', event)); + this.on('commandFailed', event => instrumentation.emit('failed', event)); + return $prototypeConnect.call(this, callback); + }; + + if (typeof callback === 'function') callback(null, this); + } + + uninstrument() { + this.$MongoClient.prototype.connect = this.$prototypeConnect; + } +} + +module.exports = Instrumentation; |