class Metrician::Memcache

Constants

CACHE_METRIC
METHODS

Public Class Methods

dalli_gem?() click to toggle source
# File lib/metrician/reporters/memcache.rb, line 11
def self.dalli_gem?
  !!defined?(::Dalli) && !!defined?(::Dalli::Client)
end
enabled?() click to toggle source
# File lib/metrician/reporters/memcache.rb, line 22
def self.enabled?
  (memcached_gem? || dalli_gem?) &&
    Metrician.configuration[:cache][:enabled]
end
memcached_gem?() click to toggle source
# File lib/metrician/reporters/memcache.rb, line 7
def self.memcached_gem?
  !!defined?(::Memcached)
end

Public Instance Methods

client_classes() click to toggle source
# File lib/metrician/reporters/memcache.rb, line 15
def client_classes
  classes = []
  classes << Memcached if self.class.memcached_gem?
  classes << Dalli::Client if self.class.dalli_gem?
  classes
end
instrument() click to toggle source
# File lib/metrician/reporters/memcache.rb, line 27
def instrument
  client_classes.each do |client_class|
    instrument_class(client_class)
  end
end
instrument_class(client_class) click to toggle source
# File lib/metrician/reporters/memcache.rb, line 33
    def instrument_class(client_class)
      return if client_class.method_defined?(:get_with_metrician_time)
      METHODS.each do |method_name|
        next unless client_class.method_defined?(method_name)
        client_class.class_eval <<-RUBY
          def #{method_name}_with_metrician_time(*args, &blk)
            start_time = Time.now
            begin
              #{method_name}_without_metrician_time(*args, &blk)
            ensure
              duration = (Time.now - start_time).to_f
              Metrician.gauge(::Metrician::Memcache::CACHE_METRIC, duration) if Metrician.configuration[:cache][:command][:enabled]
              Metrician.gauge("#{::Metrician::Memcache::CACHE_METRIC}.#{method_name}", duration) if Metrician.configuration[:cache][:command_specific][:enabled]
            end
          end
          alias #{method_name}_without_metrician_time #{method_name}
          alias #{method_name} #{method_name}_with_metrician_time
        RUBY
      end
    end