oboe 1.3.4 → 1.3.5
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/ext/oboe_metal/extconf.rb
CHANGED
data/lib/oboe/api/logging.rb
CHANGED
@@ -82,11 +82,13 @@ module Oboe
|
|
82
82
|
xtrace
|
83
83
|
end
|
84
84
|
|
85
|
-
def log_entry(layer, opts={})
|
85
|
+
def log_entry(layer, opts={}, protect_op=false)
|
86
|
+
Oboe::Context.layer_op = opts[:Op] if protect_op and opts.has_key?(:Op)
|
86
87
|
log_event(layer, 'entry', Oboe::Context.createEvent, opts)
|
87
88
|
end
|
88
89
|
|
89
|
-
def log_exit(layer, opts={})
|
90
|
+
def log_exit(layer, opts={}, protect_op=false)
|
91
|
+
Oboe::Context.layer_op = nil if protect_op
|
90
92
|
log_event(layer, 'exit', Oboe::Context.createEvent, opts)
|
91
93
|
end
|
92
94
|
|
data/lib/oboe/api/tracing.rb
CHANGED
@@ -10,7 +10,7 @@ module Oboe
|
|
10
10
|
#
|
11
11
|
# layer - The layer the block of code belongs to.
|
12
12
|
# opts - A hash containing key/value pairs that will be reported along
|
13
|
-
#
|
13
|
+
# with the first event of this layer (optional).
|
14
14
|
#
|
15
15
|
# Example
|
16
16
|
#
|
@@ -28,18 +28,18 @@ module Oboe
|
|
28
28
|
# result = computation_with_oboe(1000)
|
29
29
|
#
|
30
30
|
# Returns the result of the block.
|
31
|
-
def trace(layer, opts={})
|
32
|
-
log_entry(layer, opts)
|
31
|
+
def trace(layer, opts={}, protect_op=false)
|
32
|
+
log_entry(layer, opts, protect_op)
|
33
33
|
begin
|
34
34
|
yield
|
35
35
|
rescue Exception => e
|
36
36
|
log_exception(layer, e)
|
37
37
|
raise
|
38
38
|
ensure
|
39
|
-
log_exit(layer)
|
39
|
+
log_exit(layer, {}, protect_op)
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
# Public: Trace a given block of code which can start a trace depending
|
44
44
|
# on configuration and probability. Detect any exceptions thrown by the
|
45
45
|
# block and report errors.
|
@@ -49,7 +49,7 @@ module Oboe
|
|
49
49
|
#
|
50
50
|
# layer - The layer the block of code belongs to.
|
51
51
|
# opts - A hash containing key/value pairs that will be reported along
|
52
|
-
#
|
52
|
+
# with the first event of this layer (optional).
|
53
53
|
#
|
54
54
|
# Example
|
55
55
|
#
|
@@ -89,7 +89,7 @@ module Oboe
|
|
89
89
|
# on configuration and probability. Detect any exceptions thrown by the
|
90
90
|
# block and report errors. Insert the oboe metadata into the provided for
|
91
91
|
# later user.
|
92
|
-
#
|
92
|
+
#
|
93
93
|
# The motivating use case for this is HTTP streaming in rails3. We need
|
94
94
|
# access to the exit event's trace id so we can set the header before any
|
95
95
|
# work is done, and before any headers are sent back to the client.
|
@@ -97,7 +97,7 @@ module Oboe
|
|
97
97
|
# layer - The layer the block of code belongs to.
|
98
98
|
# target - The target object in which to place the oboe metadata.
|
99
99
|
# opts - A hash containing key/value pairs that will be reported along
|
100
|
-
#
|
100
|
+
# with the first event of this layer (optional).
|
101
101
|
#
|
102
102
|
# Example:
|
103
103
|
#
|
@@ -9,7 +9,8 @@ module Oboe
|
|
9
9
|
opts = {}
|
10
10
|
|
11
11
|
opts[:Query] = sql.to_s
|
12
|
-
opts[:Name] = name.to_s if name
|
12
|
+
opts[:Name] = name.to_s if name
|
13
|
+
opts[:Backtrace] = Oboe::API.backtrace
|
13
14
|
|
14
15
|
if defined?(ActiveRecord::Base.connection.cfg)
|
15
16
|
opts[:Database] = ActiveRecord::Base.connection.cfg[:database]
|
@@ -0,0 +1,301 @@
|
|
1
|
+
# Copyright (c) 2012 by Tracelytics, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
module Oboe
|
5
|
+
module Inst
|
6
|
+
module Cassandra
|
7
|
+
def extract_trace_details(op, column_family, keys, args, options = {})
|
8
|
+
report_kvs = {}
|
9
|
+
|
10
|
+
begin
|
11
|
+
report_kvs[:Op] = op.to_s
|
12
|
+
report_kvs[:Cf] = column_family.to_s
|
13
|
+
report_kvs[:Key] = keys.to_s if keys
|
14
|
+
|
15
|
+
# Open issue - how to handle multiple Cassandra servers
|
16
|
+
report_kvs[:RemoteHost], report_kvs[:RemotePort] = @servers.first.split(":")
|
17
|
+
|
18
|
+
if options.empty? and args.is_a?(Array)
|
19
|
+
options = args.last if args.last.is_a?(Hash)
|
20
|
+
end
|
21
|
+
|
22
|
+
unless options.empty?
|
23
|
+
[:start_key, :finish_key, :key_count, :batch_size, :columns, :count, :start,
|
24
|
+
:stop, :finish, :finished, :reversed, :consistency, :ttl].each do |k|
|
25
|
+
report_kvs[k.capitalize] = options[k] if options.has_key?(k)
|
26
|
+
end
|
27
|
+
|
28
|
+
if op == :get_indexed_slices
|
29
|
+
index_clause = columns_and_options[:index_clause] || {}
|
30
|
+
unless index_clause.empty?
|
31
|
+
[:column_name, :value, :comparison].each do |k|
|
32
|
+
report_kvs[k.capitalize] = index_clause[k] if index_clause.has_key?(k)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
rescue
|
38
|
+
end
|
39
|
+
|
40
|
+
report_kvs
|
41
|
+
end
|
42
|
+
|
43
|
+
def insert_with_oboe(column_family, key, hash, options = {})
|
44
|
+
if Oboe::Config.tracing?
|
45
|
+
report_kvs = extract_trace_details(:insert, column_family, key, hash, options)
|
46
|
+
|
47
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
48
|
+
insert_without_oboe(column_family, key, hash, options = {})
|
49
|
+
end
|
50
|
+
else
|
51
|
+
insert_without_oboe(column_family, key, hash, options = {})
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def remove_with_oboe(column_family, key, *columns_and_options)
|
56
|
+
args = [column_family, key] + columns_and_options
|
57
|
+
|
58
|
+
if Oboe::Config.tracing?
|
59
|
+
report_kvs = extract_trace_details(:remove, column_family, key, columns_and_options)
|
60
|
+
|
61
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
62
|
+
send :remove_without_oboe, *args
|
63
|
+
end
|
64
|
+
else
|
65
|
+
send :remove_without_oboe, *args
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def count_columns_with_oboe(column_family, key, *columns_and_options)
|
70
|
+
args = [column_family, key] + columns_and_options
|
71
|
+
|
72
|
+
if Oboe::Config.tracing?
|
73
|
+
report_kvs = extract_trace_details(:count_columns, column_family, key, columns_and_options)
|
74
|
+
|
75
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
76
|
+
send :count_columns_without_oboe, *args
|
77
|
+
end
|
78
|
+
else
|
79
|
+
send :count_columns_without_oboe, *args
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def get_columns_with_oboe(column_family, key, *columns_and_options)
|
84
|
+
args = [column_family, key] + columns_and_options
|
85
|
+
|
86
|
+
if Oboe::Config.tracing? and not Oboe::Context.layer_op?(:multi_get_columns)
|
87
|
+
report_kvs = extract_trace_details(:get_columns, column_family, key, columns_and_options)
|
88
|
+
|
89
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
90
|
+
send :get_columns_without_oboe, *args
|
91
|
+
end
|
92
|
+
else
|
93
|
+
send :get_columns_without_oboe, *args
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def multi_get_columns_with_oboe(column_family, key, *columns_and_options)
|
98
|
+
args = [column_family, key] + columns_and_options
|
99
|
+
|
100
|
+
if Oboe::Config.tracing?
|
101
|
+
report_kvs = extract_trace_details(:multi_get_columns, column_family, key, columns_and_options)
|
102
|
+
|
103
|
+
Oboe::API.trace('cassandra', report_kvs, true) do
|
104
|
+
send :multi_get_columns_without_oboe, *args
|
105
|
+
end
|
106
|
+
else
|
107
|
+
send :multi_get_columns_without_oboe, *args
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def get_with_oboe(column_family, key, *columns_and_options)
|
112
|
+
args = [column_family, key] + columns_and_options
|
113
|
+
|
114
|
+
if Oboe::Config.tracing?
|
115
|
+
report_kvs = extract_trace_details(:get, column_family, key, columns_and_options)
|
116
|
+
|
117
|
+
Oboe::API.trace('cassandra', report_kvs, true) do
|
118
|
+
send :get_without_oboe, *args
|
119
|
+
end
|
120
|
+
else
|
121
|
+
send :get_without_oboe, *args
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def multi_get_with_oboe(column_family, key, *columns_and_options)
|
126
|
+
args = [column_family, key] + columns_and_options
|
127
|
+
|
128
|
+
if Oboe::Config.tracing? and not Oboe::Context.layer_op?(:get)
|
129
|
+
report_kvs = extract_trace_details(:multi_get, column_family, key, columns_and_options)
|
130
|
+
|
131
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
132
|
+
send :multi_get_without_oboe, *args
|
133
|
+
end
|
134
|
+
else
|
135
|
+
send :multi_get_without_oboe, *args
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def exists_with_oboe?(column_family, key, *columns_and_options)
|
140
|
+
args = [column_family, key] + columns_and_options
|
141
|
+
|
142
|
+
if Oboe::Config.tracing?
|
143
|
+
report_kvs = extract_trace_details(:exists?, column_family, key, columns_and_options)
|
144
|
+
|
145
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
146
|
+
send :exists_without_oboe?, *args
|
147
|
+
end
|
148
|
+
else
|
149
|
+
send :exists_without_oboe?, *args
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def get_range_single_with_oboe(column_family, options = {})
|
154
|
+
if Oboe::Config.tracing? and not Oboe::Context.layer_op?(:get_range_batch)
|
155
|
+
report_kvs = extract_trace_details(:get_range_single, column_family, nil, nil)
|
156
|
+
args = [column_family, options]
|
157
|
+
|
158
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
159
|
+
get_range_single_without_oboe(column_family, options)
|
160
|
+
end
|
161
|
+
else
|
162
|
+
get_range_single_without_oboe(column_family, options)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def get_range_batch_with_oboe(column_family, options = {})
|
167
|
+
if Oboe::Config.tracing?
|
168
|
+
report_kvs = extract_trace_details(:get_range_batch, column_family, nil, nil)
|
169
|
+
args = [column_family, options]
|
170
|
+
|
171
|
+
Oboe::API.trace('cassandra', report_kvs, true) do
|
172
|
+
get_range_batch_without_oboe(column_family, options)
|
173
|
+
end
|
174
|
+
else
|
175
|
+
get_range_batch_without_oboe(column_family, options)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def get_indexed_slices_with_oboe(column_family, index_clause, *columns_and_options)
|
180
|
+
args = [column_family, index_clause] + columns_and_options
|
181
|
+
|
182
|
+
if Oboe::Config.tracing?
|
183
|
+
report_kvs = extract_trace_details(:get_indexed_slices, column_family, nil, columns_and_options)
|
184
|
+
|
185
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
186
|
+
send :get_indexed_slices_without_oboe, *args
|
187
|
+
end
|
188
|
+
else
|
189
|
+
send :get_indexed_slices_without_oboe, *args
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
def create_index_with_oboe(keyspace, column_family, column_name, validation_class)
|
194
|
+
if Oboe::Config.tracing?
|
195
|
+
report_kvs = extract_trace_details(:create_index, column_family, nil, nil)
|
196
|
+
report_kvs[:Keyspace] = keyspace.to_s
|
197
|
+
report_kvs[:Column_name] = column_name.to_s
|
198
|
+
report_kvs[:Validation_class] = validation_class.to_s
|
199
|
+
|
200
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
201
|
+
create_index_without_oboe(keyspace, column_family, column_name, validation_class)
|
202
|
+
end
|
203
|
+
else
|
204
|
+
create_index_without_oboe(keyspace, column_family, column_name, validation_class)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def drop_index_with_oboe(keyspace, column_family, column_name)
|
209
|
+
if Oboe::Config.tracing?
|
210
|
+
report_kvs = extract_trace_details(:drop_index, column_family, nil, nil)
|
211
|
+
report_kvs[:Keyspace] = keyspace.to_s
|
212
|
+
report_kvs[:Column_name] = column_name.to_s
|
213
|
+
|
214
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
215
|
+
drop_index_without_oboe(keyspace, column_family, column_name)
|
216
|
+
end
|
217
|
+
else
|
218
|
+
drop_index_without_oboe(keyspace, column_family, column_name)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def add_column_family_with_oboe(cf_def)
|
223
|
+
if Oboe::Config.tracing?
|
224
|
+
report_kvs = extract_trace_details(:add_column_family, nil, nil, nil)
|
225
|
+
report_kvs[:Name] = cf_def[:name] if cf_def.is_a?(Hash) and cf_def.has_key?(:name)
|
226
|
+
|
227
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
228
|
+
add_column_family_without_oboe(cf_def)
|
229
|
+
end
|
230
|
+
else
|
231
|
+
add_column_family_without_oboe(cf_def)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
def drop_column_family_with_oboe(column_family)
|
236
|
+
if Oboe::Config.tracing?
|
237
|
+
report_kvs = extract_trace_details(:drop_column_family, column_family, nil, nil)
|
238
|
+
|
239
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
240
|
+
drop_column_family_without_oboe(column_family)
|
241
|
+
end
|
242
|
+
else
|
243
|
+
drop_column_family_without_oboe(column_family)
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def add_keyspace_with_oboe(ks_def)
|
248
|
+
if Oboe::Config.tracing?
|
249
|
+
report_kvs = extract_trace_details(:add_keyspace, nil, nil, nil)
|
250
|
+
report_kvs[:Name] = ks_def[:name] if ks_def.is_a?(Hash) and ks_def.has_key?(:name)
|
251
|
+
|
252
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
253
|
+
add_keyspace_without_oboe(ks_def)
|
254
|
+
end
|
255
|
+
else
|
256
|
+
add_keyspace_without_oboe(ks_def)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def drop_keyspace_with_oboe(keyspace)
|
261
|
+
if Oboe::Config.tracing?
|
262
|
+
report_kvs = extract_trace_details(:drop_keyspace, nil, nil, nil)
|
263
|
+
report_kvs[:Name] = keyspace.to_s
|
264
|
+
|
265
|
+
Oboe::API.trace('cassandra', report_kvs) do
|
266
|
+
drop_keyspace_without_oboe(keyspace)
|
267
|
+
end
|
268
|
+
else
|
269
|
+
drop_keyspace_without_oboe(keyspace)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
if defined?(::Cassandra)
|
277
|
+
puts "[oboe/loading] Instrumenting Cassandra"
|
278
|
+
class ::Cassandra
|
279
|
+
include Oboe::Inst::Cassandra
|
280
|
+
|
281
|
+
[ :insert, :remove, :count_columns, :get_columns, :multi_get_columns, :get,
|
282
|
+
:multi_get, :get_range_single, :get_range_batch, :get_indexed_slices,
|
283
|
+
:create_index, :drop_index, :add_column_family, :drop_column_family,
|
284
|
+
:add_keyspace, :drop_keyspace].each do |m|
|
285
|
+
if method_defined?(m)
|
286
|
+
class_eval "alias #{m}_without_oboe #{m}"
|
287
|
+
class_eval "alias #{m} #{m}_with_oboe"
|
288
|
+
else puts "[oboe/loading] Couldn't properly instrument Cassandra (#{m}). Partial traces may occur."
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
# Special case handler for question mark methods
|
293
|
+
if method_defined?(:exists?)
|
294
|
+
alias exists_without_oboe? exists?
|
295
|
+
alias exists? exists_with_oboe?
|
296
|
+
else puts "[oboe/loading] Couldn't properly instrument Cassandra (exists?). Partial traces may occur."
|
297
|
+
end
|
298
|
+
end # class Cassandra
|
299
|
+
end
|
300
|
+
|
301
|
+
|
data/lib/oboe/version.rb
CHANGED
data/lib/oboe_metal.rb
CHANGED
@@ -16,6 +16,18 @@ module Oboe_metal
|
|
16
16
|
|
17
17
|
Oboe.reporter.sendReport(evt)
|
18
18
|
end
|
19
|
+
|
20
|
+
def self.layer_op=(op)
|
21
|
+
@layer_op = op.to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.layer_op
|
25
|
+
@layer_op
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.layer_op?(operation)
|
29
|
+
@layer_op == operation.to_s
|
30
|
+
end
|
19
31
|
end
|
20
32
|
end
|
21
33
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oboe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- lib/oboe/frameworks/rails/inst/action_controller.rb
|
38
38
|
- lib/oboe/frameworks/rails/inst/dalli.rb
|
39
39
|
- lib/oboe/frameworks/rails/inst/active_record.rb
|
40
|
+
- lib/oboe/frameworks/rails/inst/cassandra.rb
|
40
41
|
- lib/oboe/frameworks/rails/inst/memcached.rb
|
41
42
|
- lib/oboe/frameworks/rails/rails.rb
|
42
43
|
- lib/oboe_fu.rb
|