You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1002 B
JavaScript
32 lines
1002 B
JavaScript
6 years ago
|
'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;
|