Esempio n. 1
0
    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);
    });
Esempio n. 2
0
          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;
          } );