oboe 2.7.0.3-java

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 (102) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.travis.yml +51 -0
  4. data/Appraisals +10 -0
  5. data/CHANGELOG.md +223 -0
  6. data/Gemfile +49 -0
  7. data/LICENSE +199 -0
  8. data/README.md +380 -0
  9. data/Rakefile +106 -0
  10. data/ext/oboe_metal/extconf.rb +61 -0
  11. data/ext/oboe_metal/noop/noop.c +7 -0
  12. data/ext/oboe_metal/src/bson/bson.h +221 -0
  13. data/ext/oboe_metal/src/bson/platform_hacks.h +91 -0
  14. data/ext/oboe_metal/src/oboe.h +275 -0
  15. data/ext/oboe_metal/src/oboe.hpp +352 -0
  16. data/ext/oboe_metal/src/oboe_wrap.cxx +3886 -0
  17. data/ext/oboe_metal/tests/test.rb +11 -0
  18. data/gemfiles/mongo.gemfile +33 -0
  19. data/gemfiles/moped.gemfile +33 -0
  20. data/get_version.rb +5 -0
  21. data/init.rb +4 -0
  22. data/lib/base.rb +99 -0
  23. data/lib/joboe_metal.rb +185 -0
  24. data/lib/method_profiling.rb +70 -0
  25. data/lib/oboe.rb +50 -0
  26. data/lib/oboe/api.rb +14 -0
  27. data/lib/oboe/api/layerinit.rb +99 -0
  28. data/lib/oboe/api/logging.rb +129 -0
  29. data/lib/oboe/api/memcache.rb +29 -0
  30. data/lib/oboe/api/profiling.rb +50 -0
  31. data/lib/oboe/api/tracing.rb +134 -0
  32. data/lib/oboe/api/util.rb +117 -0
  33. data/lib/oboe/config.rb +140 -0
  34. data/lib/oboe/frameworks/grape.rb +74 -0
  35. data/lib/oboe/frameworks/padrino.rb +66 -0
  36. data/lib/oboe/frameworks/padrino/templates.rb +59 -0
  37. data/lib/oboe/frameworks/rails.rb +139 -0
  38. data/lib/oboe/frameworks/rails/helpers/rum/rum_ajax_header.js.erb +5 -0
  39. data/lib/oboe/frameworks/rails/helpers/rum/rum_footer.js.erb +1 -0
  40. data/lib/oboe/frameworks/rails/helpers/rum/rum_header.js.erb +3 -0
  41. data/lib/oboe/frameworks/rails/inst/action_controller.rb +123 -0
  42. data/lib/oboe/frameworks/rails/inst/action_view.rb +56 -0
  43. data/lib/oboe/frameworks/rails/inst/action_view_2x.rb +54 -0
  44. data/lib/oboe/frameworks/rails/inst/action_view_30.rb +48 -0
  45. data/lib/oboe/frameworks/rails/inst/active_record.rb +24 -0
  46. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql.rb +43 -0
  47. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql2.rb +28 -0
  48. data/lib/oboe/frameworks/rails/inst/connection_adapters/oracle.rb +18 -0
  49. data/lib/oboe/frameworks/rails/inst/connection_adapters/postgresql.rb +30 -0
  50. data/lib/oboe/frameworks/rails/inst/connection_adapters/utils.rb +118 -0
  51. data/lib/oboe/frameworks/sinatra.rb +96 -0
  52. data/lib/oboe/frameworks/sinatra/templates.rb +56 -0
  53. data/lib/oboe/inst/cassandra.rb +281 -0
  54. data/lib/oboe/inst/dalli.rb +75 -0
  55. data/lib/oboe/inst/http.rb +72 -0
  56. data/lib/oboe/inst/memcache.rb +105 -0
  57. data/lib/oboe/inst/memcached.rb +96 -0
  58. data/lib/oboe/inst/mongo.rb +240 -0
  59. data/lib/oboe/inst/moped.rb +474 -0
  60. data/lib/oboe/inst/rack.rb +81 -0
  61. data/lib/oboe/inst/redis.rb +273 -0
  62. data/lib/oboe/inst/resque.rb +193 -0
  63. data/lib/oboe/instrumentation.rb +18 -0
  64. data/lib/oboe/loading.rb +98 -0
  65. data/lib/oboe/logger.rb +41 -0
  66. data/lib/oboe/ruby.rb +11 -0
  67. data/lib/oboe/util.rb +129 -0
  68. data/lib/oboe/version.rb +13 -0
  69. data/lib/oboe/xtrace.rb +52 -0
  70. data/lib/oboe_metal.rb +140 -0
  71. data/lib/rails/generators/oboe/install_generator.rb +76 -0
  72. data/lib/rails/generators/oboe/templates/oboe_initializer.rb +94 -0
  73. data/oboe.gemspec +29 -0
  74. data/release.sh +65 -0
  75. data/test/frameworks/apps/grape_simple.rb +10 -0
  76. data/test/frameworks/apps/padrino_simple.rb +41 -0
  77. data/test/frameworks/apps/sinatra_simple.rb +20 -0
  78. data/test/frameworks/grape_test.rb +27 -0
  79. data/test/frameworks/padrino_test.rb +25 -0
  80. data/test/frameworks/sinatra_test.rb +25 -0
  81. data/test/instrumentation/cassandra_test.rb +381 -0
  82. data/test/instrumentation/dalli_test.rb +164 -0
  83. data/test/instrumentation/http_test.rb +97 -0
  84. data/test/instrumentation/memcache_test.rb +251 -0
  85. data/test/instrumentation/memcached_test.rb +226 -0
  86. data/test/instrumentation/mongo_test.rb +462 -0
  87. data/test/instrumentation/moped_test.rb +473 -0
  88. data/test/instrumentation/rack_test.rb +73 -0
  89. data/test/instrumentation/redis_hashes_test.rb +265 -0
  90. data/test/instrumentation/redis_keys_test.rb +318 -0
  91. data/test/instrumentation/redis_lists_test.rb +310 -0
  92. data/test/instrumentation/redis_misc_test.rb +160 -0
  93. data/test/instrumentation/redis_sets_test.rb +293 -0
  94. data/test/instrumentation/redis_sortedsets_test.rb +325 -0
  95. data/test/instrumentation/redis_strings_test.rb +333 -0
  96. data/test/instrumentation/resque_test.rb +62 -0
  97. data/test/minitest_helper.rb +148 -0
  98. data/test/profiling/method_test.rb +198 -0
  99. data/test/support/config_test.rb +39 -0
  100. data/test/support/liboboe_settings_test.rb +46 -0
  101. data/test/support/xtrace_test.rb +35 -0
  102. metadata +200 -0
@@ -0,0 +1,473 @@
1
+ require 'minitest_helper'
2
+
3
+ if RUBY_VERSION >= '1.9.3'
4
+ # Moped is tested against MRI 1.9.3, 2.0.0, and JRuby (1.9).
5
+
6
+ describe Oboe::Inst::Moped do
7
+ before do
8
+ clear_all_traces
9
+ @session = Moped::Session.new([ "127.0.0.1:27017" ])
10
+ @session.use :moped_test
11
+ @users = @session[:users]
12
+ @users.insert({ :name => "Syd", :city => "Boston" })
13
+
14
+ # These are standard entry/exit KVs that are passed up with all moped operations
15
+ @entry_kvs = {
16
+ 'Layer' => 'mongo',
17
+ 'Label' => 'entry',
18
+ 'Flavor' => 'mongodb',
19
+ 'Database' => 'moped_test',
20
+ 'RemoteHost' => '127.0.0.1',
21
+ 'RemotePort' => '27017' }
22
+
23
+ @exit_kvs = { 'Layer' => 'mongo', 'Label' => 'exit' }
24
+ @collect_backtraces = Oboe::Config[:moped][:collect_backtraces]
25
+ end
26
+
27
+ after do
28
+ Oboe::Config[:moped][:collect_backtraces] = @collect_backtraces
29
+ end
30
+
31
+ it 'Stock Moped should be loaded, defined and ready' do
32
+ defined?(::Moped).wont_match nil
33
+ defined?(::Moped::Database).wont_match nil
34
+ defined?(::Moped::Indexes).wont_match nil
35
+ defined?(::Moped::Query).wont_match nil
36
+ defined?(::Moped::Collection).wont_match nil
37
+ end
38
+
39
+ it 'Moped should have oboe methods defined' do
40
+ #::Moped::Database
41
+ Oboe::Inst::Moped::DB_OPS.each do |m|
42
+ ::Moped::Database.method_defined?("#{m}_with_oboe").must_equal true
43
+ end
44
+ ::Moped::Database.method_defined?(:extract_trace_details).must_equal true
45
+ ::Moped::Database.method_defined?(:command_with_oboe).must_equal true
46
+ ::Moped::Database.method_defined?(:drop_with_oboe).must_equal true
47
+
48
+ #::Moped::Indexes
49
+ Oboe::Inst::Moped::INDEX_OPS.each do |m|
50
+ ::Moped::Indexes.method_defined?("#{m}_with_oboe").must_equal true
51
+ end
52
+ ::Moped::Indexes.method_defined?(:extract_trace_details).must_equal true
53
+ ::Moped::Indexes.method_defined?(:create_with_oboe).must_equal true
54
+ ::Moped::Indexes.method_defined?(:drop_with_oboe).must_equal true
55
+
56
+ #::Moped::Query
57
+ Oboe::Inst::Moped::QUERY_OPS.each do |m|
58
+ ::Moped::Query.method_defined?("#{m}_with_oboe").must_equal true
59
+ end
60
+ ::Moped::Query.method_defined?(:extract_trace_details).must_equal true
61
+
62
+ #::Moped::Collection
63
+ Oboe::Inst::Moped::COLLECTION_OPS.each do |m|
64
+ ::Moped::Collection.method_defined?("#{m}_with_oboe").must_equal true
65
+ end
66
+ ::Moped::Collection.method_defined?(:extract_trace_details).must_equal true
67
+ end
68
+
69
+ it 'should trace command' do
70
+ Oboe::API.start_trace('moped_test', '', {}) do
71
+ command = {}
72
+ command[:mapreduce] = "users"
73
+ command[:map] = "function() { emit(this.name, 1); }"
74
+ command[:reduce] = "function(k, vals) { var sum = 0;" +
75
+ " for(var i in vals) sum += vals[i]; return sum; }"
76
+ command[:out] = "inline: 1"
77
+ @session.command(command)
78
+ end
79
+
80
+ traces = get_all_traces
81
+
82
+ traces.count.must_equal 4
83
+ validate_outer_layers(traces, 'moped_test')
84
+
85
+ validate_event_keys(traces[1], @entry_kvs)
86
+ traces[1]['QueryOp'].must_equal "map_reduce"
87
+ traces[1]['Map_Function'].must_equal "function() { emit(this.name, 1); }"
88
+ traces[1]['Reduce_Function'].must_equal "function(k, vals) { var sum = 0;" +
89
+ " for(var i in vals) sum += vals[i]; return sum; }"
90
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
91
+ validate_event_keys(traces[2], @exit_kvs)
92
+ end
93
+
94
+ it 'should trace drop_collection' do
95
+ Oboe::API.start_trace('moped_test', '', {}) do
96
+ @users.drop
97
+ @session.drop
98
+ end
99
+
100
+ traces = get_all_traces
101
+
102
+ traces.count.must_equal 6
103
+ validate_outer_layers(traces, 'moped_test')
104
+
105
+ validate_event_keys(traces[1], @entry_kvs)
106
+ traces[1]['QueryOp'].must_equal "drop_collection"
107
+ traces[1]['Collection'].must_equal "users"
108
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
109
+ validate_event_keys(traces[2], @exit_kvs)
110
+
111
+ validate_event_keys(traces[3], @entry_kvs)
112
+ traces[3]['QueryOp'].must_equal "drop_database"
113
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
114
+ validate_event_keys(traces[4], @exit_kvs)
115
+ end
116
+
117
+ it 'should trace create_index, indexes and drop_indexes' do
118
+ Oboe::API.start_trace('moped_test', '', {}) do
119
+ @users.indexes.create({:name => 1}, {:unique => true})
120
+ @users.indexes.drop
121
+ end
122
+
123
+ traces = get_all_traces
124
+
125
+ traces.count.must_equal 10
126
+ validate_outer_layers(traces, 'moped_test')
127
+
128
+ validate_event_keys(traces[1], @entry_kvs)
129
+ traces[1]['QueryOp'].must_equal "indexes"
130
+ traces[1]['Collection'].must_equal "users"
131
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
132
+ validate_event_keys(traces[2], @exit_kvs)
133
+
134
+ validate_event_keys(traces[3], @entry_kvs)
135
+ traces[3]['QueryOp'].must_equal "create_index"
136
+ traces[3]['Key'].must_equal "{\"name\":1}"
137
+ traces[3]['Options'].must_equal "{\"unique\":true}"
138
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
139
+ validate_event_keys(traces[4], @exit_kvs)
140
+
141
+ validate_event_keys(traces[5], @entry_kvs)
142
+ traces[5]['QueryOp'].must_equal "indexes"
143
+ traces[5]['Collection'].must_equal "users"
144
+ traces[5].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
145
+ validate_event_keys(traces[6], @exit_kvs)
146
+
147
+ validate_event_keys(traces[7], @entry_kvs)
148
+ traces[7]['QueryOp'].must_equal "drop_indexes"
149
+ traces[7]['Key'].must_equal "all"
150
+ traces[7].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
151
+ validate_event_keys(traces[8], @exit_kvs)
152
+ end
153
+
154
+ it 'should trace find and count' do
155
+ Oboe::API.start_trace('moped_test', '', {}) do
156
+ @users.find.count
157
+ end
158
+
159
+ traces = get_all_traces
160
+
161
+ traces.count.must_equal 6
162
+ validate_outer_layers(traces, 'moped_test')
163
+
164
+ validate_event_keys(traces[1], @entry_kvs)
165
+ traces[1]['QueryOp'].must_equal "find"
166
+ traces[1]['Collection'].must_equal "users"
167
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
168
+ validate_event_keys(traces[2], @exit_kvs)
169
+
170
+ validate_event_keys(traces[3], @entry_kvs)
171
+ traces[3]['QueryOp'].must_equal "count"
172
+ traces[3]['Query'].must_equal "all"
173
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
174
+ validate_event_keys(traces[4], @exit_kvs)
175
+ end
176
+
177
+ it 'should trace find and sort' do
178
+ Oboe::API.start_trace('moped_test', '', {}) do
179
+ @users.find(:name => "Mary").sort(:city => 1, :created_at => -1)
180
+ end
181
+
182
+ traces = get_all_traces
183
+
184
+ traces.count.must_equal 6
185
+ validate_outer_layers(traces, 'moped_test')
186
+
187
+ validate_event_keys(traces[1], @entry_kvs)
188
+ traces[1]['QueryOp'].must_equal "find"
189
+ traces[1]['Query'].must_equal "{\"name\":\"Mary\"}"
190
+ traces[1]['Collection'].must_equal "users"
191
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
192
+ validate_event_keys(traces[2], @exit_kvs)
193
+
194
+ validate_event_keys(traces[3], @entry_kvs)
195
+ traces[3]['QueryOp'].must_equal "sort"
196
+ traces[3]['Query'].must_equal "{\"name\":\"Mary\"}"
197
+ traces[3]['Order'].must_equal "{:city=>1, :created_at=>-1}"
198
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
199
+ validate_event_keys(traces[4], @exit_kvs)
200
+ end
201
+
202
+ it 'should trace find with limit' do
203
+ Oboe::API.start_trace('moped_test', '', {}) do
204
+ @users.find(:name => "Mary").limit(1)
205
+ end
206
+
207
+ traces = get_all_traces
208
+
209
+ traces.count.must_equal 6
210
+ validate_outer_layers(traces, 'moped_test')
211
+
212
+ validate_event_keys(traces[1], @entry_kvs)
213
+ traces[1]['QueryOp'].must_equal "find"
214
+ traces[1]['Query'].must_equal "{\"name\":\"Mary\"}"
215
+ traces[1]['Collection'].must_equal "users"
216
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
217
+ validate_event_keys(traces[2], @exit_kvs)
218
+
219
+ validate_event_keys(traces[3], @entry_kvs)
220
+ traces[3]['QueryOp'].must_equal "limit"
221
+ traces[3]['Query'].must_equal "{\"name\":\"Mary\"}"
222
+ traces[3]['Limit'].must_equal "1"
223
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
224
+ validate_event_keys(traces[4], @exit_kvs)
225
+ end
226
+
227
+ it 'should trace find with distinct' do
228
+ Oboe::API.start_trace('moped_test', '', {}) do
229
+ @users.find(:name => "Mary").distinct(:city)
230
+ end
231
+
232
+ traces = get_all_traces
233
+
234
+ traces.count.must_equal 6
235
+ validate_outer_layers(traces, 'moped_test')
236
+
237
+ validate_event_keys(traces[1], @entry_kvs)
238
+ traces[1]['QueryOp'].must_equal "find"
239
+ traces[1]['Query'].must_equal "{\"name\":\"Mary\"}"
240
+ traces[1]['Collection'].must_equal "users"
241
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
242
+ validate_event_keys(traces[2], @exit_kvs)
243
+
244
+ validate_event_keys(traces[3], @entry_kvs)
245
+ traces[3]['QueryOp'].must_equal "distinct"
246
+ traces[3]['Query'].must_equal "{\"name\":\"Mary\"}"
247
+ traces[3]['Key'].must_equal "city"
248
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
249
+ validate_event_keys(traces[4], @exit_kvs)
250
+ end
251
+
252
+ it 'should trace find and update' do
253
+ Oboe::API.start_trace('moped_test', '', {}) do
254
+ @users.find(:name => "Mary").update({:name => "Tool"}, [:multi])
255
+ end
256
+
257
+ traces = get_all_traces
258
+
259
+ traces.count.must_equal 6
260
+ validate_outer_layers(traces, 'moped_test')
261
+
262
+ validate_event_keys(traces[1], @entry_kvs)
263
+ traces[1]['QueryOp'].must_equal "find"
264
+ traces[1]['Query'].must_equal "{\"name\":\"Mary\"}"
265
+ traces[1]['Collection'].must_equal "users"
266
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
267
+ validate_event_keys(traces[2], @exit_kvs)
268
+
269
+ validate_event_keys(traces[3], @entry_kvs)
270
+ traces[3]['QueryOp'].must_equal "update"
271
+ traces[3]['Update_Document'].must_equal "{\"name\":\"Tool\"}"
272
+ traces[3]['Flags'].must_equal "[:multi]"
273
+ traces[3]['Collection'].must_equal "users"
274
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
275
+ validate_event_keys(traces[4], @exit_kvs)
276
+ end
277
+
278
+ it 'should trace find and update_all' do
279
+ Oboe::API.start_trace('moped_test', '', {}) do
280
+ @users.find(:name => "Mary").update_all({:name => "Tool"})
281
+ end
282
+
283
+ traces = get_all_traces
284
+
285
+ traces.count.must_equal 6
286
+ validate_outer_layers(traces, 'moped_test')
287
+
288
+ validate_event_keys(traces[1], @entry_kvs)
289
+ traces[1]['QueryOp'].must_equal "find"
290
+ traces[1]['Query'].must_equal "{\"name\":\"Mary\"}"
291
+ traces[1]['Collection'].must_equal "users"
292
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
293
+ validate_event_keys(traces[2], @exit_kvs)
294
+
295
+ validate_event_keys(traces[3], @entry_kvs)
296
+ traces[3]['QueryOp'].must_equal "update_all"
297
+ traces[3]['Update_Document'].must_equal "{\"name\":\"Tool\"}"
298
+ traces[3]['Collection'].must_equal "users"
299
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
300
+ validate_event_keys(traces[4], @exit_kvs)
301
+ end
302
+
303
+ it 'should trace find and upsert' do
304
+ Oboe::API.start_trace('moped_test', '', {}) do
305
+ @users.find(:name => "Tool").upsert({:name => "Mary"})
306
+ end
307
+
308
+ traces = get_all_traces
309
+
310
+ traces.count.must_equal 6
311
+ validate_outer_layers(traces, 'moped_test')
312
+
313
+ validate_event_keys(traces[1], @entry_kvs)
314
+ traces[1]['QueryOp'].must_equal "find"
315
+ traces[1]['Query'].must_equal "{\"name\":\"Tool\"}"
316
+ traces[1]['Collection'].must_equal "users"
317
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
318
+ validate_event_keys(traces[2], @exit_kvs)
319
+
320
+ validate_event_keys(traces[3], @entry_kvs)
321
+ traces[3]['QueryOp'].must_equal "upsert"
322
+ traces[3]['Query'].must_equal "{\"name\":\"Tool\"}"
323
+ traces[3]['Update_Document'].must_equal "{\"name\":\"Mary\"}"
324
+ traces[3]['Collection'].must_equal "users"
325
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
326
+ validate_event_keys(traces[4], @exit_kvs)
327
+ end
328
+
329
+ it 'should trace find and explain' do
330
+ Oboe::API.start_trace('moped_test', '', {}) do
331
+ @users.find(:name => "Mary").explain
332
+ end
333
+
334
+ traces = get_all_traces
335
+
336
+ traces.count.must_equal 6
337
+ validate_outer_layers(traces, 'moped_test')
338
+
339
+ validate_event_keys(traces[1], @entry_kvs)
340
+ traces[1]['QueryOp'].must_equal "find"
341
+ traces[1]['Query'].must_equal "{\"name\":\"Mary\"}"
342
+ traces[1]['Collection'].must_equal "users"
343
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
344
+ validate_event_keys(traces[2], @exit_kvs)
345
+
346
+ validate_event_keys(traces[3], @entry_kvs)
347
+ traces[3]['QueryOp'].must_equal "explain"
348
+ traces[3]['Query'].must_equal "{\"name\":\"Mary\"}"
349
+ traces[3]['Collection'].must_equal "users"
350
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
351
+ validate_event_keys(traces[4], @exit_kvs)
352
+ end
353
+
354
+ it 'should trace 3 types of find and modify calls' do
355
+ Oboe::API.start_trace('moped_test', '', {}) do
356
+ @users.find(:likes => 1).modify({ "$set" => { :name => "Tool" }}, :upsert => true)
357
+ @users.find.modify({:query => { "$inc" => { :likes => 1 }}}, :new => true)
358
+ @users.find.modify({:query => {}}, :remove => true)
359
+ end
360
+
361
+ traces = get_all_traces
362
+
363
+ traces.count.must_equal 14
364
+ validate_outer_layers(traces, 'moped_test')
365
+
366
+ validate_event_keys(traces[1], @entry_kvs)
367
+ traces[1]['QueryOp'].must_equal "find"
368
+ traces[1]['Query'].must_equal "{\"likes\":1}"
369
+ traces[1]['Collection'].must_equal "users"
370
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
371
+ validate_event_keys(traces[2], @exit_kvs)
372
+
373
+ validate_event_keys(traces[3], @entry_kvs)
374
+ traces[3]['QueryOp'].must_equal "modify"
375
+ traces[3]['Update_Document'].must_equal "{\"likes\":1}"
376
+ traces[3]['Collection'].must_equal "users"
377
+ traces[3]['Options'].must_equal "{\"upsert\":true}"
378
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
379
+ validate_event_keys(traces[4], @exit_kvs)
380
+
381
+ validate_event_keys(traces[7], @entry_kvs)
382
+ traces[7]['QueryOp'].must_equal "modify"
383
+ traces[7]['Update_Document'].must_equal "all"
384
+ traces[7]['Collection'].must_equal "users"
385
+ traces[7]['Options'].must_equal "{\"new\":true}"
386
+ traces[7]['Change'].must_equal "{\"query\":{\"$inc\":{\"likes\":1}}}"
387
+ traces[7].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
388
+ validate_event_keys(traces[8], @exit_kvs)
389
+
390
+ validate_event_keys(traces[11], @entry_kvs)
391
+ traces[11]['Collection'].must_equal "users"
392
+ traces[11]['QueryOp'].must_equal "modify"
393
+ traces[11]['Update_Document'].must_equal "all"
394
+ traces[11]['Change'].must_equal "{\"query\":{}}"
395
+ traces[11]['Options'].must_equal "{\"remove\":true}"
396
+ traces[11].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
397
+ validate_event_keys(traces[12], @exit_kvs)
398
+ end
399
+
400
+ it 'should trace remove' do
401
+ Oboe::API.start_trace('moped_test', '', {}) do
402
+ @users.find(:name => "Tool").remove
403
+ end
404
+
405
+ traces = get_all_traces
406
+
407
+ traces.count.must_equal 6
408
+ validate_outer_layers(traces, 'moped_test')
409
+
410
+ validate_event_keys(traces[1], @entry_kvs)
411
+ traces[1]['QueryOp'].must_equal "find"
412
+ traces[1]['Query'].must_equal "{\"name\":\"Tool\"}"
413
+ traces[1]['Collection'].must_equal "users"
414
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
415
+ validate_event_keys(traces[2], @exit_kvs)
416
+
417
+ validate_event_keys(traces[3], @entry_kvs)
418
+ traces[3]['QueryOp'].must_equal "remove"
419
+ traces[3]['Query'].must_equal "{\"name\":\"Tool\"}"
420
+ traces[3]['Collection'].must_equal "users"
421
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
422
+ validate_event_keys(traces[4], @exit_kvs)
423
+ end
424
+
425
+ it 'should trace remove_all' do
426
+ Oboe::API.start_trace('moped_test', '', {}) do
427
+ @users.find(:name => "Mary").remove_all
428
+ end
429
+
430
+ traces = get_all_traces
431
+
432
+ traces.count.must_equal 6
433
+ validate_outer_layers(traces, 'moped_test')
434
+
435
+ validate_event_keys(traces[1], @entry_kvs)
436
+ traces[1]['QueryOp'].must_equal "find"
437
+ traces[1]['Query'].must_equal "{\"name\":\"Mary\"}"
438
+ traces[1]['Collection'].must_equal "users"
439
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
440
+ validate_event_keys(traces[2], @exit_kvs)
441
+
442
+ validate_event_keys(traces[3], @entry_kvs)
443
+ traces[3]['QueryOp'].must_equal "remove_all"
444
+ traces[3]['Query'].must_equal "{\"name\":\"Mary\"}"
445
+ traces[3]['Collection'].must_equal "users"
446
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:moped][:collect_backtraces]
447
+ validate_event_keys(traces[4], @exit_kvs)
448
+ end
449
+
450
+ it "should obey :collect_backtraces setting when true" do
451
+ Oboe::Config[:moped][:collect_backtraces] = true
452
+
453
+ Oboe::API.start_trace('moped_test', '', {}) do
454
+ @users.find(:name => "Mary").limit(1)
455
+ end
456
+
457
+ traces = get_all_traces
458
+ layer_has_key(traces, 'mongo', 'Backtrace')
459
+ end
460
+
461
+ it "should obey :collect_backtraces setting when false" do
462
+ Oboe::Config[:moped][:collect_backtraces] = false
463
+
464
+ Oboe::API.start_trace('moped_test', '', {}) do
465
+ @users.find(:name => "Mary").limit(1)
466
+ end
467
+
468
+ traces = get_all_traces
469
+ layer_doesnt_have_key(traces, 'mongo', 'Backtrace')
470
+ end
471
+ end
472
+
473
+ end