oboe 2.6.6.1 → 2.6.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -0
- data/Appraisals +6 -16
- data/CHANGELOG.md +30 -14
- data/Gemfile +4 -3
- data/Gemfile.lock +20 -25
- data/Rakefile +5 -1
- data/ext/oboe_metal/extconf.rb +2 -2
- data/gemfiles/mongo.gemfile +33 -0
- data/gemfiles/moped.gemfile +33 -0
- data/lib/base.rb +28 -10
- data/lib/joboe_metal.rb +12 -34
- data/lib/method_profiling.rb +3 -3
- data/lib/oboe/api/layerinit.rb +14 -14
- data/lib/oboe/api/logging.rb +11 -11
- data/lib/oboe/api/profiling.rb +7 -6
- data/lib/oboe/api/tracing.rb +3 -3
- data/lib/oboe/api/util.rb +4 -4
- data/lib/oboe/config.rb +7 -7
- data/lib/oboe/frameworks/padrino.rb +2 -2
- data/lib/oboe/frameworks/rails.rb +11 -11
- data/lib/oboe/frameworks/rails/inst/action_controller.rb +4 -4
- data/lib/oboe/frameworks/rails/inst/action_view.rb +2 -2
- data/lib/oboe/frameworks/rails/inst/action_view_2x.rb +1 -1
- data/lib/oboe/frameworks/rails/inst/action_view_30.rb +1 -1
- data/lib/oboe/frameworks/rails/inst/active_record.rb +1 -1
- data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql.rb +3 -3
- data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql2.rb +2 -2
- data/lib/oboe/frameworks/rails/inst/connection_adapters/postgresql.rb +1 -1
- data/lib/oboe/frameworks/rails/inst/connection_adapters/utils.rb +8 -8
- data/lib/oboe/frameworks/sinatra.rb +33 -3
- data/lib/oboe/frameworks/sinatra/templates.rb +2 -2
- data/lib/oboe/inst/cassandra.rb +19 -19
- data/lib/oboe/inst/dalli.rb +7 -7
- data/lib/oboe/inst/http.rb +5 -5
- data/lib/oboe/inst/memcache.rb +14 -14
- data/lib/oboe/inst/memcached.rb +8 -8
- data/lib/oboe/inst/mongo.rb +2 -2
- data/lib/oboe/inst/moped.rb +29 -29
- data/lib/oboe/inst/rack.rb +3 -3
- data/lib/oboe/inst/redis.rb +24 -24
- data/lib/oboe/inst/resque.rb +4 -4
- data/lib/oboe/loading.rb +6 -6
- data/lib/oboe/logger.rb +4 -4
- data/lib/oboe/version.rb +1 -1
- data/lib/oboe_metal.rb +11 -39
- data/test/frameworks/apps/grape_simple.rb +1 -1
- data/test/frameworks/apps/sinatra_simple.rb +1 -1
- data/test/frameworks/padrino_test.rb +3 -3
- data/test/frameworks/sinatra_test.rb +3 -3
- data/test/instrumentation/cassandra_test.rb +45 -45
- data/test/instrumentation/http_test.rb +6 -6
- data/test/instrumentation/mongo_test.rb +347 -345
- data/test/instrumentation/moped_test.rb +40 -40
- data/test/instrumentation/redis_hashes_test.rb +20 -20
- data/test/instrumentation/redis_keys_test.rb +19 -19
- data/test/instrumentation/redis_lists_test.rb +22 -22
- data/test/instrumentation/redis_misc_test.rb +14 -14
- data/test/instrumentation/redis_sets_test.rb +20 -20
- data/test/instrumentation/redis_sortedsets_test.rb +25 -25
- data/test/instrumentation/redis_strings_test.rb +27 -27
- data/test/instrumentation/resque_test.rb +7 -7
- data/test/minitest_helper.rb +18 -6
- data/test/profiling/method_test.rb +24 -24
- data/test/support/liboboe_settings_test.rb +3 -3
- data/test/support/xtrace_test.rb +2 -2
- metadata +26 -32
- data/gemfiles/rails2.3.gemfile +0 -18
- data/gemfiles/rails2.3.gemfile.lock +0 -95
- data/gemfiles/rails3.0.gemfile +0 -18
- data/gemfiles/rails3.0.gemfile.lock +0 -142
- data/gemfiles/rails3.1.gemfile +0 -18
- data/gemfiles/rails3.1.gemfile.lock +0 -152
- data/gemfiles/rails3.2.gemfile +0 -18
- data/gemfiles/rails3.2.gemfile.lock +0 -150
data/lib/oboe/inst/http.rb
CHANGED
@@ -7,8 +7,8 @@ if Oboe::Config[:nethttp][:enabled]
|
|
7
7
|
|
8
8
|
Net::HTTP.class_eval do
|
9
9
|
def request_with_oboe(*args, &block)
|
10
|
-
unless started?
|
11
|
-
return request_without_oboe(*args, &block)
|
10
|
+
unless started?
|
11
|
+
return request_without_oboe(*args, &block)
|
12
12
|
end
|
13
13
|
|
14
14
|
# Avoid cross host tracing for blacklisted domains
|
@@ -43,7 +43,7 @@ if Oboe::Config[:nethttp][:enabled]
|
|
43
43
|
xtrace = resp.get_fields('X-Trace')
|
44
44
|
xtrace = xtrace[0] if xtrace and xtrace.is_a?(Array)
|
45
45
|
|
46
|
-
if Oboe::XTrace.valid?(xtrace) and Oboe.tracing?
|
46
|
+
if Oboe::XTrace.valid?(xtrace) and Oboe.tracing?
|
47
47
|
|
48
48
|
# Assure that we received back a valid X-Trace with the same task_id
|
49
49
|
if task_id == Oboe::XTrace.task_id(xtrace)
|
@@ -53,9 +53,9 @@ if Oboe::Config[:nethttp][:enabled]
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
opts['HTTPStatus'] = resp.code
|
58
|
-
|
58
|
+
|
59
59
|
next resp
|
60
60
|
ensure
|
61
61
|
# Log the info event with the KVs in opts
|
data/lib/oboe/inst/memcache.rb
CHANGED
@@ -5,7 +5,7 @@ module Oboe
|
|
5
5
|
module Inst
|
6
6
|
module MemCache
|
7
7
|
include Oboe::API::Memcache
|
8
|
-
|
8
|
+
|
9
9
|
def self.included(cls)
|
10
10
|
Oboe.logger.info "[oboe/loading] Instrumenting memcache" if Oboe::Config[:verbose]
|
11
11
|
|
@@ -18,10 +18,10 @@ module Oboe
|
|
18
18
|
|
19
19
|
if Oboe.tracing?
|
20
20
|
Oboe::API.trace('memcache', report_kvs) do
|
21
|
-
result = send("#{m}_without_oboe", *args)
|
21
|
+
result = send("#{m}_without_oboe", *args)
|
22
22
|
end
|
23
23
|
else
|
24
|
-
result = send("#{m}_without_oboe", *args)
|
24
|
+
result = send("#{m}_without_oboe", *args)
|
25
25
|
end
|
26
26
|
result
|
27
27
|
end
|
@@ -30,7 +30,7 @@ module Oboe
|
|
30
30
|
class_eval "alias #{m} #{m}_with_oboe"
|
31
31
|
end
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
[:request_setup, :cache_get, :get_multi].each do |m|
|
35
35
|
if ::MemCache.method_defined? :request_setup
|
36
36
|
cls.class_eval "alias #{m}_without_oboe #{m}"
|
@@ -43,16 +43,16 @@ module Oboe
|
|
43
43
|
|
44
44
|
def get_multi_with_oboe(*args)
|
45
45
|
return get_multi_without_oboe(args) unless Oboe.tracing?
|
46
|
-
|
46
|
+
|
47
47
|
info_kvs = {}
|
48
|
-
|
48
|
+
|
49
49
|
begin
|
50
50
|
info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcache][:collect_backtraces]
|
51
|
-
|
51
|
+
|
52
52
|
if args.last.is_a?(Hash) || args.last.nil?
|
53
53
|
info_kvs[:KVKeyCount] = args.flatten.length - 1
|
54
54
|
else
|
55
|
-
info_kvs[:KVKeyCount] = args.flatten.length
|
55
|
+
info_kvs[:KVKeyCount] = args.flatten.length
|
56
56
|
end
|
57
57
|
rescue StandardError => e
|
58
58
|
Oboe.logger.debug "[oboe/debug] Error collecting info keys: #{e.message}"
|
@@ -61,25 +61,25 @@ module Oboe
|
|
61
61
|
|
62
62
|
Oboe::API.trace('memcache', {:KVOp => :get_multi}, :get_multi) do
|
63
63
|
values = get_multi_without_oboe(args)
|
64
|
-
|
64
|
+
|
65
65
|
info_kvs[:KVHitCount] = values.length
|
66
66
|
Oboe::API.log('memcache', 'info', info_kvs)
|
67
|
-
|
68
|
-
values
|
67
|
+
|
68
|
+
values
|
69
69
|
end
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
def request_setup_with_oboe(*args)
|
73
73
|
if Oboe.tracing? and not Oboe::Context.tracing_layer_op?(:get_multi)
|
74
74
|
server, cache_key = request_setup_without_oboe(*args)
|
75
|
-
|
75
|
+
|
76
76
|
info_kvs = { :KVKey => cache_key, :RemoteHost => server.host }
|
77
77
|
info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcache][:collect_backtraces]
|
78
78
|
Oboe::API.log('memcache', 'info', info_kvs)
|
79
79
|
|
80
80
|
[server, cache_key]
|
81
81
|
else
|
82
|
-
request_setup_without_oboe(*args)
|
82
|
+
request_setup_without_oboe(*args)
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
data/lib/oboe/inst/memcached.rb
CHANGED
@@ -5,7 +5,7 @@ module Oboe
|
|
5
5
|
module Inst
|
6
6
|
module Memcached
|
7
7
|
include Oboe::API::Memcache
|
8
|
-
|
8
|
+
|
9
9
|
def self.included(cls)
|
10
10
|
Oboe.logger.info "[oboe/loading] Instrumenting memcached" if Oboe::Config[:verbose]
|
11
11
|
|
@@ -22,11 +22,11 @@ module Oboe
|
|
22
22
|
|
23
23
|
Oboe::API.trace('memcache', opts) do
|
24
24
|
result = send("#{m}_without_oboe", *args)
|
25
|
-
|
25
|
+
|
26
26
|
info_kvs = {}
|
27
27
|
info_kvs[:KVHit] = memcache_hit?(result) if m == :get and args.length and args[0].class == String
|
28
28
|
info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcached][:collect_backtraces]
|
29
|
-
|
29
|
+
|
30
30
|
Oboe::API.log('memcache', 'info', info_kvs) unless info_kvs.empty?
|
31
31
|
result
|
32
32
|
end
|
@@ -47,7 +47,7 @@ module Oboe
|
|
47
47
|
alias get_multi_without_oboe get_multi
|
48
48
|
alias get_multi get_multi_with_oboe
|
49
49
|
elsif Oboe::Config[:verbose]
|
50
|
-
Oboe.logger.warn "[oboe/loading] Couldn't properly instrument Memcached. Partial traces may occur."
|
50
|
+
Oboe.logger.warn "[oboe/loading] Couldn't properly instrument Memcached. Partial traces may occur."
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -60,10 +60,10 @@ module Oboe
|
|
60
60
|
Oboe::API.trace('memcache', layer_kvs || {}, :get_multi) do
|
61
61
|
begin
|
62
62
|
info_kvs = {}
|
63
|
-
info_kvs[:KVKeyCount] = keys.flatten.length
|
63
|
+
info_kvs[:KVKeyCount] = keys.flatten.length
|
64
64
|
|
65
65
|
values = get_multi_without_oboe(keys, raw)
|
66
|
-
|
66
|
+
|
67
67
|
info_kvs[:KVHitCount] = values.length
|
68
68
|
info_kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:memcached][:collect_backtraces]
|
69
69
|
|
@@ -71,7 +71,7 @@ module Oboe
|
|
71
71
|
rescue
|
72
72
|
values = get_multi_without_oboe(keys, raw)
|
73
73
|
end
|
74
|
-
values
|
74
|
+
values
|
75
75
|
end
|
76
76
|
else
|
77
77
|
get_multi_without_oboe(keys, raw)
|
@@ -86,7 +86,7 @@ if defined?(::Memcached) and Oboe::Config[:memcached][:enabled]
|
|
86
86
|
::Memcached.class_eval do
|
87
87
|
include Oboe::Inst::Memcached
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
if defined?(::Memcached::Rails)
|
91
91
|
::Memcached::Rails.class_eval do
|
92
92
|
include Oboe::Inst::MemcachedRails
|
data/lib/oboe/inst/mongo.rb
CHANGED
@@ -131,8 +131,8 @@ if defined?(::Mongo) and Oboe::Config[:mongo][:enabled]
|
|
131
131
|
|
132
132
|
report_kvs[:QueryOp] = m
|
133
133
|
report_kvs[:Query] = args[0].to_json if args and not args.empty? and args[0].class == Hash
|
134
|
-
rescue
|
135
|
-
Oboe.logger.debug "[oboe/debug] Exception in oboe_collect KV collection."
|
134
|
+
rescue StandardError => e
|
135
|
+
Oboe.logger.debug "[oboe/debug] Exception in oboe_collect KV collection: #{e.inspect}"
|
136
136
|
end
|
137
137
|
report_kvs
|
138
138
|
end
|
data/lib/oboe/inst/moped.rb
CHANGED
@@ -15,7 +15,7 @@ module Oboe
|
|
15
15
|
INDEX_OPS = [ :create, :drop ]
|
16
16
|
|
17
17
|
# Moped::Query
|
18
|
-
QUERY_OPS = [ :count, :sort, :limit, :distinct, :update, :update_all, :upsert,
|
18
|
+
QUERY_OPS = [ :count, :sort, :limit, :distinct, :update, :update_all, :upsert,
|
19
19
|
:explain, :modify, :remove, :remove_all ]
|
20
20
|
|
21
21
|
# Moped::Collection
|
@@ -31,7 +31,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
31
31
|
module ::Moped
|
32
32
|
class Database
|
33
33
|
include Oboe::Inst::Moped
|
34
|
-
|
34
|
+
|
35
35
|
def extract_trace_details(op)
|
36
36
|
report_kvs = {}
|
37
37
|
begin
|
@@ -46,7 +46,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
46
46
|
end
|
47
47
|
report_kvs
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
def command_with_oboe(command)
|
51
51
|
if Oboe.tracing? and not Oboe::Context.layer_op and command.has_key?(:mapreduce)
|
52
52
|
begin
|
@@ -74,7 +74,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
74
74
|
drop_without_oboe
|
75
75
|
end
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
Oboe::Inst::Moped::DB_OPS.each do |m|
|
79
79
|
if method_defined?(m)
|
80
80
|
class_eval "alias #{m}_without_oboe #{m}"
|
@@ -88,9 +88,9 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
88
88
|
|
89
89
|
if defined?(::Moped::Indexes)
|
90
90
|
module ::Moped
|
91
|
-
class Indexes
|
91
|
+
class Indexes
|
92
92
|
include Oboe::Inst::Moped
|
93
|
-
|
93
|
+
|
94
94
|
def extract_trace_details(op)
|
95
95
|
report_kvs = {}
|
96
96
|
begin
|
@@ -105,7 +105,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
105
105
|
end
|
106
106
|
report_kvs
|
107
107
|
end
|
108
|
-
|
108
|
+
|
109
109
|
def create_with_oboe(key, options = {})
|
110
110
|
return create_without_oboe(key, options = {}) unless Oboe.tracing?
|
111
111
|
|
@@ -123,10 +123,10 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
123
123
|
create_without_oboe(key, options = {})
|
124
124
|
end
|
125
125
|
end
|
126
|
-
|
126
|
+
|
127
127
|
def drop_with_oboe(key = nil)
|
128
128
|
return drop_without_oboe(key = nil) unless Oboe.tracing?
|
129
|
-
|
129
|
+
|
130
130
|
begin
|
131
131
|
# We report :drop_indexes here to be consistent
|
132
132
|
# with other mongo implementations
|
@@ -172,10 +172,10 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
172
172
|
end
|
173
173
|
report_kvs
|
174
174
|
end
|
175
|
-
|
175
|
+
|
176
176
|
def count_with_oboe
|
177
177
|
return count_without_oboe unless Oboe.tracing?
|
178
|
-
|
178
|
+
|
179
179
|
begin
|
180
180
|
report_kvs = extract_trace_details(:count)
|
181
181
|
report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
|
@@ -190,7 +190,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
190
190
|
|
191
191
|
def sort_with_oboe(sort)
|
192
192
|
return sort_without_oboe(sort) unless Oboe.tracing?
|
193
|
-
|
193
|
+
|
194
194
|
begin
|
195
195
|
report_kvs = extract_trace_details(:sort)
|
196
196
|
report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
|
@@ -203,7 +203,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
203
203
|
sort_without_oboe(sort)
|
204
204
|
end
|
205
205
|
end
|
206
|
-
|
206
|
+
|
207
207
|
def limit_with_oboe(limit)
|
208
208
|
if Oboe.tracing? and not Oboe::Context.tracing_layer_op?(:explain)
|
209
209
|
begin
|
@@ -217,8 +217,8 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
217
217
|
Oboe::API.trace('mongo', report_kvs) do
|
218
218
|
limit_without_oboe(limit)
|
219
219
|
end
|
220
|
-
else
|
221
|
-
limit_without_oboe(limit)
|
220
|
+
else
|
221
|
+
limit_without_oboe(limit)
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
@@ -237,7 +237,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
237
237
|
distinct_without_oboe(key)
|
238
238
|
end
|
239
239
|
end
|
240
|
-
|
240
|
+
|
241
241
|
def update_with_oboe(change, flags = nil)
|
242
242
|
if Oboe.tracing? and not Oboe::Context.tracing_layer_op?([:update_all, :upsert])
|
243
243
|
begin
|
@@ -255,10 +255,10 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
255
255
|
update_without_oboe(change, flags = nil)
|
256
256
|
end
|
257
257
|
end
|
258
|
-
|
258
|
+
|
259
259
|
def update_all_with_oboe(change)
|
260
260
|
return update_all_without_oboe(change) unless Oboe.tracing?
|
261
|
-
|
261
|
+
|
262
262
|
begin
|
263
263
|
report_kvs = extract_trace_details(:update_all)
|
264
264
|
report_kvs[:Update_Document] = change.to_json
|
@@ -273,7 +273,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
273
273
|
|
274
274
|
def upsert_with_oboe(change)
|
275
275
|
return upsert_without_oboe(change) unless Oboe.tracing?
|
276
|
-
|
276
|
+
|
277
277
|
begin
|
278
278
|
report_kvs = extract_trace_details(:upsert)
|
279
279
|
report_kvs[:Query] = selector.to_json
|
@@ -289,7 +289,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
289
289
|
|
290
290
|
def explain_with_oboe
|
291
291
|
return explain_without_oboe unless Oboe.tracing?
|
292
|
-
|
292
|
+
|
293
293
|
begin
|
294
294
|
report_kvs = extract_trace_details(:explain)
|
295
295
|
report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
|
@@ -318,7 +318,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
318
318
|
modify_without_oboe(change, options)
|
319
319
|
end
|
320
320
|
end
|
321
|
-
|
321
|
+
|
322
322
|
def remove_with_oboe
|
323
323
|
return remove_without_oboe unless Oboe.tracing?
|
324
324
|
|
@@ -384,7 +384,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
384
384
|
|
385
385
|
def drop_with_oboe
|
386
386
|
return drop_without_oboe unless Oboe.tracing?
|
387
|
-
|
387
|
+
|
388
388
|
# We report :drop_collection here to be consistent
|
389
389
|
# with other mongo implementations
|
390
390
|
report_kvs = extract_trace_details(:drop_collection)
|
@@ -396,7 +396,7 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
396
396
|
|
397
397
|
def find_with_oboe(selector = {})
|
398
398
|
return find_without_oboe(selector) unless Oboe.tracing?
|
399
|
-
|
399
|
+
|
400
400
|
begin
|
401
401
|
report_kvs = extract_trace_details(:find)
|
402
402
|
report_kvs[:Query] = selector.empty? ? "all" : selector.to_json
|
@@ -408,17 +408,17 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
408
408
|
find_without_oboe(selector)
|
409
409
|
end
|
410
410
|
end
|
411
|
-
|
411
|
+
|
412
412
|
def indexes_with_oboe
|
413
413
|
return indexes_without_oboe unless Oboe.tracing?
|
414
|
-
|
414
|
+
|
415
415
|
report_kvs = extract_trace_details(:indexes)
|
416
416
|
|
417
417
|
Oboe::API.trace('mongo', report_kvs) do
|
418
418
|
indexes_without_oboe
|
419
419
|
end
|
420
420
|
end
|
421
|
-
|
421
|
+
|
422
422
|
def insert_with_oboe(documents, flags = nil)
|
423
423
|
if Oboe.tracing? and not Oboe::Context.tracing_layer_op?(:create_index)
|
424
424
|
report_kvs = extract_trace_details(:insert)
|
@@ -430,17 +430,17 @@ if defined?(::Moped) and Oboe::Config[:moped][:enabled]
|
|
430
430
|
insert_without_oboe(documents, flags)
|
431
431
|
end
|
432
432
|
end
|
433
|
-
|
433
|
+
|
434
434
|
def aggregate_with_oboe(pipeline)
|
435
435
|
return aggregate_without_oboe(pipeline) unless Oboe.tracing?
|
436
|
-
|
436
|
+
|
437
437
|
report_kvs = extract_trace_details(:aggregate)
|
438
438
|
|
439
439
|
Oboe::API.trace('mongo', report_kvs) do
|
440
440
|
aggregate_without_oboe(pipeline)
|
441
441
|
end
|
442
442
|
end
|
443
|
-
|
443
|
+
|
444
444
|
Oboe::Inst::Moped::COLLECTION_OPS.each do |m|
|
445
445
|
if method_defined?(m)
|
446
446
|
class_eval "alias #{m}_without_oboe #{m}"
|
data/lib/oboe/inst/rack.rb
CHANGED
@@ -37,7 +37,7 @@ module Oboe
|
|
37
37
|
report_kvs['Forwarded-Port'] = env['HTTP_X_FORWARDED_PORT'] if env.has_key?('HTTP_X_FORWARDED_PORT')
|
38
38
|
|
39
39
|
report_kvs['Ruby.Oboe.Version'] = ::Oboe::Version::STRING
|
40
|
-
rescue
|
40
|
+
rescue StandardError => e
|
41
41
|
# Discard any potential exceptions. Debug log and report whatever we can.
|
42
42
|
Oboe.logger.debug "[oboe/debug] Rack KV collection error: #{e.inspect}"
|
43
43
|
end
|
@@ -49,7 +49,7 @@ module Oboe
|
|
49
49
|
|
50
50
|
report_kvs = {}
|
51
51
|
report_kvs[:URL] = URI.unescape(req.path)
|
52
|
-
|
52
|
+
|
53
53
|
if Oboe.always?
|
54
54
|
# Only report these KVs under tracing_mode 'always' (never for 'through')
|
55
55
|
report_kvs[:SampleRate] = Oboe.sample_rate
|
@@ -63,7 +63,7 @@ module Oboe
|
|
63
63
|
status, headers, response = @app.call(env)
|
64
64
|
|
65
65
|
if Oboe.tracing?
|
66
|
-
report_kvs = collect(req, env)
|
66
|
+
report_kvs = collect(req, env)
|
67
67
|
Oboe::API.log(nil, 'info', report_kvs.merge!({ :Status => status }))
|
68
68
|
end
|
69
69
|
|
data/lib/oboe/inst/redis.rb
CHANGED
@@ -6,7 +6,7 @@ module Oboe
|
|
6
6
|
module Redis
|
7
7
|
module Client
|
8
8
|
# The operations listed in this constant skip collecting KVKey
|
9
|
-
NO_KEY_OPS = [ :keys, :randomkey, :scan, :sdiff, :sdiffstore, :sinter,
|
9
|
+
NO_KEY_OPS = [ :keys, :randomkey, :scan, :sdiff, :sdiffstore, :sinter,
|
10
10
|
:sinterstore, :smove, :sunion, :sunionstore, :zinterstore,
|
11
11
|
:zunionstore, :publish, :select, :eval, :evalsha, :script ]
|
12
12
|
|
@@ -17,7 +17,7 @@ module Oboe
|
|
17
17
|
:brpoplpush => { :destination => 2 }, :rpoplpush => { :destination => 2 },
|
18
18
|
:sdiffstore => { :destination => 1 }, :sinterstore => { :destination => 1 },
|
19
19
|
:sunionstore => { :destination => 1 }, :zinterstore => { :destination => 1 },
|
20
|
-
:zunionstore => { :destination => 1 }, :publish => { :channel => 1 },
|
20
|
+
:zunionstore => { :destination => 1 }, :publish => { :channel => 1 },
|
21
21
|
:incrby => { :increment => 2 }, :incrbyfloat => { :increment => 2 },
|
22
22
|
:pexpire => { :milliseconds => 2 }, :pexpireat => { :milliseconds => 2 },
|
23
23
|
:expireat => { :timestamp => 2 }, :decrby => { :decrement => 2 },
|
@@ -28,7 +28,7 @@ module Oboe
|
|
28
28
|
:keys => { :pattern => 1 }, :expire => { :seconds => 2 },
|
29
29
|
:rename => { :newkey => 2 }, :renamenx => { :newkey => 2 },
|
30
30
|
:getbit => { :offset => 2 }, :setbit => { :offset => 2 },
|
31
|
-
:setrange => { :offset => 2 }, :evalsha => { :sha => 1 },
|
31
|
+
:setrange => { :offset => 2 }, :evalsha => { :sha => 1 },
|
32
32
|
:getrange => { :start => 2, :end => 3 },
|
33
33
|
:zrange => { :start => 2, :end => 3 },
|
34
34
|
:bitcount => { :start => 2, :stop => 3 },
|
@@ -40,17 +40,17 @@ module Oboe
|
|
40
40
|
:hincrbyfloat => { :field => 2, :increment => 3 },
|
41
41
|
:zremrangebyrank => { :start => 2, :stop => 3 },
|
42
42
|
}
|
43
|
-
|
43
|
+
|
44
44
|
# The following operations don't require any special handling. For these,
|
45
45
|
# we only collect KVKey and KVOp
|
46
46
|
#
|
47
|
-
# :append, :blpop, :brpop, :decr, :del, :dump, :exists,
|
48
|
-
# :hgetall, :hkeys, :hlen, :hvals, :hmset, :incr, :linsert,
|
49
|
-
# :llen, :lpop, :lpush, :lpushx, :lrem, :lset, :ltrim,
|
50
|
-
# :persist, :pttl, :hscan, :rpop, :rpush, :rpushx, :sadd,
|
51
|
-
# :scard, :sismember, :smembers, :strlen, :sort, :spop,
|
52
|
-
# :srandmember, :srem, :sscan, :ttl, :type, :zadd, :zcard,
|
53
|
-
# :zcount, :zincrby, :zrangebyscore, :zrank, :zrem,
|
47
|
+
# :append, :blpop, :brpop, :decr, :del, :dump, :exists,
|
48
|
+
# :hgetall, :hkeys, :hlen, :hvals, :hmset, :incr, :linsert,
|
49
|
+
# :llen, :lpop, :lpush, :lpushx, :lrem, :lset, :ltrim,
|
50
|
+
# :persist, :pttl, :hscan, :rpop, :rpush, :rpushx, :sadd,
|
51
|
+
# :scard, :sismember, :smembers, :strlen, :sort, :spop,
|
52
|
+
# :srandmember, :srem, :sscan, :ttl, :type, :zadd, :zcard,
|
53
|
+
# :zcount, :zincrby, :zrangebyscore, :zrank, :zrem,
|
54
54
|
# :zremrangebyscore, :zrevrank, :zrevrangebyscore, :zscore
|
55
55
|
#
|
56
56
|
# For the operations in NO_KEY_OPS (above) we only collect
|
@@ -103,10 +103,10 @@ module Oboe
|
|
103
103
|
kvs[:nx] = options[:nx] if options.has_key?(:nx)
|
104
104
|
kvs[:xx] = options[:xx] if options.has_key?(:xx)
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
when :get
|
108
108
|
kvs[:KVHit] = r.nil? ? 0 : 1
|
109
|
-
|
109
|
+
|
110
110
|
when :hdel, :hexists, :hget, :hset, :hsetnx
|
111
111
|
kvs[:field] = command[2] unless command[2].is_a?(Array)
|
112
112
|
if op == :hget
|
@@ -119,7 +119,7 @@ module Oboe
|
|
119
119
|
else
|
120
120
|
kvs[:Script] = command[1]
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
when :script
|
124
124
|
kvs[:subcommand] = command[1]
|
125
125
|
kvs[:Backtrace] = Oboe::API.backtrace if Oboe::Config[:redis][:collect_backtraces]
|
@@ -139,18 +139,18 @@ module Oboe
|
|
139
139
|
|
140
140
|
when :mget
|
141
141
|
if command[1].is_a?(Array)
|
142
|
-
kvs[:KVKeyCount] = command[1].count
|
142
|
+
kvs[:KVKeyCount] = command[1].count
|
143
143
|
else
|
144
144
|
kvs[:KVKeyCount] = command.count - 1
|
145
|
-
end
|
145
|
+
end
|
146
146
|
values = r.select{ |i| i }
|
147
147
|
kvs[:KVHitCount] = values.count
|
148
|
-
|
148
|
+
|
149
149
|
when :hmget
|
150
150
|
kvs[:KVKeyCount] = command.count - 2
|
151
151
|
values = r.select{ |i| i }
|
152
152
|
kvs[:KVHitCount] = values.count
|
153
|
-
|
153
|
+
|
154
154
|
when :mset, :msetnx
|
155
155
|
if command[1].is_a?(Array)
|
156
156
|
kvs[:KVKeyCount] = command[1].count / 2
|
@@ -159,7 +159,7 @@ module Oboe
|
|
159
159
|
end
|
160
160
|
end # case op
|
161
161
|
end # if KV_COLLECT_MAP[op]
|
162
|
-
|
162
|
+
|
163
163
|
rescue StandardError => e
|
164
164
|
Oboe.logger.debug "Error collecting redis KVs: #{e.message}"
|
165
165
|
Oboe.logger.debug e.backtrace.join("\n")
|
@@ -188,7 +188,7 @@ module Oboe
|
|
188
188
|
else
|
189
189
|
kvs[:KVOp] = :pipeline
|
190
190
|
end
|
191
|
-
|
191
|
+
|
192
192
|
# Report pipelined operations if the number
|
193
193
|
# of ops is reasonable
|
194
194
|
if command_count < 12
|
@@ -207,7 +207,7 @@ module Oboe
|
|
207
207
|
|
208
208
|
#
|
209
209
|
# The wrapper method for Redis::Client.call. Here
|
210
|
-
# (when tracing) we capture KVs to report and pass
|
210
|
+
# (when tracing) we capture KVs to report and pass
|
211
211
|
# the call along
|
212
212
|
#
|
213
213
|
def call_with_oboe(command, &block)
|
@@ -229,7 +229,7 @@ module Oboe
|
|
229
229
|
call_without_oboe(command, &block)
|
230
230
|
end
|
231
231
|
end
|
232
|
-
|
232
|
+
|
233
233
|
#
|
234
234
|
# The wrapper method for Redis::Client.call_pipeline. Here
|
235
235
|
# (when tracing) we capture KVs to report and pass the call along
|
@@ -239,7 +239,7 @@ module Oboe
|
|
239
239
|
report_kvs = {}
|
240
240
|
|
241
241
|
# Fall back to the raw tracing API so we can pass KVs
|
242
|
-
# back on exit (a limitation of the Oboe::API.trace
|
242
|
+
# back on exit (a limitation of the Oboe::API.trace
|
243
243
|
# block method) This removes the need for an info
|
244
244
|
# event to send additonal KVs
|
245
245
|
::Oboe::API.log_entry('redis', {})
|
@@ -264,7 +264,7 @@ module Oboe
|
|
264
264
|
end
|
265
265
|
end
|
266
266
|
|
267
|
-
if Oboe::Config[:redis][:enabled]
|
267
|
+
if Oboe::Config[:redis][:enabled]
|
268
268
|
if defined?(::Redis) and Gem::Version.new(::Redis::VERSION) >= Gem::Version.new('3.0.0')
|
269
269
|
Oboe.logger.info "[oboe/loading] Instrumenting redis" if Oboe::Config[:verbose]
|
270
270
|
::Oboe::Util.send_include(::Redis::Client, ::Oboe::Inst::Redis::Client)
|