module TraceView::Inst::Memcached
Public Class Methods
included(cls)
click to toggle source
# File lib/traceview/inst/memcached.rb, line 9 def self.included(cls) TraceView.logger.info '[traceview/loading] Instrumenting memcached' if TraceView::Config[:verbose] cls.class_eval do MEMCACHE_OPS.reject { |m| !method_defined?(m) }.each do |m| define_method("#{m}_with_traceview") do |*args| opts = { :KVOp => m } if args.length && !args[0].is_a?(Array) opts[:KVKey] = args[0].to_s rhost = remote_host(args[0].to_s) opts[:RemoteHost] = rhost if rhost end TraceView::API.trace(:memcache, opts) do result = send("#{m}_without_traceview", *args) info_kvs = {} info_kvs[:KVHit] = memcache_hit?(result) if m == :get && args.length && args[0].class == String info_kvs[:Backtrace] = TraceView::API.backtrace if TraceView::Config[:memcached][:collect_backtraces] TraceView::API.log(:memcache, :info, info_kvs) unless info_kvs.empty? result end end class_eval "alias #{m}_without_traceview #{m}" class_eval "alias #{m} #{m}_with_traceview" end end end