Sha256: 67dcbfa0903cd0fa0ca20bf3cdf34c8d139cb56694250700d9be979306a670bf

Contents?: true

Size: 1.93 KB

Versions: 9

Compression:

Stored size: 1.93 KB

Contents

# encoding: utf-8



TingYun::Support::LibraryDetection.defer do
  named :redis

  depends_on do
    defined?(::Redis)
  end


  executes do
    TingYun::Agent.logger.info 'Installing Redis Instrumentation'
    require 'ting_yun/agent/transaction/transaction_state'
  end

  executes do
    require 'ting_yun/agent/datastore'

    ::Redis::Client.class_eval do

      def record_redis_duration(_1, _2, duration)
        state = TingYun::Agent::TransactionState.tl_get
        unless state.nil?
          state.rds_duration += duration * 1000
        end
      end

      call_method = ::Redis::Client.new.respond_to?(:call) ? :call : :raw_call_command

      def call_with_tingyun_trace(*args, &blk)
        operation = args[0].is_a?(Array) ? args[0][0] : args[0]

        TingYun::Agent::Datastore.wrap("Redis", operation, nil, method(:record_redis_duration)) do
          call_without_tingyun_trace(*args, &blk)
        end
      end

      alias_method :call_without_tingyun_trace, call_method
      alias_method call_method, :call_with_tingyun_trace


      if public_method_defined? :call_pipelined
        def call_pipelined_with_tingyun_trace(*args, &block)
          pipeline = args[0]
          operation = pipeline.is_a?(::Redis::Pipeline::Multi) ? 'multi' : 'pipeline'

          TingYun::Agent::Datastore.wrap("Redis", operation, nil, method(:record_redis_duration)) do
            call_pipelined_without_tingyun_trace(*args, &block)
          end
        end

        alias_method :call_pipelined_without_tingyun_trace, :call_pipelined
        alias_method :call_pipelined, :call_pipelined_with_tingyun_trace
      end

      if public_method_defined? :connect

        alias_method :connect_without_tingyun, :connect

        def connect(*args, &block)
          TingYun::Agent::Datastore.wrap("Redis", "connect", nil, method(:record_redis_duration)) do
            connect_without_tingyun(*args, &block)
          end
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
tingyun_rpm-1.1.4.2 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.1.4.1 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.1.4 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.1.3 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.1.2 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.1.1 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.1.0 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.0.7 lib/ting_yun/instrumentation/redis.rb
tingyun_rpm-1.0.6 lib/ting_yun/instrumentation/redis.rb