newrelic_rpm 6.15.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +96 -22
  3. data/README.md +2 -2
  4. data/lib/new_relic/agent.rb +0 -6
  5. data/lib/new_relic/agent/autostart.rb +1 -2
  6. data/lib/new_relic/agent/configuration/default_source.rb +270 -104
  7. data/lib/new_relic/agent/configuration/manager.rb +2 -2
  8. data/lib/new_relic/agent/datastores/redis.rb +0 -4
  9. data/lib/new_relic/agent/distributed_tracing.rb +0 -66
  10. data/lib/new_relic/agent/instrumentation/active_record_notifications.rb +0 -16
  11. data/lib/new_relic/agent/instrumentation/bunny.rb +10 -152
  12. data/lib/new_relic/agent/instrumentation/bunny/chain.rb +45 -0
  13. data/lib/new_relic/agent/instrumentation/bunny/instrumentation.rb +152 -0
  14. data/lib/new_relic/agent/instrumentation/bunny/prepend.rb +35 -0
  15. data/lib/new_relic/agent/instrumentation/curb.rb +9 -241
  16. data/lib/new_relic/agent/instrumentation/curb/chain.rb +93 -0
  17. data/lib/new_relic/agent/instrumentation/curb/instrumentation.rb +222 -0
  18. data/lib/new_relic/agent/instrumentation/curb/prepend.rb +63 -0
  19. data/lib/new_relic/agent/instrumentation/delayed_job/chain.rb +38 -0
  20. data/lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb +53 -0
  21. data/lib/new_relic/agent/instrumentation/delayed_job/prepend.rb +34 -0
  22. data/lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb +8 -50
  23. data/lib/new_relic/agent/instrumentation/excon.rb +2 -1
  24. data/lib/new_relic/agent/instrumentation/grape.rb +13 -113
  25. data/lib/new_relic/agent/instrumentation/grape/chain.rb +25 -0
  26. data/lib/new_relic/agent/instrumentation/grape/instrumentation.rb +100 -0
  27. data/lib/new_relic/agent/instrumentation/grape/prepend.rb +17 -0
  28. data/lib/new_relic/agent/instrumentation/httpclient.rb +8 -30
  29. data/lib/new_relic/agent/instrumentation/httpclient/chain.rb +25 -0
  30. data/lib/new_relic/agent/instrumentation/httpclient/instrumentation.rb +38 -0
  31. data/lib/new_relic/agent/instrumentation/httpclient/prepend.rb +17 -0
  32. data/lib/new_relic/agent/instrumentation/httprb.rb +29 -0
  33. data/lib/new_relic/agent/instrumentation/httprb/chain.rb +22 -0
  34. data/lib/new_relic/agent/instrumentation/httprb/instrumentation.rb +30 -0
  35. data/lib/new_relic/agent/instrumentation/httprb/prepend.rb +15 -0
  36. data/lib/new_relic/agent/instrumentation/memcache.rb +54 -69
  37. data/lib/new_relic/agent/instrumentation/memcache/chain.rb +16 -0
  38. data/lib/new_relic/agent/instrumentation/memcache/dalli.rb +38 -121
  39. data/lib/new_relic/agent/instrumentation/memcache/helper.rb +56 -0
  40. data/lib/new_relic/agent/instrumentation/memcache/instrumentation.rb +88 -0
  41. data/lib/new_relic/agent/instrumentation/memcache/prepend.rb +88 -0
  42. data/lib/new_relic/agent/instrumentation/middleware_proxy.rb +2 -0
  43. data/lib/new_relic/agent/instrumentation/mongo.rb +7 -0
  44. data/lib/new_relic/agent/instrumentation/net_http.rb +39 -0
  45. data/lib/new_relic/agent/instrumentation/net_http/chain.rb +25 -0
  46. data/lib/new_relic/agent/instrumentation/{net_prepend.rb → net_http/instrumentation.rb} +3 -3
  47. data/lib/new_relic/agent/instrumentation/net_http/prepend.rb +21 -0
  48. data/lib/new_relic/agent/instrumentation/padrino.rb +18 -53
  49. data/lib/new_relic/agent/instrumentation/padrino/chain.rb +34 -0
  50. data/lib/new_relic/agent/instrumentation/padrino/instrumentation.rb +27 -0
  51. data/lib/new_relic/agent/instrumentation/padrino/prepend.rb +20 -0
  52. data/lib/new_relic/agent/instrumentation/rack.rb +29 -139
  53. data/lib/new_relic/agent/instrumentation/rack/chain.rb +57 -0
  54. data/lib/new_relic/agent/instrumentation/rack/helpers.rb +32 -0
  55. data/lib/new_relic/agent/instrumentation/rack/instrumentation.rb +73 -0
  56. data/lib/new_relic/agent/instrumentation/rack/prepend.rb +36 -0
  57. data/lib/new_relic/agent/instrumentation/rake.rb +13 -154
  58. data/lib/new_relic/agent/instrumentation/rake/chain.rb +25 -0
  59. data/lib/new_relic/agent/instrumentation/rake/instrumentation.rb +144 -0
  60. data/lib/new_relic/agent/instrumentation/rake/prepend.rb +14 -0
  61. data/lib/new_relic/agent/instrumentation/redis.rb +10 -109
  62. data/lib/new_relic/agent/instrumentation/redis/chain.rb +34 -0
  63. data/lib/new_relic/agent/instrumentation/redis/instrumentation.rb +65 -0
  64. data/lib/new_relic/agent/instrumentation/redis/prepend.rb +24 -0
  65. data/lib/new_relic/agent/instrumentation/resque.rb +8 -28
  66. data/lib/new_relic/agent/instrumentation/resque/chain.rb +22 -0
  67. data/lib/new_relic/agent/instrumentation/resque/instrumentation.rb +33 -0
  68. data/lib/new_relic/agent/instrumentation/resque/prepend.rb +16 -0
  69. data/lib/new_relic/agent/instrumentation/sinatra.rb +20 -158
  70. data/lib/new_relic/agent/instrumentation/sinatra/chain.rb +55 -0
  71. data/lib/new_relic/agent/instrumentation/sinatra/ignorer.rb +29 -34
  72. data/lib/new_relic/agent/instrumentation/sinatra/instrumentation.rb +118 -0
  73. data/lib/new_relic/agent/instrumentation/sinatra/prepend.rb +33 -0
  74. data/lib/new_relic/agent/instrumentation/typhoeus.rb +10 -89
  75. data/lib/new_relic/agent/instrumentation/typhoeus/chain.rb +22 -0
  76. data/lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb +82 -0
  77. data/lib/new_relic/agent/instrumentation/typhoeus/prepend.rb +14 -0
  78. data/lib/new_relic/agent/new_relic_service.rb +3 -12
  79. data/lib/new_relic/agent/sql_sampler.rb +1 -1
  80. data/lib/new_relic/agent/transaction.rb +1 -4
  81. data/lib/new_relic/control/frameworks/rails.rb +11 -9
  82. data/lib/new_relic/control/instance_methods.rb +1 -0
  83. data/lib/new_relic/dependency_detection.rb +116 -10
  84. data/lib/new_relic/noticed_error.rb +1 -5
  85. data/lib/new_relic/supportability_helper.rb +1 -2
  86. data/lib/new_relic/version.rb +2 -2
  87. data/newrelic_rpm.gemspec +1 -1
  88. metadata +53 -8
  89. data/cert/cacert.pem +0 -1177
  90. data/lib/new_relic/agent/instrumentation/http.rb +0 -49
  91. data/lib/new_relic/agent/instrumentation/net.rb +0 -70
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ module NewRelic::Agent::Instrumentation
7
+ module Memcache
8
+ module Chain
9
+ extend Helper
10
+
11
+ def self.instrument! target_class
12
+ instrument_methods target_class, client_methods
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,166 +1,83 @@
1
1
  # encoding: utf-8
2
2
  # This file is distributed under New Relic's license terms.
3
3
  # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
4
5
 
5
6
  module NewRelic
6
7
  module Agent
7
8
  module Instrumentation
8
9
  module Memcache
9
10
  module Dalli
10
- extend self
11
+ extend Helper
12
+ module_function
11
13
 
12
- MEMCACHED = "Memcached".freeze
13
- METHODS = [:get, :set, :add, :incr, :decr, :delete, :replace, :append, :prepend, :cas]
14
- SEND_MULTIGET_METRIC_NAME = "get_multi_request".freeze
15
- DATASTORE_INSTANCES_SUPPORTED_VERSION = Gem::Version.new '2.6.4'
16
- SLASH = '/'.freeze
17
- UNKNOWN = 'unknown'.freeze
18
- LOCALHOST = 'localhost'.freeze
19
-
20
- def supports_datastore_instances?
21
- DATASTORE_INSTANCES_SUPPORTED_VERSION <= Gem::Version.new(::Dalli::VERSION)
22
- end
23
-
24
- def instrument_methods
14
+ def instrument!
25
15
  if supports_datastore_instances?
26
- ::NewRelic::Agent::Instrumentation::Memcache.instrument_methods(::Dalli::Client, METHODS)
16
+ instrument_methods(::Dalli::Client, dalli_methods)
27
17
  instrument_multi_method :get_multi
28
18
  instrument_send_multiget
29
19
  instrument_server_for_key
30
20
  else
31
- ::NewRelic::Agent::Instrumentation::Memcache.instrument_methods(::Dalli::Client,
32
- ::NewRelic::Agent::Instrumentation::Memcache::METHODS)
21
+ instrument_methods(::Dalli::Client, client_methods)
22
+ end
23
+ end
24
+
25
+ def instrument_multi_method method_name
26
+ visibility = NewRelic::Helper.instance_method_visibility ::Dalli::Client, method_name
27
+ method_name_without = :"#{method_name}_without_newrelic_trace"
28
+
29
+ ::Dalli::Client.class_eval do
30
+ alias_method method_name_without, method_name
31
+
32
+ define_method method_name do |*args, &block|
33
+ get_multi_with_newrelic_tracing(method_name) { __send__ method_name_without, *args, &block }
34
+ end
35
+
36
+ __send__ visibility, method_name
37
+ __send__ visibility, method_name_without
33
38
  end
34
39
  end
35
40
 
36
41
  def instrument_server_for_key
37
42
  ::Dalli::Ring.class_eval do
43
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
44
+
38
45
  alias_method :server_for_key_without_newrelic_trace, :server_for_key
39
46
 
40
47
  def server_for_key key
41
- server = server_for_key_without_newrelic_trace key
42
- begin
43
- if txn = ::NewRelic::Agent::Tracer.current_transaction
44
- segment = txn.current_segment
45
- if ::NewRelic::Agent::Transaction::DatastoreSegment === segment
46
- ::NewRelic::Agent::Instrumentation::Memcache::Dalli.assign_instance_to(segment, server)
47
- end
48
- end
49
- rescue => e
50
- ::NewRelic::Agent.logger.warn "Unable to set instance info on datastore segment: #{e.message}"
51
- end
52
- server
48
+ server_for_key_with_newrelic_tracing { server_for_key_without_newrelic_trace key }
53
49
  end
54
50
  end
55
51
  end
56
52
 
57
53
  def instrument_send_multiget
58
54
  ::Dalli::Server.class_eval do
55
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
59
56
  alias_method :send_multiget_without_newrelic_trace, :send_multiget
60
57
 
61
- def send_multiget(keys)
62
- segment = ::NewRelic::Agent::Tracer.start_datastore_segment(
63
- product: MEMCACHED,
64
- operation: SEND_MULTIGET_METRIC_NAME
65
- )
66
- ::NewRelic::Agent::Instrumentation::Memcache::Dalli.assign_instance_to(segment, self)
67
-
68
- begin
69
- NewRelic::Agent::Tracer.capture_segment_error segment do
70
- send_multiget_without_newrelic_trace(keys)
71
- end
72
- ensure
73
- if ::NewRelic::Agent.config[:capture_memcache_keys]
74
- segment.notice_nosql_statement "#{SEND_MULTIGET_METRIC_NAME} #{keys.inspect}"
75
- end
76
- segment.finish if segment
77
- end
58
+ def send_multiget keys
59
+ send_multiget_with_newrelic_tracing(keys) { send_multiget_without_newrelic_trace keys }
78
60
  end
79
61
  end
80
62
  end
63
+ end
81
64
 
82
- def instrument_multi_method method_name
83
- visibility = NewRelic::Helper.instance_method_visibility ::Dalli::Client, method_name
84
- method_name_without = :"#{method_name}_without_newrelic_trace"
85
-
86
- ::Dalli::Client.class_eval do
87
- alias_method method_name_without, method_name
88
-
89
- define_method method_name do |*args, &block|
90
- segment = NewRelic::Agent::Tracer.start_segment name: "Ruby/Memcached/Dalli/#{method_name}"
91
- begin
92
- NewRelic::Agent::Tracer.capture_segment_error segment do
93
- __send__ method_name_without, *args, &block
94
- end
95
- ensure
96
- segment.finish if segment
97
- end
98
- end
65
+ module DalliCAS
66
+ extend Dalli
67
+ extend Helper
68
+ module_function
99
69
 
100
- __send__ visibility, method_name
101
- __send__ visibility, method_name_without
102
- end
70
+ def should_instrument?
71
+ supported_methods_for(::Dalli::Client, dalli_cas_methods).any?
103
72
  end
104
73
 
105
- def assign_instance_to segment, server
106
- host = port_path_or_id = nil
107
- if server.hostname.start_with? SLASH
108
- host = LOCALHOST
109
- port_path_or_id = server.hostname
110
- else
111
- host = server.hostname
112
- port_path_or_id = server.port
113
- end
114
- segment.set_instance_info host, port_path_or_id
115
- rescue => e
116
- ::NewRelic::Agent.logger.debug "Failed to retrieve memcached instance info: #{e.message}"
117
- segment.set_instance_info UNKNOWN, UNKNOWN
74
+ def instrument!
75
+ instrument_methods ::Dalli::Client, dalli_cas_methods
76
+ instrument_multi_method :get_multi_cas
118
77
  end
119
-
120
78
  end
121
79
  end
122
80
  end
123
81
  end
124
82
  end
125
83
 
126
- DependencyDetection.defer do
127
- named :dalli
128
-
129
- depends_on do
130
- NewRelic::Agent::Instrumentation::Memcache.enabled?
131
- end
132
-
133
- depends_on do
134
- defined?(::Dalli::Client)
135
- end
136
-
137
- executes do
138
- ::NewRelic::Agent.logger.info 'Installing Memcache instrumentation for dalli gem'
139
- ::NewRelic::Agent::Instrumentation::Memcache::Dalli.instrument_methods
140
- end
141
- end
142
-
143
- DependencyDetection.defer do
144
- named :dalli_cas_client
145
-
146
- depends_on do
147
- NewRelic::Agent::Instrumentation::Memcache.enabled?
148
- end
149
-
150
- depends_on do
151
- # These CAS client methods are only optionally defined if users require
152
- # dalli/cas/client. Use a separate dependency block so it can potentially
153
- # re-evaluate after they've done that require.
154
- defined?(::Dalli::Client) &&
155
- ::NewRelic::Agent::Instrumentation::Memcache.supported_methods_for(::Dalli::Client,
156
- CAS_CLIENT_METHODS).any?
157
- end
158
-
159
- CAS_CLIENT_METHODS = [:get_cas, :set_cas, :replace_cas, :delete_cas]
160
-
161
- executes do
162
- ::NewRelic::Agent.logger.info 'Installing Dalli CAS Client Memcache instrumentation'
163
- ::NewRelic::Agent::Instrumentation::Memcache.instrument_methods(::Dalli::Client, CAS_CLIENT_METHODS)
164
- ::NewRelic::Agent::Instrumentation::Memcache::Dalli.instrument_multi_method(:get_multi_cas)
165
- end
166
- end
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ module NewRelic::Agent::Instrumentation
7
+ module Memcache
8
+ module Helper
9
+ DATASTORE_INSTANCES_SUPPORTED_VERSION = Gem::Version.new '2.6.4'
10
+
11
+ def supports_datastore_instances?
12
+ DATASTORE_INSTANCES_SUPPORTED_VERSION <= Gem::Version.new(::Dalli::VERSION)
13
+ end
14
+
15
+ def client_methods
16
+ [:get, :get_multi, :set, :add, :incr, :decr, :delete, :replace, :append,
17
+ :prepend, :cas, :single_get, :multi_get, :single_cas, :multi_cas]
18
+ end
19
+
20
+ def dalli_methods
21
+ [:get, :set, :add, :incr, :decr, :delete, :replace, :append, :prepend, :cas]
22
+ end
23
+
24
+ def dalli_cas_methods
25
+ [:get_cas, :set_cas, :replace_cas, :delete_cas]
26
+ end
27
+
28
+ def supported_methods_for(client_class, methods)
29
+ methods.select do |method_name|
30
+ client_class.method_defined?(method_name) || client_class.private_method_defined?(method_name)
31
+ end
32
+ end
33
+
34
+ def instrument_methods(client_class, requested_methods = METHODS)
35
+ supported_methods_for(client_class, requested_methods).each do |method_name|
36
+ visibility = NewRelic::Helper.instance_method_visibility client_class, method_name
37
+ method_name_without = :"#{method_name}_without_newrelic_trace"
38
+
39
+ client_class.class_eval do
40
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
41
+
42
+ alias_method method_name_without, method_name
43
+
44
+ define_method method_name do |*args, &block|
45
+ with_newrelic_tracing(method_name, *args) { __send__ method_name_without, *args, &block }
46
+ end
47
+
48
+ __send__ visibility, method_name
49
+ __send__ visibility, method_name_without
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ module NewRelic::Agent::Instrumentation
7
+ module Memcache
8
+ module Tracer
9
+ SLASH = '/'
10
+ UNKNOWN = 'unknown'
11
+ LOCALHOST = 'localhost'
12
+ MULTIGET_METRIC_NAME = "get_multi_request"
13
+ MEMCACHED = "Memcached"
14
+
15
+ def with_newrelic_tracing operation, *args
16
+ segment = NewRelic::Agent::Tracer.start_datastore_segment \
17
+ product: MEMCACHED,
18
+ operation: operation
19
+
20
+ begin
21
+ NewRelic::Agent::Tracer.capture_segment_error(segment) { yield }
22
+ ensure
23
+ if NewRelic::Agent.config[:capture_memcache_keys]
24
+ segment.notice_nosql_statement "#{operation} #{args.first.inspect}"
25
+ end
26
+ segment.finish if segment
27
+ end
28
+ end
29
+
30
+ def server_for_key_with_newrelic_tracing
31
+ yield.tap do |server|
32
+ begin
33
+ if txn = ::NewRelic::Agent::Tracer.current_transaction
34
+ segment = txn.current_segment
35
+ if ::NewRelic::Agent::Transaction::DatastoreSegment === segment
36
+ assign_instance_to(segment, server)
37
+ end
38
+ end
39
+ rescue => e
40
+ ::NewRelic::Agent.logger.warn "Unable to set instance info on datastore segment: #{e.message}"
41
+ end
42
+ end
43
+ end
44
+
45
+ def get_multi_with_newrelic_tracing method_name
46
+ segment = NewRelic::Agent::Tracer.start_segment \
47
+ name: "Ruby/Memcached/Dalli/#{method_name}"
48
+
49
+ begin
50
+ NewRelic::Agent::Tracer.capture_segment_error(segment) { yield }
51
+ ensure
52
+ segment.finish if segment
53
+ end
54
+ end
55
+
56
+ def send_multiget_with_newrelic_tracing keys
57
+ segment = ::NewRelic::Agent::Tracer.start_datastore_segment \
58
+ product: MEMCACHED,
59
+ operation: MULTIGET_METRIC_NAME
60
+
61
+ begin
62
+ assign_instance_to(segment, self)
63
+ NewRelic::Agent::Tracer.capture_segment_error(segment) { yield }
64
+ ensure
65
+ if ::NewRelic::Agent.config[:capture_memcache_keys]
66
+ segment.notice_nosql_statement "#{MULTIGET_METRIC_NAME} #{keys.inspect}"
67
+ end
68
+ segment.finish if segment
69
+ end
70
+ end
71
+
72
+ def assign_instance_to segment, server
73
+ host = port_path_or_id = nil
74
+ if server.hostname.start_with? SLASH
75
+ host = LOCALHOST
76
+ port_path_or_id = server.hostname
77
+ else
78
+ host = server.hostname
79
+ port_path_or_id = server.port
80
+ end
81
+ segment.set_instance_info host, port_path_or_id
82
+ rescue => e
83
+ ::NewRelic::Agent.logger.debug "Failed to retrieve memcached instance info: #{e.message}"
84
+ segment.set_instance_info UNKNOWN, UNKNOWN
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ module NewRelic::Agent::Instrumentation
7
+ module Memcache
8
+ module Prepend
9
+ extend Helper
10
+ module_function
11
+
12
+ def client_prepender client_class
13
+ Module.new do
14
+ extend Helper
15
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
16
+
17
+ supported_methods_for(client_class, client_methods).each do |method_name|
18
+ define_method method_name do |*args, &block|
19
+ with_newrelic_tracing(method_name, *args) { super(*args, &block) }
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ def dalli_cas_prependers
26
+ yield ::Dalli::Client, dalli_client_prepender(dalli_cas_methods)
27
+ yield ::Dalli::Client, dalli_get_multi_prepender(:get_multi_cas)
28
+ end
29
+
30
+ def dalli_prependers
31
+ if supports_datastore_instances?
32
+ yield ::Dalli::Client, dalli_client_prepender(dalli_methods)
33
+ yield ::Dalli::Client, dalli_get_multi_prepender(:get_multi)
34
+ yield ::Dalli::Server, dalli_server_prepender
35
+ yield ::Dalli::Ring, dalli_ring_prepender
36
+ else
37
+ yield ::Dalli::Client, dalli_client_prepender(client_methods)
38
+ end
39
+ end
40
+
41
+ def dalli_client_prepender supported_methods
42
+ Module.new do
43
+ extend Helper
44
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
45
+
46
+ supported_methods.each do |method_name|
47
+ define_method method_name do |*args, &block|
48
+ with_newrelic_tracing(method_name, *args) { super(*args, &block) }
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def dalli_get_multi_prepender method_name
55
+ Module.new do
56
+ extend Helper
57
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
58
+
59
+ define_method method_name do |*args, &block|
60
+ get_multi_with_newrelic_tracing(method_name) { super(*args, &block) }
61
+ end
62
+ end
63
+ end
64
+
65
+ def dalli_ring_prepender
66
+ Module.new do
67
+ extend Helper
68
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
69
+
70
+ def server_for_key key
71
+ server_for_key_with_newrelic_tracing { super }
72
+ end
73
+ end
74
+ end
75
+
76
+ def dalli_server_prepender
77
+ Module.new do
78
+ extend Helper
79
+ include NewRelic::Agent::Instrumentation::Memcache::Tracer
80
+
81
+ def send_multiget keys
82
+ send_multiget_with_newrelic_tracing(keys) { super }
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end