Module: NewRelic::Agent::Instrumentation::Memcache::Dalli
- Extended by:
- Helper
- Included in:
- DalliCAS
- Defined in:
- lib/new_relic/agent/instrumentation/memcache/dalli.rb
Class Method Summary
collapse
Methods included from Helper
correctly_encoded, executable_in_path?, instance_method_visibility, instance_methods_include?, rubygems_specs, run_command, time_to_millis
Class Method Details
.instrument! ⇒ Object
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/new_relic/agent/instrumentation/memcache/dalli.rb', line 14
def instrument!
if supports_datastore_instances?
instrument_methods(::Dalli::Client, dalli_methods)
instrument_multi_method(:get_multi)
instrument_send_multiget
instrument_server_for_key
else
instrument_methods(::Dalli::Client, client_methods)
end
end
|
.instrument_multi_method(method_name) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/new_relic/agent/instrumentation/memcache/dalli.rb', line 25
def instrument_multi_method(method_name)
visibility = NewRelic::Helper.instance_method_visibility(::Dalli::Client, method_name)
method_name_without = :"#{method_name}_without_newrelic_trace"
::Dalli::Client.class_eval do
alias_method(method_name_without, method_name)
define_method(method_name) do |*args, &block|
get_multi_with_newrelic_tracing(method_name) { __send__(method_name_without, *args, &block) }
end
__send__(visibility, method_name)
__send__(visibility, method_name_without)
end
end
|
.instrument_send_multiget ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/new_relic/agent/instrumentation/memcache/dalli.rb', line 53
def instrument_send_multiget
if supports_binary_protocol?
::Dalli::Protocol::Binary
else
::Dalli::Server
end.class_eval do
include NewRelic::Agent::Instrumentation::Memcache::Tracer
if Gem::Version.new(::Dalli::VERSION) >= Gem::Version.new('3.1.0')
alias_method(:pipelined_get_without_newrelic_trace, :pipelined_get)
def pipelined_get(keys)
send_multiget_with_newrelic_tracing(keys) { pipelined_get_without_newrelic_trace(keys) }
end
else
alias_method(:send_multiget_without_newrelic_trace, :send_multiget)
def send_multiget(keys)
send_multiget_with_newrelic_tracing(keys) { send_multiget_without_newrelic_trace(keys) }
end
end
end
end
|
.instrument_server_for_key ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/new_relic/agent/instrumentation/memcache/dalli.rb', line 41
def instrument_server_for_key
::Dalli::Ring.class_eval do
include NewRelic::Agent::Instrumentation::Memcache::Tracer
alias_method(:server_for_key_without_newrelic_trace, :server_for_key)
def server_for_key(key)
server_for_key_with_newrelic_tracing { server_for_key_without_newrelic_trace(key) }
end
end
end
|