oboe 2.2.6 → 2.3.2

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 (84) hide show
  1. data/.gitignore +6 -1
  2. data/Appraisals +20 -0
  3. data/Gemfile +16 -20
  4. data/README.md +280 -10
  5. data/Rakefile +63 -7
  6. data/ext/oboe_metal/extconf.rb +2 -1
  7. data/ext/oboe_metal/tests/test.rb +4 -0
  8. data/gemfiles/rails2.3.gemfile +18 -0
  9. data/gemfiles/rails2.3.gemfile.lock +95 -0
  10. data/gemfiles/rails3.0.gemfile +18 -0
  11. data/gemfiles/rails3.0.gemfile.lock +142 -0
  12. data/gemfiles/rails3.1.gemfile +18 -0
  13. data/gemfiles/rails3.1.gemfile.lock +152 -0
  14. data/gemfiles/rails3.2.gemfile +18 -0
  15. data/gemfiles/rails3.2.gemfile.lock +150 -0
  16. data/init.rb +1 -1
  17. data/lib/joboe_metal.rb +52 -34
  18. data/lib/method_profiling.rb +1 -1
  19. data/lib/oboe.rb +6 -5
  20. data/lib/oboe/api.rb +1 -1
  21. data/lib/oboe/api/layerinit.rb +3 -0
  22. data/lib/oboe/api/logging.rb +1 -1
  23. data/lib/oboe/api/memcache.rb +2 -2
  24. data/lib/oboe/api/profiling.rb +6 -4
  25. data/lib/oboe/api/tracing.rb +1 -1
  26. data/lib/oboe/api/util.rb +1 -1
  27. data/lib/oboe/config.rb +29 -10
  28. data/lib/oboe/frameworks/rails.rb +6 -7
  29. data/lib/oboe/frameworks/rails/inst/action_controller.rb +1 -1
  30. data/lib/oboe/frameworks/rails/inst/action_view.rb +3 -3
  31. data/lib/oboe/frameworks/rails/inst/action_view_2x.rb +3 -3
  32. data/lib/oboe/frameworks/rails/inst/action_view_30.rb +3 -3
  33. data/lib/oboe/frameworks/rails/inst/active_record.rb +1 -1
  34. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql.rb +1 -1
  35. data/lib/oboe/frameworks/rails/inst/connection_adapters/mysql2.rb +1 -1
  36. data/lib/oboe/frameworks/rails/inst/connection_adapters/oracle.rb +1 -1
  37. data/lib/oboe/frameworks/rails/inst/connection_adapters/postgresql.rb +1 -1
  38. data/lib/oboe/frameworks/rails/inst/connection_adapters/utils.rb +2 -2
  39. data/lib/oboe/inst/cassandra.rb +2 -2
  40. data/lib/oboe/inst/dalli.rb +8 -4
  41. data/lib/oboe/inst/http.rb +38 -34
  42. data/lib/oboe/inst/memcache.rb +12 -3
  43. data/lib/oboe/inst/memcached.rb +10 -5
  44. data/lib/oboe/inst/mongo.rb +19 -15
  45. data/lib/oboe/inst/moped.rb +120 -51
  46. data/lib/oboe/inst/rack.rb +14 -7
  47. data/lib/oboe/inst/resque.rb +2 -2
  48. data/lib/oboe/instrumentation.rb +3 -0
  49. data/lib/oboe/loading.rb +2 -6
  50. data/lib/oboe/logger.rb +3 -1
  51. data/lib/oboe/ruby.rb +3 -0
  52. data/lib/oboe/util.rb +2 -0
  53. data/lib/oboe/version.rb +5 -2
  54. data/lib/oboe_fu.rb +2 -0
  55. data/lib/oboe_metal.rb +23 -10
  56. data/lib/rails/generators/oboe/install_generator.rb +5 -3
  57. data/lib/rails/generators/oboe/templates/oboe_initializer.rb +24 -2
  58. data/oboe.gemspec +20 -14
  59. data/test/instrumentation/cassandra_test.rb +331 -0
  60. data/test/instrumentation/dalli_test.rb +157 -0
  61. data/test/instrumentation/http_test.rb +74 -0
  62. data/test/instrumentation/memcache_test.rb +251 -0
  63. data/test/instrumentation/memcached_test.rb +218 -0
  64. data/test/instrumentation/mongo_test.rb +406 -0
  65. data/test/instrumentation/moped_test.rb +468 -0
  66. data/test/instrumentation/rack_test.rb +55 -0
  67. data/test/instrumentation/resque_test.rb +62 -0
  68. data/test/minitest_helper.rb +113 -0
  69. data/test/support/config_test.rb +41 -0
  70. metadata +56 -35
  71. data/Gemfile.lock +0 -103
  72. data/Guardfile +0 -24
  73. data/install.rb +0 -1
  74. data/spec/instrumentation/cassandra_spec.rb +0 -18
  75. data/spec/instrumentation/dalli_spec.rb +0 -14
  76. data/spec/instrumentation/http_spec.rb +0 -14
  77. data/spec/instrumentation/memcache_spec.rb +0 -19
  78. data/spec/instrumentation/memcached_spec.rb +0 -22
  79. data/spec/instrumentation/mongo_spec.rb +0 -29
  80. data/spec/instrumentation/moped_spec.rb +0 -41
  81. data/spec/instrumentation/resque_spec.rb +0 -18
  82. data/spec/spec_helper.rb +0 -15
  83. data/spec/support/config_spec.rb +0 -27
  84. data/spec/support/oboe_spec.rb +0 -4
@@ -0,0 +1,157 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Oboe::Inst::Dalli do
4
+ before do
5
+ clear_all_traces
6
+ @dc = Dalli::Client.new
7
+ @collect_backtraces = Oboe::Config[:dalli][:collect_backtraces]
8
+ end
9
+
10
+ after do
11
+ Oboe::Config[:dalli][:collect_backtraces] = @collect_backtraces
12
+ end
13
+
14
+ it 'Stock Dalli should be loaded, defined and ready' do
15
+ defined?(::Dalli).wont_match nil
16
+ defined?(::Dalli::Client).wont_match nil
17
+ end
18
+
19
+ it 'should have oboe methods defined' do
20
+ [ :perform_with_oboe, :get_multi_with_oboe ].each do |m|
21
+ ::Dalli::Client.method_defined?(m).must_equal true
22
+ end
23
+ end
24
+
25
+ it 'should trace set' do
26
+ Oboe::API.start_trace('dalli_test', '', {}) do
27
+ @dc.get('some_key')
28
+ end
29
+
30
+ traces = get_all_traces
31
+ traces.count.must_equal 5
32
+
33
+ validate_outer_layers(traces, 'dalli_test')
34
+
35
+ traces[1].has_key?("KVOp").must_equal true
36
+ traces[1].has_key?("KVKey").must_equal true
37
+ traces[1]['Layer'].must_equal "memcache"
38
+ traces[1]['KVKey'].must_equal "some_key"
39
+
40
+ traces[2]['Layer'].must_equal "memcache"
41
+ traces[2]['Label'].must_equal "info"
42
+ traces[2].has_key?('KVHit')
43
+ end
44
+
45
+ it 'should trace get' do
46
+ Oboe::API.start_trace('dalli_test', '', {}) do
47
+ @dc.set('some_key', 1)
48
+ end
49
+
50
+ traces = get_all_traces
51
+ traces.count.must_equal 4
52
+
53
+ validate_outer_layers(traces, 'dalli_test')
54
+
55
+ traces[1]['KVOp'].must_equal "set"
56
+ traces[1]['KVKey'].must_equal "some_key"
57
+ traces[2]['Label'].must_equal "exit"
58
+ end
59
+
60
+ it 'should trace get_multi' do
61
+ Oboe::API.start_trace('dalli_test', '', {}) do
62
+ @dc.get_multi([:one, :two, :three, :four, :five, :six])
63
+ end
64
+
65
+ traces = get_all_traces
66
+ traces.count.must_equal 5
67
+
68
+ validate_outer_layers(traces, 'dalli_test')
69
+
70
+ traces[1]['KVOp'].must_equal "get_multi"
71
+ traces[2]['Label'].must_equal "info"
72
+ traces[2].has_key?('KVKeyCount').must_equal true
73
+ traces[2].has_key?('KVHitCount').must_equal true
74
+ traces[3]['Label'].must_equal "exit"
75
+ end
76
+
77
+ it "should trace increment" do
78
+ Oboe::API.start_trace('dalli_test', '', {}) do
79
+ @dc.incr("some_key_counter", 1, nil, 0)
80
+ end
81
+
82
+ traces = get_all_traces
83
+ traces.count.must_equal 4
84
+
85
+ validate_outer_layers(traces, 'dalli_test')
86
+
87
+ traces[1]['KVOp'].must_equal "incr"
88
+ traces[1]['KVKey'].must_equal "some_key_counter"
89
+ traces[2]['Label'].must_equal "exit"
90
+ end
91
+
92
+ it "should trace decrement" do
93
+ Oboe::API.start_trace('dalli_test', '', {}) do
94
+ @dc.decr("some_key_counter", 1, nil, 0)
95
+ end
96
+
97
+ traces = get_all_traces
98
+ traces.count.must_equal 4
99
+
100
+ validate_outer_layers(traces, 'dalli_test')
101
+
102
+ traces[1]['KVOp'].must_equal "decr"
103
+ traces[1]['KVKey'].must_equal "some_key_counter"
104
+ traces[2]['Label'].must_equal "exit"
105
+ end
106
+
107
+ it "should trace replace" do
108
+ Oboe::API.start_trace('dalli_test', '', {}) do
109
+ @dc.replace("some_key", "woop")
110
+ end
111
+
112
+ traces = get_all_traces
113
+ traces.count.must_equal 4
114
+
115
+ validate_outer_layers(traces, 'dalli_test')
116
+
117
+ traces[1]['KVOp'].must_equal "replace"
118
+ traces[1]['KVKey'].must_equal "some_key"
119
+ traces[2]['Label'].must_equal "exit"
120
+ end
121
+
122
+ it "should trace delete" do
123
+ Oboe::API.start_trace('dalli_test', '', {}) do
124
+ @dc.delete("some_key")
125
+ end
126
+
127
+ traces = get_all_traces
128
+ traces.count.must_equal 4
129
+
130
+ validate_outer_layers(traces, 'dalli_test')
131
+
132
+ traces[1]['KVOp'].must_equal "delete"
133
+ traces[1]['KVKey'].must_equal "some_key"
134
+ end
135
+
136
+ it "should obey :collect_backtraces setting when true" do
137
+ Oboe::Config[:dalli][:collect_backtraces] = true
138
+
139
+ Oboe::API.start_trace('dalli_test', '', {}) do
140
+ @dc.get('some_key')
141
+ end
142
+
143
+ traces = get_all_traces
144
+ layer_has_key(traces, 'memcache', 'Backtrace')
145
+ end
146
+
147
+ it "should obey :collect_backtraces setting when false" do
148
+ Oboe::Config[:dalli][:collect_backtraces] = false
149
+
150
+ Oboe::API.start_trace('dalli_test', '', {}) do
151
+ @dc.get('some_key')
152
+ end
153
+
154
+ traces = get_all_traces
155
+ layer_doesnt_have_key(traces, 'memcache', 'Backtrace')
156
+ end
157
+ end
@@ -0,0 +1,74 @@
1
+ require 'minitest_helper'
2
+ require 'net/http'
3
+
4
+ describe Oboe::Inst do
5
+ before do
6
+ clear_all_traces
7
+ @collect_backtraces = Oboe::Config[:nethttp][:collect_backtraces]
8
+ end
9
+
10
+ after do
11
+ Oboe::Config[:nethttp][:collect_backtraces] = @collect_backtraces
12
+ end
13
+
14
+ it 'Net::HTTP should be defined and ready' do
15
+ defined?(::Net::HTTP).wont_match nil
16
+ end
17
+
18
+ it 'Net::HTTP should have oboe methods defined' do
19
+ [ :request_with_oboe ].each do |m|
20
+ ::Net::HTTP.method_defined?(m).must_equal true
21
+ end
22
+ end
23
+
24
+ it "should trace a Net::HTTP request" do
25
+ Oboe::API.start_trace('net-http_test', '', {}) do
26
+ uri = URI('https://www.appneta.com')
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ http.use_ssl = true
29
+ http.get('/?q=test').read_body
30
+ end
31
+
32
+ traces = get_all_traces
33
+ traces.count.must_equal 5
34
+
35
+ validate_outer_layers(traces, 'net-http_test')
36
+
37
+ traces[1]['Layer'].must_equal 'net-http'
38
+ traces[2]['IsService'].must_equal "1"
39
+ traces[2]['RemoteProtocol'].must_equal "HTTPS"
40
+ traces[2]['RemoteHost'].must_equal "www.appneta.com"
41
+ traces[2]['ServiceArg'].must_equal "/?q=test"
42
+ traces[2]['HTTPMethod'].must_equal "GET"
43
+ traces[2]['HTTPStatus'].must_equal "200"
44
+ traces[2].has_key?('Backtrace').must_equal Oboe::Config[:nethttp][:collect_backtraces]
45
+ end
46
+
47
+ it "should obey :collect_backtraces setting when true" do
48
+ Oboe::Config[:nethttp][:collect_backtraces] = true
49
+
50
+ Oboe::API.start_trace('nethttp_test', '', {}) do
51
+ uri = URI('https://www.appneta.com')
52
+ http = Net::HTTP.new(uri.host, uri.port)
53
+ http.use_ssl = true
54
+ http.get('/?q=test').read_body
55
+ end
56
+
57
+ traces = get_all_traces
58
+ layer_has_key(traces, 'net-http', 'Backtrace')
59
+ end
60
+
61
+ it "should obey :collect_backtraces setting when false" do
62
+ Oboe::Config[:nethttp][:collect_backtraces] = false
63
+
64
+ Oboe::API.start_trace('nethttp_test', '', {}) do
65
+ uri = URI('https://www.appneta.com')
66
+ http = Net::HTTP.new(uri.host, uri.port)
67
+ http.use_ssl = true
68
+ http.get('/?q=test').read_body
69
+ end
70
+
71
+ traces = get_all_traces
72
+ layer_doesnt_have_key(traces, 'net-http', 'Backtrace')
73
+ end
74
+ end
@@ -0,0 +1,251 @@
1
+ require 'minitest_helper'
2
+ require 'memcache'
3
+
4
+ describe Oboe::API::Memcache do
5
+ before do
6
+ clear_all_traces
7
+ @mc = ::MemCache.new('localhost')
8
+
9
+ # These are standard entry/exit KVs that are passed up with all mongo operations
10
+ @entry_kvs = {
11
+ 'Layer' => 'memcache',
12
+ 'Label' => 'entry' }
13
+
14
+ @info_kvs = {
15
+ 'Layer' => 'memcache',
16
+ 'Label' => 'info' }
17
+
18
+ @exit_kvs = { 'Layer' => 'memcache', 'Label' => 'exit' }
19
+ @collect_backtraces = Oboe::Config[:memcache][:collect_backtraces]
20
+ end
21
+
22
+ after do
23
+ Oboe::Config[:memcache][:collect_backtraces] = @collect_backtraces
24
+ end
25
+
26
+ it 'Stock MemCache should be loaded, defined and ready' do
27
+ defined?(::MemCache).wont_match nil
28
+ end
29
+
30
+ it 'MemCache should have oboe methods defined' do
31
+ Oboe::API::Memcache::MEMCACHE_OPS.each do |m|
32
+ if ::MemCache.method_defined?(m)
33
+ ::MemCache.method_defined?("#{m}_with_oboe").must_equal true
34
+ end
35
+ ::MemCache.method_defined?(:request_setup_with_oboe).must_equal true
36
+ ::MemCache.method_defined?(:cache_get_with_oboe).must_equal true
37
+ ::MemCache.method_defined?(:get_multi_with_oboe).must_equal true
38
+ end
39
+ end
40
+
41
+ it "should trace set" do
42
+ Oboe::API.start_trace('memcache_test', '', {}) do
43
+ @mc.set('msg', 'blah')
44
+ end
45
+
46
+ traces = get_all_traces
47
+
48
+ traces.count.must_equal 5
49
+ validate_outer_layers(traces, 'memcache_test')
50
+
51
+ validate_event_keys(traces[1], @entry_kvs)
52
+
53
+ traces[1]['KVOp'].must_equal "set"
54
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
55
+
56
+ validate_event_keys(traces[2], @info_kvs)
57
+ traces[2]['KVKey'].must_equal "msg"
58
+ traces[2].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
59
+
60
+ validate_event_keys(traces[3], @exit_kvs)
61
+ end
62
+
63
+ it "should trace get" do
64
+ Oboe::API.start_trace('memcache_test', '', {}) do
65
+ @mc.get('msg')
66
+ end
67
+
68
+ traces = get_all_traces
69
+
70
+ traces.count.must_equal 6
71
+ validate_outer_layers(traces, 'memcache_test')
72
+
73
+ validate_event_keys(traces[1], @entry_kvs)
74
+
75
+ traces[1]['KVOp'].must_equal "get"
76
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
77
+
78
+ validate_event_keys(traces[2], @info_kvs)
79
+ traces[2]['KVKey'].must_equal "msg"
80
+ traces[2]['RemoteHost'].must_equal "localhost"
81
+ traces[2].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
82
+
83
+ traces[3].has_key?('KVHit').must_equal true
84
+ traces[3].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
85
+
86
+ validate_event_keys(traces[4], @exit_kvs)
87
+ end
88
+
89
+ it "should trace get_multi" do
90
+ Oboe::API.start_trace('memcache_test', '', {}) do
91
+ @mc.get_multi(['one', 'two', 'three', 'four', 'five', 'six'])
92
+ end
93
+
94
+ traces = get_all_traces
95
+
96
+ traces.count.must_equal 5
97
+ validate_outer_layers(traces, 'memcache_test')
98
+
99
+ validate_event_keys(traces[1], @entry_kvs)
100
+
101
+ traces[1]['KVOp'].must_equal "get_multi"
102
+
103
+ validate_event_keys(traces[2], @info_kvs)
104
+ traces[2]['KVKeyCount'].must_equal "6"
105
+ traces[2].has_key?('KVHitCount').must_equal true
106
+ traces[2].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
107
+
108
+ validate_event_keys(traces[3], @exit_kvs)
109
+ end
110
+
111
+ it "should trace add for existing key" do
112
+ @mc.set('testKey', 'x', 1200)
113
+ Oboe::API.start_trace('memcache_test', '', {}) do
114
+ @mc.add('testKey', 'x', 1200)
115
+ end
116
+
117
+ traces = get_all_traces
118
+
119
+ traces.count.must_equal 5
120
+ validate_outer_layers(traces, 'memcache_test')
121
+
122
+ validate_event_keys(traces[1], @entry_kvs)
123
+
124
+ traces[1]['KVOp'].must_equal "add"
125
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
126
+
127
+ validate_event_keys(traces[2], @info_kvs)
128
+ traces[2]['KVKey'].must_equal "testKey"
129
+
130
+ validate_event_keys(traces[3], @exit_kvs)
131
+ end
132
+
133
+ it "should trace append" do
134
+ @mc.set('rawKey', "Peanut Butter ", 600, :raw => true)
135
+ Oboe::API.start_trace('memcache_test', '', {}) do
136
+ @mc.append('rawKey', "Jelly")
137
+ end
138
+
139
+ traces = get_all_traces
140
+
141
+ traces.count.must_equal 5
142
+ validate_outer_layers(traces, 'memcache_test')
143
+
144
+ validate_event_keys(traces[1], @entry_kvs)
145
+
146
+ traces[1]['KVOp'].must_equal "append"
147
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
148
+
149
+ validate_event_keys(traces[2], @info_kvs)
150
+
151
+ traces[2]['KVKey'].must_equal "rawKey"
152
+ traces[2].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
153
+
154
+ validate_event_keys(traces[3], @exit_kvs)
155
+ end
156
+
157
+ it "should trace decr" do
158
+ Oboe::API.start_trace('memcache_test', '', {}) do
159
+ @mc.decr('some_key_counter', 1)
160
+ end
161
+
162
+ traces = get_all_traces
163
+
164
+ traces.count.must_equal 5
165
+ validate_outer_layers(traces, 'memcache_test')
166
+
167
+ validate_event_keys(traces[1], @entry_kvs)
168
+
169
+ traces[1]['KVOp'].must_equal "decr"
170
+ traces[1].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
171
+
172
+ traces[2]['KVKey'].must_equal "some_key_counter"
173
+ traces[2].has_key?('Backtrace').must_equal Oboe::Config[:memcache][:collect_backtraces]
174
+
175
+ validate_event_keys(traces[3], @exit_kvs)
176
+ end
177
+
178
+ it "should trace increment" do
179
+ Oboe::API.start_trace('memcache_test', '', {}) do
180
+ @mc.incr("some_key_counter", 1)
181
+ end
182
+
183
+ traces = get_all_traces
184
+
185
+ traces.count.must_equal 5
186
+ validate_outer_layers(traces, 'memcache_test')
187
+
188
+ validate_event_keys(traces[1], @entry_kvs)
189
+ traces[1]['KVOp'].must_equal "incr"
190
+ validate_event_keys(traces[2], @info_kvs)
191
+ traces[2]['KVKey'].must_equal "some_key_counter"
192
+ validate_event_keys(traces[3], @exit_kvs)
193
+ end
194
+
195
+ it "should trace replace" do
196
+ @mc.set("some_key", "blah")
197
+ Oboe::API.start_trace('memcache_test', '', {}) do
198
+ @mc.replace("some_key", "woop")
199
+ end
200
+
201
+ traces = get_all_traces
202
+
203
+ traces.count.must_equal 5
204
+ validate_outer_layers(traces, 'memcache_test')
205
+
206
+ validate_event_keys(traces[1], @entry_kvs)
207
+ traces[1]['KVOp'].must_equal "replace"
208
+ traces[2]['KVKey'].must_equal "some_key"
209
+ validate_event_keys(traces[2], @info_kvs)
210
+ validate_event_keys(traces[3], @exit_kvs)
211
+ end
212
+
213
+ it "should trace delete" do
214
+ Oboe::API.start_trace('memcache_test', '', {}) do
215
+ @mc.delete("some_key")
216
+ end
217
+
218
+ traces = get_all_traces
219
+
220
+ traces.count.must_equal 5
221
+ validate_outer_layers(traces, 'memcache_test')
222
+
223
+ validate_event_keys(traces[1], @entry_kvs)
224
+ traces[1]['KVOp'].must_equal "delete"
225
+ traces[2]['KVKey'].must_equal "some_key"
226
+ validate_event_keys(traces[2], @info_kvs)
227
+ validate_event_keys(traces[3], @exit_kvs)
228
+ end
229
+
230
+ it "should obey :collect_backtraces setting when true" do
231
+ Oboe::Config[:memcache][:collect_backtraces] = true
232
+
233
+ Oboe::API.start_trace('memcache_test', '', {}) do
234
+ @mc.set('some_key', 1)
235
+ end
236
+
237
+ traces = get_all_traces
238
+ layer_has_key(traces, 'memcache', 'Backtrace')
239
+ end
240
+
241
+ it "should obey :collect_backtraces setting when false" do
242
+ Oboe::Config[:memcache][:collect_backtraces] = false
243
+
244
+ Oboe::API.start_trace('memcache_test', '', {}) do
245
+ @mc.set('some_key', 1)
246
+ end
247
+
248
+ traces = get_all_traces
249
+ layer_doesnt_have_key(traces, 'memcache', 'Backtrace')
250
+ end
251
+ end