| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /*
- * decaffeinate suggestions:
- * DS102: Remove unnecessary code created because of implicit returns
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- module.exports = {
- monitor(mongodb_require_path, logger) {
- let mongodb, mongodbCore;
- try {
- // for the v1 driver the methods to wrap are in the mongodb
- // module in lib/mongodb/db.js
- mongodb = require(`${mongodb_require_path}`);
- } catch (error) {}
- try {
- // for the v2 driver the relevant methods are in the mongodb-core
- // module in lib/topologies/{server,replset,mongos}.js
- const v2_path = mongodb_require_path.replace(/\/mongodb$/, '/mongodb-core');
- mongodbCore = require(v2_path);
- } catch (error1) {}
- const Metrics = require("./index");
- const monitorMethod = function(base, method, type) {
- let _method;
- if (base == null) { return; }
- if ((_method = base[method]) == null) { return; }
- const arglen = _method.length;
- const mongo_driver_v1_wrapper = function(db_command, options, callback) {
- let query;
- if (typeof callback === 'undefined') {
- callback = options;
- options = {};
- }
- const collection = db_command.collectionName;
- if (collection.match(/\$cmd$/)) {
- // Ignore noisy command methods like authenticating, ismaster and ping
- return _method.call(this, db_command, options, callback);
- }
- let key = `mongo-requests.${collection}.${type}`;
- if (db_command.query != null) {
- query = Object.keys(db_command.query).sort().join("_");
- key += "." + query;
- }
- const timer = new Metrics.Timer("mongo", {collection, query});
- const start = new Date();
- return _method.call(this, db_command, options, function() {
- timer.done();
- const time = new Date() - start;
- logger.log({
- query: db_command.query,
- query_type: type,
- collection,
- "response-time": new Date() - start
- },
- "mongo request");
- return callback.apply(this, arguments);
- });
- };
- const mongo_driver_v2_wrapper = function(ns, ops, options, callback) {
- let query;
- if (typeof callback === 'undefined') {
- callback = options;
- options = {};
- }
- if (ns.match(/\$cmd$/)) {
- // Ignore noisy command methods like authenticating, ismaster and ping
- return _method.call(this, ns, ops, options, callback);
- }
- let key = `mongo-requests.${ns}.${type}`;
- if (ops[0].q != null) { // ops[0].q
- query = Object.keys(ops[0].q).sort().join("_");
- key += "." + query;
- }
- const timer = new Metrics.Timer(key);
- const start = new Date();
- return _method.call(this, ns, ops, options, function() {
- timer.done();
- const time = new Date() - start;
- logger.log({
- query: ops[0].q,
- query_type: type,
- collection: ns,
- "response-time": new Date() - start
- },
- "mongo request");
- return callback.apply(this, arguments);
- });
- };
- if (arglen === 3) {
- return base[method] = mongo_driver_v1_wrapper;
- } else if (arglen === 4) {
- return base[method] = mongo_driver_v2_wrapper;
- }
- };
- monitorMethod(mongodb != null ? mongodb.Db.prototype : undefined, "_executeQueryCommand", "query");
- monitorMethod(mongodb != null ? mongodb.Db.prototype : undefined, "_executeRemoveCommand", "remove");
- monitorMethod(mongodb != null ? mongodb.Db.prototype : undefined, "_executeInsertCommand", "insert");
- monitorMethod(mongodb != null ? mongodb.Db.prototype : undefined, "_executeUpdateCommand", "update");
- monitorMethod(mongodbCore != null ? mongodbCore.Server.prototype : undefined, "command", "command");
- monitorMethod(mongodbCore != null ? mongodbCore.Server.prototype : undefined, "remove", "remove");
- monitorMethod(mongodbCore != null ? mongodbCore.Server.prototype : undefined, "insert", "insert");
- monitorMethod(mongodbCore != null ? mongodbCore.Server.prototype : undefined, "update", "update");
- monitorMethod(mongodbCore != null ? mongodbCore.ReplSet.prototype : undefined, "command", "command");
- monitorMethod(mongodbCore != null ? mongodbCore.ReplSet.prototype : undefined, "remove", "remove");
- monitorMethod(mongodbCore != null ? mongodbCore.ReplSet.prototype : undefined, "insert", "insert");
- monitorMethod(mongodbCore != null ? mongodbCore.ReplSet.prototype : undefined, "update", "update");
- monitorMethod(mongodbCore != null ? mongodbCore.Mongos.prototype : undefined, "command", "command");
- monitorMethod(mongodbCore != null ? mongodbCore.Mongos.prototype : undefined, "remove", "remove");
- monitorMethod(mongodbCore != null ? mongodbCore.Mongos.prototype : undefined, "insert", "insert");
- return monitorMethod(mongodbCore != null ? mongodbCore.Mongos.prototype : undefined, "update", "update");
- }
- };
|