oboe 1.3.6 → 1.3.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -82,12 +82,12 @@ module Oboe
82
82
  xtrace
83
83
  end
84
84
 
85
- def log_entry(layer, opts={}, protect_op=false)
86
- Oboe::Context.layer_op = opts[:Op] if protect_op and opts.has_key?(:Op)
85
+ def log_entry(layer, opts={}, protect_op=nil)
86
+ Oboe::Context.layer_op = protect_op if protect_op
87
87
  log_event(layer, 'entry', Oboe::Context.createEvent, opts)
88
88
  end
89
89
 
90
- def log_exit(layer, opts={}, protect_op=false)
90
+ def log_exit(layer, opts={}, protect_op=nil)
91
91
  Oboe::Context.layer_op = nil if protect_op
92
92
  log_event(layer, 'exit', Oboe::Context.createEvent, opts)
93
93
  end
@@ -11,6 +11,8 @@ module Oboe
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
+ # protect_op - specify the operating being traced. Used to avoid
15
+ # double tracing between operations that call each other
14
16
  #
15
17
  # Example
16
18
  #
@@ -28,7 +30,7 @@ module Oboe
28
30
  # result = computation_with_oboe(1000)
29
31
  #
30
32
  # Returns the result of the block.
31
- def trace(layer, opts={}, protect_op=false)
33
+ def trace(layer, opts={}, protect_op=nil)
32
34
  log_entry(layer, opts, protect_op)
33
35
  begin
34
36
  yield
@@ -83,7 +83,7 @@ module Oboe
83
83
  def get_columns_with_oboe(column_family, key, *columns_and_options)
84
84
  args = [column_family, key] + columns_and_options
85
85
 
86
- if Oboe::Config.tracing? and not Oboe::Context.layer_op?(:multi_get_columns)
86
+ if Oboe::Config.tracing? and not Oboe::Context.tracing_layer_op?(:multi_get_columns)
87
87
  report_kvs = extract_trace_details(:get_columns, column_family, key, columns_and_options)
88
88
 
89
89
  Oboe::API.trace('cassandra', report_kvs) do
@@ -100,7 +100,7 @@ module Oboe
100
100
  if Oboe::Config.tracing?
101
101
  report_kvs = extract_trace_details(:multi_get_columns, column_family, key, columns_and_options)
102
102
 
103
- Oboe::API.trace('cassandra', report_kvs, true) do
103
+ Oboe::API.trace('cassandra', report_kvs, :multi_get_columns) do
104
104
  send :multi_get_columns_without_oboe, *args
105
105
  end
106
106
  else
@@ -114,7 +114,7 @@ module Oboe
114
114
  if Oboe::Config.tracing?
115
115
  report_kvs = extract_trace_details(:get, column_family, key, columns_and_options)
116
116
 
117
- Oboe::API.trace('cassandra', report_kvs, true) do
117
+ Oboe::API.trace('cassandra', report_kvs, :get) do
118
118
  send :get_without_oboe, *args
119
119
  end
120
120
  else
@@ -125,7 +125,7 @@ module Oboe
125
125
  def multi_get_with_oboe(column_family, key, *columns_and_options)
126
126
  args = [column_family, key] + columns_and_options
127
127
 
128
- if Oboe::Config.tracing? and not Oboe::Context.layer_op?(:get)
128
+ if Oboe::Config.tracing? and not Oboe::Context.tracing_layer_op?(:get)
129
129
  report_kvs = extract_trace_details(:multi_get, column_family, key, columns_and_options)
130
130
 
131
131
  Oboe::API.trace('cassandra', report_kvs) do
@@ -151,7 +151,7 @@ module Oboe
151
151
  end
152
152
 
153
153
  def get_range_single_with_oboe(column_family, options = {})
154
- if Oboe::Config.tracing? and not Oboe::Context.layer_op?(:get_range_batch)
154
+ if Oboe::Config.tracing? and not Oboe::Context.tracing_layer_op?(:get_range_batch)
155
155
  report_kvs = extract_trace_details(:get_range_single, column_family, nil, nil)
156
156
  args = [column_family, options]
157
157
 
@@ -168,7 +168,7 @@ module Oboe
168
168
  report_kvs = extract_trace_details(:get_range_batch, column_family, nil, nil)
169
169
  args = [column_family, options]
170
170
 
171
- Oboe::API.trace('cassandra', report_kvs, true) do
171
+ Oboe::API.trace('cassandra', report_kvs, :get_range_batch) do
172
172
  get_range_batch_without_oboe(column_family, options)
173
173
  end
174
174
  else
@@ -0,0 +1,415 @@
1
+ # Copyright (c) 2012 by Tracelytics, Inc.
2
+ # All rights reserved.
3
+
4
+ module Oboe
5
+ module Inst
6
+ module Moped
7
+ FLAVOR = 'mongodb'
8
+
9
+ # Moped::Database
10
+ DB_OPS = [ :command, :drop ]
11
+
12
+ # Moped::Indexes
13
+ INDEX_OPS = [ :create, :drop ]
14
+
15
+ # Moped::Query
16
+ QUERY_OPS = [ :count, :sort, :limit, :distinct, :update, :update_all, :upsert,
17
+ :explain, :modify, :remove, :remove_all ]
18
+
19
+ # Moped::Collection
20
+ COLLECTION_OPS = [ :drop, :find, :indexes, :insert, :aggregate ]
21
+ end
22
+ end
23
+ end
24
+
25
+ puts "[oboe/loading] Instrumenting moped" if Oboe::Config[:verbose] and defined?(::Moped)
26
+
27
+ if defined?(::Moped::Database)
28
+ module ::Moped
29
+ class Database
30
+ include Oboe::Inst::Moped
31
+
32
+ def extract_trace_details(op)
33
+ report_kvs = {}
34
+ begin
35
+ report_kvs[:Flavor] = Oboe::Inst::Moped::FLAVOR
36
+ # FIXME: We're only grabbing the first of potentially multiple servers here
37
+ report_kvs[:RemoteHost], report_kvs[:RemotePort] = session.cluster.seeds.first.split(':')
38
+ report_kvs[:Database] = name
39
+ report_kvs[:QueryOp] = op.to_s
40
+ rescue
41
+ end
42
+ report_kvs
43
+ end
44
+
45
+ def command_with_oboe(command)
46
+ if Oboe::Config.tracing? and not Oboe::Context.layer_op and command.has_key?(:mapreduce)
47
+ report_kvs = extract_trace_details(:map_reduce)
48
+ report_kvs[:Map_Function] = command[:map]
49
+ report_kvs[:Reduce_Function] = command[:reduce]
50
+
51
+ Oboe::API.trace('mongo', report_kvs) do
52
+ command_without_oboe(command)
53
+ end
54
+ else
55
+ command_without_oboe(command)
56
+ end
57
+ end
58
+
59
+ def drop_with_oboe
60
+ if Oboe::Config.tracing?
61
+ report_kvs = extract_trace_details(:drop_database)
62
+
63
+ Oboe::API.trace('mongo', report_kvs) do
64
+ drop_without_oboe
65
+ end
66
+ else
67
+ drop_without_oboe
68
+ end
69
+ end
70
+
71
+ Oboe::Inst::Moped::DB_OPS.each do |m|
72
+ if method_defined?(m)
73
+ class_eval "alias #{m}_without_oboe #{m}"
74
+ class_eval "alias #{m} #{m}_with_oboe"
75
+ else puts "[oboe/loading] Couldn't properly instrument moped (#{m}). Partial traces may occur."
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ if defined?(::Moped::Indexes)
83
+ module ::Moped
84
+ class Indexes
85
+ include Oboe::Inst::Moped
86
+
87
+ def extract_trace_details(op)
88
+ report_kvs = {}
89
+ begin
90
+ report_kvs[:Flavor] = Oboe::Inst::Moped::FLAVOR
91
+ # FIXME: We're only grabbing the first of potentially multiple servers here
92
+ report_kvs[:RemoteHost], report_kvs[:RemotePort] = database.session.cluster.seeds.first.split(':')
93
+ report_kvs[:Database] = database.name
94
+ report_kvs[:QueryOp] = op.to_s
95
+ rescue
96
+ end
97
+ report_kvs
98
+ end
99
+
100
+ def create_with_oboe(key, options = {})
101
+ if Oboe::Config.tracing?
102
+ # We report :create_index here to be consistent
103
+ # with other mongo implementations
104
+ report_kvs = extract_trace_details(:create_index)
105
+ report_kvs[:Key] = key.try(:to_json)
106
+ report_kvs[:Options] = options.try(:to_json)
107
+
108
+ Oboe::API.trace('mongo', report_kvs, :create_index) do
109
+ create_without_oboe(key, options = {})
110
+ end
111
+ else
112
+ create_without_oboe(key, options = {})
113
+ end
114
+ end
115
+
116
+ def drop_with_oboe(key = nil)
117
+ if Oboe::Config.tracing?
118
+ # We report :drop_indexes here to be consistent
119
+ # with other mongo implementations
120
+ report_kvs = extract_trace_details(:drop_indexes)
121
+ report_kvs[:Key] = key.nil? ? "all" : key.try(:to_json)
122
+
123
+ Oboe::API.trace('mongo', report_kvs) do
124
+ drop_without_oboe(key = nil)
125
+ end
126
+ else
127
+ drop_without_oboe(key = nil)
128
+ end
129
+ end
130
+
131
+ Oboe::Inst::Moped::INDEX_OPS.each do |m|
132
+ if method_defined?(m)
133
+ class_eval "alias #{m}_without_oboe #{m}"
134
+ class_eval "alias #{m} #{m}_with_oboe"
135
+ else puts "[oboe/loading] Couldn't properly instrument moped (#{m}). Partial traces may occur."
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
141
+
142
+ if defined?(::Moped::Query)
143
+ module ::Moped
144
+ class Query
145
+ include Oboe::Inst::Moped
146
+
147
+
148
+ def extract_trace_details(op)
149
+ report_kvs = {}
150
+ begin
151
+ report_kvs[:Flavor] = Oboe::Inst::Moped::FLAVOR
152
+ # FIXME: We're only grabbing the first of potentially multiple servers here
153
+ report_kvs[:RemoteHost], report_kvs[:RemotePort] = collection.database.session.cluster.seeds.first.split(':')
154
+ report_kvs[:Database] = collection.database.name
155
+ report_kvs[:Collection_Name] = collection.name
156
+ report_kvs[:QueryOp] = op.to_s
157
+ rescue
158
+ end
159
+ report_kvs
160
+ end
161
+
162
+ def count_with_oboe
163
+ if Oboe::Config.tracing?
164
+ report_kvs = extract_trace_details(:count)
165
+ report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
166
+
167
+ Oboe::API.trace('mongo', report_kvs) do
168
+ count_without_oboe
169
+ end
170
+ else
171
+ count_without_oboe
172
+ end
173
+ end
174
+
175
+ def sort_with_oboe(sort)
176
+ if Oboe::Config.tracing?
177
+ report_kvs = extract_trace_details(:sort)
178
+ report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
179
+ report_kvs[:Order] = sort.to_s
180
+
181
+ Oboe::API.trace('mongo', report_kvs) do
182
+ sort_without_oboe(sort)
183
+ end
184
+ else
185
+ sort_without_oboe(sort)
186
+ end
187
+ end
188
+
189
+ def limit_with_oboe(limit)
190
+ if Oboe::Config.tracing? and not Oboe::Context.tracing_layer_op?(:explain)
191
+ report_kvs = extract_trace_details(:limit)
192
+ report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
193
+ report_kvs[:Limit] = limit.to_s
194
+
195
+ Oboe::API.trace('mongo', report_kvs) do
196
+ limit_without_oboe(limit)
197
+ end
198
+ else
199
+ limit_without_oboe(limit)
200
+ end
201
+ end
202
+
203
+ def distinct_with_oboe(key)
204
+ if Oboe::Config.tracing?
205
+ report_kvs = extract_trace_details(:distinct)
206
+ report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
207
+ report_kvs[:Key] = key.to_s
208
+
209
+ Oboe::API.trace('mongo', report_kvs) do
210
+ distinct_without_oboe(key)
211
+ end
212
+ else
213
+ distinct_without_oboe(key)
214
+ end
215
+ end
216
+
217
+ def update_with_oboe(change, flags = nil)
218
+ if Oboe::Config.tracing? and not Oboe::Context.tracing_layer_op?([:update_all, :upsert])
219
+ report_kvs = extract_trace_details(:update)
220
+ report_kvs[:Flags] = flags.to_s if flags
221
+ report_kvs[:Update_Document] = change.try(:to_json)
222
+
223
+ Oboe::API.trace('mongo', report_kvs) do
224
+ update_without_oboe(change, flags = nil)
225
+ end
226
+ else
227
+ update_without_oboe(change, flags = nil)
228
+ end
229
+ end
230
+
231
+ def update_all_with_oboe(change)
232
+ if Oboe::Config.tracing?
233
+ report_kvs = extract_trace_details(:update_all)
234
+ report_kvs[:Update_Document] = change.try(:to_json)
235
+
236
+ Oboe::API.trace('mongo', report_kvs, :update_all) do
237
+ update_all_without_oboe(change)
238
+ end
239
+ else
240
+ update_all_without_oboe(change)
241
+ end
242
+ end
243
+
244
+ def upsert_with_oboe(change)
245
+ if Oboe::Config.tracing?
246
+ report_kvs = extract_trace_details(:upsert)
247
+ report_kvs[:Query] = selector.try(:to_json)
248
+ report_kvs[:Update_Document] = change.try(:to_json)
249
+
250
+ Oboe::API.trace('mongo', report_kvs, :upsert) do
251
+ upsert_without_oboe(change)
252
+ end
253
+ else
254
+ upsert_without_oboe(change)
255
+ end
256
+ end
257
+
258
+ def explain_with_oboe
259
+ if Oboe::Config.tracing?
260
+ report_kvs = extract_trace_details(:explain)
261
+ report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
262
+
263
+ Oboe::API.trace('mongo', report_kvs, :explain) do
264
+ explain_without_oboe
265
+ end
266
+ else
267
+ explain_without_oboe
268
+ end
269
+ end
270
+
271
+ def modify_with_oboe(change, options = {})
272
+ if Oboe::Config.tracing?
273
+ report_kvs = extract_trace_details(:modify)
274
+ report_kvs[:Update_Document] = selector.try(:empty?) ? "all" : selector.try(:to_json)
275
+ report_kvs[:Change] = change.try(:to_json)
276
+ report_kvs[:Options] = options.try(:to_json)
277
+
278
+ Oboe::API.trace('mongo', report_kvs) do
279
+ modify_without_oboe(change, options)
280
+ end
281
+ else
282
+ modify_without_oboe(change, options)
283
+ end
284
+ end
285
+
286
+ def remove_with_oboe
287
+ if Oboe::Config.tracing?
288
+ report_kvs = extract_trace_details(:remove)
289
+ report_kvs[:Query] = selector.try(:to_json)
290
+
291
+ Oboe::API.trace('mongo', report_kvs) do
292
+ remove_without_oboe
293
+ end
294
+ else
295
+ remove_without_oboe
296
+ end
297
+ end
298
+
299
+ def remove_all_with_oboe
300
+ if Oboe::Config.tracing?
301
+ report_kvs = extract_trace_details(:remove_all)
302
+ report_kvs[:Query] = selector.try(:to_json)
303
+
304
+ Oboe::API.trace('mongo', report_kvs) do
305
+ remove_all_without_oboe
306
+ end
307
+ else
308
+ remove_all_without_oboe
309
+ end
310
+ end
311
+
312
+ Oboe::Inst::Moped::QUERY_OPS.each do |m|
313
+ if method_defined?(m)
314
+ class_eval "alias #{m}_without_oboe #{m}"
315
+ class_eval "alias #{m} #{m}_with_oboe"
316
+ else puts "[oboe/loading] Couldn't properly instrument moped (#{m}). Partial traces may occur."
317
+ end
318
+ end
319
+ end
320
+ end
321
+ end # ::Moped::Query
322
+
323
+
324
+ if defined?(::Moped::Collection)
325
+ module ::Moped
326
+ class Collection
327
+ include Oboe::Inst::Moped
328
+
329
+ def extract_trace_details(op)
330
+ report_kvs = {}
331
+ begin
332
+ report_kvs[:Flavor] = Oboe::Inst::Moped::FLAVOR
333
+ # FIXME: We're only grabbing the first of potentially multiple servers here
334
+ report_kvs[:RemoteHost], report_kvs[:RemotePort] = @database.session.cluster.seeds.first.split(':')
335
+ report_kvs[:Database] = @database.name
336
+ report_kvs[:Collection_Name] = @name
337
+ report_kvs[:QueryOp] = op.to_s
338
+ rescue
339
+ end
340
+ report_kvs
341
+ end
342
+
343
+ def drop_with_oboe
344
+ if Oboe::Config.tracing?
345
+ # We report :drop_collection here to be consistent
346
+ # with other mongo implementations
347
+ report_kvs = extract_trace_details(:drop_collection)
348
+
349
+ Oboe::API.trace('mongo', report_kvs) do
350
+ drop_without_oboe
351
+ end
352
+ else
353
+ drop_without_oboe
354
+ end
355
+ end
356
+
357
+ def find_with_oboe(selector = {})
358
+ if Oboe::Config.tracing?
359
+ report_kvs = extract_trace_details(:find)
360
+ report_kvs[:Query] = selector.try(:empty?) ? "all" : selector.try(:to_json)
361
+
362
+ Oboe::API.trace('mongo', report_kvs) do
363
+ find_without_oboe(selector)
364
+ end
365
+ else
366
+ find_without_oboe(selector)
367
+ end
368
+ end
369
+
370
+ def indexes_with_oboe
371
+ if Oboe::Config.tracing?
372
+ report_kvs = extract_trace_details(:indexes)
373
+
374
+ Oboe::API.trace('mongo', report_kvs) do
375
+ indexes_without_oboe
376
+ end
377
+ else
378
+ indexes_without_oboe
379
+ end
380
+ end
381
+
382
+ def insert_with_oboe(documents, flags = nil)
383
+ if Oboe::Config.tracing? and not Oboe::Context.tracing_layer_op?(:create_index)
384
+ report_kvs = extract_trace_details(:insert)
385
+
386
+ Oboe::API.trace('mongo', report_kvs) do
387
+ insert_without_oboe(documents, flags)
388
+ end
389
+ else
390
+ insert_without_oboe(documents, flags)
391
+ end
392
+ end
393
+
394
+ def aggregate_with_oboe(pipeline)
395
+ if Oboe::Config.tracing?
396
+ report_kvs = extract_trace_details(:aggregate)
397
+
398
+ Oboe::API.trace('mongo', report_kvs) do
399
+ aggregate_without_oboe(pipeline)
400
+ end
401
+ else
402
+ aggregate_without_oboe(pipeline)
403
+ end
404
+ end
405
+
406
+ Oboe::Inst::Moped::COLLECTION_OPS.each do |m|
407
+ if method_defined?(m)
408
+ class_eval "alias #{m}_without_oboe #{m}"
409
+ class_eval "alias #{m} #{m}_with_oboe"
410
+ else puts "[oboe/loading] Couldn't properly instrument moped (#{m}). Partial traces may occur."
411
+ end
412
+ end
413
+ end
414
+ end
415
+ end # ::Moped::Collection
@@ -2,7 +2,7 @@ module Oboe
2
2
  module Version
3
3
  MAJOR = 1
4
4
  MINOR = 3
5
- PATCH = 6
5
+ PATCH = 7
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -18,15 +18,19 @@ module Oboe_metal
18
18
  end
19
19
 
20
20
  def self.layer_op=(op)
21
- @layer_op = op.to_s
21
+ @layer_op = op
22
22
  end
23
23
 
24
24
  def self.layer_op
25
25
  @layer_op
26
26
  end
27
27
 
28
- def self.layer_op?(operation)
29
- @layer_op == operation.to_s
28
+ def self.tracing_layer_op?(operation)
29
+ if operation.is_a?(Array)
30
+ return operation.include?(@layer_op)
31
+ else
32
+ return @layer_op == operation
33
+ end
30
34
  end
31
35
  end
32
36
  end
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.6
4
+ version: 1.3.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -35,6 +35,7 @@ files:
35
35
  - lib/oboe/frameworks/rails/inst/http.rb
36
36
  - lib/oboe/frameworks/rails/inst/rack.rb
37
37
  - lib/oboe/frameworks/rails/inst/action_controller.rb
38
+ - lib/oboe/frameworks/rails/inst/moped.rb
38
39
  - lib/oboe/frameworks/rails/inst/dalli.rb
39
40
  - lib/oboe/frameworks/rails/inst/active_record.rb
40
41
  - lib/oboe/frameworks/rails/inst/action_view.rb