newrelic-redis 1.3.2 → 1.4.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.
- data/History.txt +7 -0
- data/lib/newrelic_redis/instrumentation.rb +72 -65
- data/lib/newrelic_redis/version.rb +1 -1
- data/test/test_newrelic_redis.rb +2 -0
- metadata +71 -83
data/History.txt
CHANGED
@@ -1,87 +1,94 @@
|
|
1
1
|
require 'new_relic/agent/method_tracer'
|
2
|
-
require 'redis'
|
3
2
|
|
4
3
|
# Redis instrumentation.
|
5
4
|
# Originally contributed by Ashley Martens of ngmoco
|
6
5
|
# Rewritten, reorganized, and repackaged by Evan Phoenix
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
ENV['NEWRELIC_ENABLE'].to_s !~ /false|off|no/i
|
7
|
+
DependencyDetection.defer do
|
8
|
+
@name = :redis
|
11
9
|
|
12
|
-
|
13
|
-
::Redis
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
# Support older versions of Redis::Client that used the method
|
18
|
-
# +raw_call_command+.
|
19
|
-
|
20
|
-
call_method =
|
21
|
-
::Redis::Client.new.respond_to?(:call) ? :call : :raw_call_command
|
10
|
+
depends_on do
|
11
|
+
defined?(::Redis) &&
|
12
|
+
!NewRelic::Control.instance['disable_redis'] &&
|
13
|
+
ENV['NEWRELIC_ENABLE'].to_s !~ /false|off|no/i
|
14
|
+
end
|
22
15
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
else
|
27
|
-
total_metric = 'Database/Redis/allOther'
|
28
|
-
end
|
16
|
+
executes do
|
17
|
+
NewRelic::Agent.logger.debug 'Installing Redis Instrumentation'
|
18
|
+
end
|
29
19
|
|
30
|
-
|
31
|
-
|
20
|
+
executes do
|
21
|
+
::Redis::Client.class_eval do
|
22
|
+
# Support older versions of Redis::Client that used the method
|
23
|
+
# +raw_call_command+.
|
32
24
|
|
33
|
-
|
34
|
-
start = Time.now
|
25
|
+
call_method = ::Redis::Client.new.respond_to?(:call) ? :call : :raw_call_command
|
35
26
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
alias_method :call_without_newrelic_trace, call_method
|
46
|
-
alias_method call_method, :call_with_newrelic_trace
|
47
|
-
|
48
|
-
# Older versions of Redis handle pipelining completely differently.
|
49
|
-
# Don't bother supporting them for now.
|
50
|
-
#
|
51
|
-
if public_method_defined? :call_pipelined
|
52
|
-
def call_pipelined_with_newrelic_trace(commands, *rest)
|
53
|
-
if NewRelic::Agent::Instrumentation::MetricFrame.recording_web_transaction?
|
54
|
-
total_metric = 'Database/Redis/allWeb'
|
55
|
-
else
|
56
|
-
total_metric = 'Database/Redis/allOther'
|
57
|
-
end
|
27
|
+
def call_with_newrelic_trace(*args, &blk)
|
28
|
+
if NewRelic::Agent::Instrumentation::MetricFrame.recording_web_transaction?
|
29
|
+
total_metric = 'Database/Redis/allWeb'
|
30
|
+
else
|
31
|
+
total_metric = 'Database/Redis/allOther'
|
32
|
+
end
|
58
33
|
|
59
|
-
|
60
|
-
|
61
|
-
# metric namespace explosion.
|
34
|
+
method_name = args[0].is_a?(Array) ? args[0][0] : args[0]
|
35
|
+
metrics = ["Database/Redis/#{method_name.to_s.upcase}", total_metric]
|
62
36
|
|
63
|
-
|
37
|
+
self.class.trace_execution_scoped(metrics) do
|
38
|
+
start = Time.now
|
64
39
|
|
65
|
-
|
66
|
-
|
67
|
-
|
40
|
+
begin
|
41
|
+
call_without_newrelic_trace(*args, &blk)
|
42
|
+
ensure
|
43
|
+
s = NewRelic::Agent.instance.transaction_sampler
|
44
|
+
s.notice_nosql(args.inspect, (Time.now - start).to_f) rescue nil
|
45
|
+
end
|
46
|
+
end
|
68
47
|
end
|
69
48
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
49
|
+
alias_method :call_without_newrelic_trace, call_method
|
50
|
+
alias_method call_method, :call_with_newrelic_trace
|
51
|
+
|
52
|
+
# Older versions of Redis handle pipelining completely differently.
|
53
|
+
# Don't bother supporting them for now.
|
54
|
+
#
|
55
|
+
if public_method_defined? :call_pipelined
|
56
|
+
def call_pipelined_with_newrelic_trace(commands, *rest)
|
57
|
+
if NewRelic::Agent::Instrumentation::MetricFrame.recording_web_transaction?
|
58
|
+
total_metric = 'Database/Redis/allWeb'
|
59
|
+
else
|
60
|
+
total_metric = 'Database/Redis/allOther'
|
61
|
+
end
|
62
|
+
|
63
|
+
# Report each command as a metric under pipelined, so the user
|
64
|
+
# can at least see what all the commands were. This prevents
|
65
|
+
# metric namespace explosion.
|
66
|
+
|
67
|
+
metrics = ["Database/Redis/Pipelined", total_metric]
|
68
|
+
|
69
|
+
commands.each do |c|
|
70
|
+
name = c.kind_of?(Array) ? c[0] : c
|
71
|
+
metrics << "Database/Redis/Pipelined/#{name.to_s.upcase}"
|
72
|
+
end
|
73
|
+
|
74
|
+
self.class.trace_execution_scoped(metrics) do
|
75
|
+
start = Time.now
|
76
|
+
|
77
|
+
begin
|
78
|
+
call_pipelined_without_newrelic_trace commands, *rest
|
79
|
+
ensure
|
80
|
+
s = NewRelic::Agent.instance.transaction_sampler
|
81
|
+
s.notice_nosql(commands.inspect, (Time.now - start).to_f) rescue nil
|
82
|
+
end
|
83
|
+
end
|
78
84
|
end
|
85
|
+
|
86
|
+
alias_method :call_pipelined_without_newrelic_trace, :call_pipelined
|
87
|
+
alias_method :call_pipelined, :call_pipelined_with_newrelic_trace
|
79
88
|
end
|
80
89
|
end
|
90
|
+
end
|
81
91
|
|
92
|
+
end
|
82
93
|
|
83
|
-
alias_method :call_pipelined_without_newrelic_trace, :call_pipelined
|
84
|
-
alias_method :call_pipelined, :call_pipelined_with_newrelic_trace
|
85
|
-
end
|
86
|
-
end if load_probes
|
87
94
|
|
data/test/test_newrelic_redis.rb
CHANGED
metadata
CHANGED
@@ -1,94 +1,90 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: newrelic-redis
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 3
|
9
|
-
- 2
|
10
|
-
version: 1.3.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Evan Phoenix
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-11-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: redis
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - <
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 4
|
31
|
-
- 0
|
32
|
-
version: "4.0"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '4.0'
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: newrelic_rpm
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - <
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: newrelic_rpm
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
39
33
|
none: false
|
40
|
-
requirements:
|
34
|
+
requirements:
|
41
35
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 3
|
46
|
-
- 0
|
47
|
-
version: "3.0"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.0'
|
48
38
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: rdoc
|
52
39
|
prerelease: false
|
53
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rdoc
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
54
49
|
none: false
|
55
|
-
requirements:
|
50
|
+
requirements:
|
56
51
|
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 3
|
61
|
-
- 10
|
62
|
-
version: "3.10"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.10'
|
63
54
|
type: :development
|
64
|
-
version_requirements: *id003
|
65
|
-
- !ruby/object:Gem::Dependency
|
66
|
-
name: hoe
|
67
55
|
prerelease: false
|
68
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.10'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: hoe
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
69
65
|
none: false
|
70
|
-
requirements:
|
66
|
+
requirements:
|
71
67
|
- - ~>
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
74
|
-
segments:
|
75
|
-
- 3
|
76
|
-
- 0
|
77
|
-
version: "3.0"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.0'
|
78
70
|
type: :development
|
79
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.0'
|
80
78
|
description: Redis instrumentation for Newrelic.
|
81
|
-
email:
|
79
|
+
email:
|
82
80
|
- evan@phx.io
|
83
81
|
executables: []
|
84
|
-
|
85
82
|
extensions: []
|
86
|
-
|
87
|
-
extra_rdoc_files:
|
83
|
+
extra_rdoc_files:
|
88
84
|
- History.txt
|
89
85
|
- Manifest.txt
|
90
86
|
- README.txt
|
91
|
-
files:
|
87
|
+
files:
|
92
88
|
- .autotest
|
93
89
|
- History.txt
|
94
90
|
- Manifest.txt
|
@@ -103,37 +99,29 @@ files:
|
|
103
99
|
- .gemtest
|
104
100
|
homepage: http://github.com/evanphx/newrelic-redis
|
105
101
|
licenses: []
|
106
|
-
|
107
102
|
post_install_message:
|
108
|
-
rdoc_options:
|
103
|
+
rdoc_options:
|
109
104
|
- --main
|
110
105
|
- README.txt
|
111
|
-
require_paths:
|
106
|
+
require_paths:
|
112
107
|
- lib
|
113
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
109
|
none: false
|
115
|
-
requirements:
|
116
|
-
- -
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
|
119
|
-
|
120
|
-
- 0
|
121
|
-
version: "0"
|
122
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
115
|
none: false
|
124
|
-
requirements:
|
125
|
-
- -
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
|
128
|
-
segments:
|
129
|
-
- 0
|
130
|
-
version: "0"
|
116
|
+
requirements:
|
117
|
+
- - ! '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
131
120
|
requirements: []
|
132
|
-
|
133
121
|
rubyforge_project: newrelic-redis
|
134
|
-
rubygems_version: 1.8.
|
122
|
+
rubygems_version: 1.8.24
|
135
123
|
signing_key:
|
136
124
|
specification_version: 3
|
137
125
|
summary: Redis instrumentation for Newrelic.
|
138
|
-
test_files:
|
126
|
+
test_files:
|
139
127
|
- test/test_newrelic_redis.rb
|