UNPKG

apminsight

Version:

monitor nodejs applications

94 lines (86 loc) 3.01 kB
// supported upto v2.2.2 var wrapper = require("./../wrapper"); var logger = require("./../../util/logger"); var utils = require("./../../util/utils"); var componentName = "MEMCACHED"; var moduleInfo = { functions: [ { functionName: "prototype.command", component: componentName, wrapper: wrapCommand } ] }; function wrapCommand(actual) { return function (getCommandInfo) { try { var curTracker; var parentTracker = apmInsightAgentInstance.getCurTracker(); if (getCommandInfo && utils.isFunction(getCommandInfo)) { var commandInfo = getCommandInfo(); if (isCommandInfoValid(commandInfo)) { var trackerName = componentName + " - " + commandInfo.type + " - " + commandInfo.key; var trackerInfo = { trackerName: trackerName, component: componentName, parent: parentTracker }; curTracker = apmInsightAgentInstance.createTracker(trackerInfo); commandInfo.callback = wrapper.wrapCallBack( commandInfo.callback, curTracker, apmInsightAgentInstance.getCurTxn() ); arguments[0] = function () { return commandInfo; }; extractMachineInfo(curTracker, this, commandInfo); } } var result = actual.apply(this, arguments); return result; } catch (e) { logger.error("memcache command handler", e); apmInsightAgentInstance.handleErrorTracker(curTracker, e); throw e; } finally { apmInsightAgentInstance.setCurTracker(parentTracker); } }; } function extractMachineInfo(curTracker, invoker, commandInfo) { if (curTracker && invoker) { var machineInfo; if (invoker.servers && typeof invoker.servers === "string") { machineInfo = invoker.servers.split(":"); } else if ( invoker.HashRing && invoker.HashRing.get && invoker.HashRing.get(commandInfo.key) ) { machineInfo = invoker.HashRing.get(commandInfo.key).split(":"); } if (machineInfo && machineInfo.length === 2) { var info = {}; info.host = machineInfo[0]; info.port = machineInfo[1]; curTracker.updateInfo(info); } } } function isCommandInfoValid(commandInfo) { return ( commandInfo && commandInfo.type && commandInfo.key && utils.isFunction(commandInfo.callback) ); } module.exports = moduleInfo;