UNPKG

apminsight

Version:

monitor nodejs applications

158 lines (145 loc) 4.86 kB
var constants = require("./../../constants"); var utils = require("./../../util/utils"); var logger = require("./../../util/logger"); var componentName = "MSSQL"; var moduleInfo = { functions: [ { functionName: "connect", component: componentName, extractInfo: getHost }, { functionName: "ConnectionPool.prototype.connect", component: componentName, extractInfo: getRemoteHost }, { functionName: [ "Request.prototype.query", "Request.prototype.batch" ], component: componentName, extractInfo: getQuery, trackerType: constants.dbTracker }, { functionName: "Request.prototype.execute", component: componentName, extractInfo: getQueryFromProcedure, trackerType: constants.dbTracker }, { functionName: "Request.prototype.bulk", component: componentName }, { functionName: [ "Transaction.prototype.begin", "Transaction.prototype.commit", "Transaction.prototype.rollback" ], component: componentName }, { functionName: [ "PreparedStatement.prototype.prepare", "PreparedStatement.prototype.execute", "PreparedStatement.prototype.unprepare" ], component: componentName } ] }; function getQuery(invoker, params, returnObj, tracker, asynOpnInfo) { getRemoteHost(invoker, params, returnObj, tracker); let th; let isSqlCaptureEnabled = apmInsightAgentInstance.getConfig().isDataExporterEnabled(); if (!isSqlCaptureEnabled) { let txn = asynOpnInfo && asynOpnInfo.curTxn; const threshold = txn ? utils.getGenericThreshold(txn.getUrl()) : apmInsightAgentInstance.getThreshold(); isSqlCaptureEnabled = threshold.isSqlCaptureEnabled(); } var info = {}; if (isSqlCaptureEnabled && params && params.length > 0) { var queryInfo = params[0]; if (typeof queryInfo === "string") { info.query = queryInfo; } else if (typeof queryInfo === "object") { info.query = queryInfo.sql; } } tracker.updateInfo(info); } function getRemoteHost(invoker, params, returnObj, tracker) { if (!invoker) { return; } var info = {}; var sourceObj = invoker.parent || invoker; if (sourceObj && sourceObj.config) { var config = sourceObj.config; if (!utils.isNonEmptyString(config.server)) { return; } info.host = config.server; info.port = utils.isPositiveNumber(config.port) ? config.port : 1433; } tracker.updateInfo(info); } function getHost(invoker, params, returnObj, tracker) { if (!params) { return; } var info = {}; if (utils.isEmpty(params[0]) || !utils.isNonEmptyString(params[0].server)) { return; } info.host = params[0].server; info.port = utils.isPositiveNumber(params[0].port) ? params[0].port : 1433; tracker.updateInfo(info); } function getQueryFromProcedure(invoker, params, returnObj, tracker) { getRemoteHost(invoker, params, returnObj, tracker); if (!params) { return; } var info = {}; try { if (params && utils.isNonEmptyString(params[0])) { info.opn = "EXECUTE"; info.object = params[0]; var executeQuery = "exec " + params[0]; var invokParam = invoker.parameters; if (invokParam) { Object.keys(invokParam).forEach(function (eachParam) { var eachParamMetric = invokParam[eachParam]; if (utils.isTypeNumber(eachParamMetric.value)) { executeQuery += " @" + eachParamMetric.name + " = " + eachParamMetric.value + " , "; } else { executeQuery += " @" + eachParamMetric.name + " = '" + eachParamMetric.value + "' , "; } }); executeQuery = executeQuery.replace(/,\s*$/, ""); } info.query = executeQuery; } } catch (err) { logger.error( "Exception occured while capturing stored procedure call", err ); } tracker.updateInfo(info); } module.exports = moduleInfo;