return tracer.segmentProxy(function wrapped() { if (!tracer.getTransaction() || arguments.length < 1) { logger.trace("Not tracing Redis command due to no transaction state."); return send_command.apply(this, arguments); } var transaction = tracer.getTransaction() , args = tracer.slice(arguments) , name = REDIS.OPERATION + (args[0] || 'unknown') , segment = tracer.addSegment(name, recordRedis) , position = args.length - 1 , keys = args[1] , last = args[position] ; if (agent.config.capture_params && keys && typeof keys !== 'function' && agent.config.ignored_params.indexOf('key') === -1) { segment.parameters.key = JSON.stringify([keys[0]]); var stack = ( new Error() ).stack; segment.parameters.backtrace = stackUtil.formatStack( stack ); } logger.trace("Adding Redis command trace segment transaction %d.", transaction.id); // capture connection info for datastore instance metric segment.port = this.port; segment.host = this.host; function finalize(target) { return function cls_finalize() { var returned = target.apply(this, arguments); segment.end(); logger.trace("Redis command trace segment ended for transaction %d.", transaction.id); return returned; }; } if (typeof last === 'function') { args[position] = tracer.callbackProxy(finalize(last)); } else if (Array.isArray(last) && typeof last[last.length - 1] === 'function') { var callback = finalize(last[last.length - 1]); last[last.length - 1] = tracer.callbackProxy(callback); } else { // let's shove a callback in there for fun args.push(function cb_push() { segment.end(); logger.trace("Redis command trace segment ended for transaction %d.", transaction.id); }); } return send_command.apply(this, args); });
var proxied = tracer.transactionProxy( function wrapService() { var transaction = tracer.getTransaction(); if (!transaction) return original.apply(this, arguments); // Mark it as a web transaction: transaction.url = THRIFT.PREFIX + '/' + k; transaction.verb = THRIFT.PREFIX; transaction.partialName = THRIFT.PREFIX + '/' + k; transaction.name = NAMES.WEB + '/' + transaction.partialName; var segment = tracer.addSegment( THRIFT.PREFIX + k, recordThrift ); var stack = (new Error()).stack; segment.parameters.backtrace = stackUtil.formatStack( stack ); var result = original.apply( null, arguments ); //segment.markAsWeb('thrift' + k); transaction.end(); segment.end(); return result; } );