You can not 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
			
		
		
			
		
	
	
					32 lines
				
				1002 B
			| 
											3 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; |