module NewRelic::Agent::Instrumentation::Memcache

Constants

METHODS

Public Instance Methods

enabled?() click to toggle source
# File lib/new_relic/agent/instrumentation/memcache.rb, line 19
def enabled?
  !::NewRelic::Agent.config[:disable_memcache_instrumentation]
end
instrument_methods(client_class, requested_methods = METHODS) click to toggle source
# File lib/new_relic/agent/instrumentation/memcache.rb, line 32
def instrument_methods(client_class, requested_methods = METHODS)
  supported_methods_for(client_class, requested_methods).each do |method_name|

    visibility = NewRelic::Helper.instance_method_visibility client_class, method_name
    method_name_without = :"#{method_name}_without_newrelic_trace"

    client_class.class_eval do
      alias_method method_name_without, method_name

      define_method method_name do |*args, &block|
        metrics = Datastores::MetricHelper.metrics_for("Memcached", method_name)

        NewRelic::Agent::MethodTracer.trace_execution_scoped(metrics) do
          t0 = Time.now
          begin
            send method_name_without, *args, &block
          ensure
            if NewRelic::Agent.config[:capture_memcache_keys]
              NewRelic::Agent.instance.transaction_sampler.notice_nosql(args.first.inspect, (Time.now - t0).to_f) rescue nil
            end
          end
        end
      end

      send visibility, method_name
      send visibility, method_name_without
    end
  end
end
supported_methods_for(client_class, methods) click to toggle source
# File lib/new_relic/agent/instrumentation/memcache.rb, line 26
def supported_methods_for(client_class, methods)
  methods.select do |method_name|
    client_class.method_defined?(method_name) || client_class.private_method_defined?(method_name)
  end
end