traceview 3.3.3 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +18 -18
  3. data/CHANGELOG.md +13 -0
  4. data/README.md +3 -1
  5. data/Rakefile +18 -9
  6. data/gemfiles/delayed_job.gemfile +38 -0
  7. data/gemfiles/frameworks.gemfile +1 -2
  8. data/gemfiles/libraries.gemfile +1 -2
  9. data/gemfiles/rails23.gemfile +1 -2
  10. data/gemfiles/rails30.gemfile +4 -2
  11. data/gemfiles/rails31.gemfile +4 -2
  12. data/gemfiles/rails32.gemfile +4 -2
  13. data/gemfiles/rails40.gemfile +4 -2
  14. data/gemfiles/rails41.gemfile +4 -2
  15. data/gemfiles/rails42.gemfile +4 -2
  16. data/lib/traceview/api/layerinit.rb +3 -5
  17. data/lib/traceview/api/logging.rb +63 -50
  18. data/lib/traceview/api/memcache.rb +10 -9
  19. data/lib/traceview/api/profiling.rb +6 -7
  20. data/lib/traceview/api/util.rb +1 -1
  21. data/lib/traceview/base.rb +21 -7
  22. data/lib/traceview/config.rb +8 -4
  23. data/lib/traceview/frameworks/padrino.rb +2 -2
  24. data/lib/traceview/frameworks/rails.rb +26 -32
  25. data/lib/traceview/frameworks/rails/inst/action_controller.rb +3 -3
  26. data/lib/traceview/frameworks/rails/inst/action_view.rb +4 -2
  27. data/lib/traceview/frameworks/rails/inst/action_view_2x.rb +4 -2
  28. data/lib/traceview/frameworks/rails/inst/action_view_30.rb +4 -2
  29. data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +3 -3
  30. data/lib/traceview/frameworks/sinatra.rb +1 -1
  31. data/lib/traceview/frameworks/sinatra/templates.rb +1 -1
  32. data/lib/traceview/inst/dalli.rb +4 -5
  33. data/lib/traceview/inst/delayed_job.rb +92 -0
  34. data/lib/traceview/inst/em-http-request.rb +3 -0
  35. data/lib/traceview/inst/excon.rb +3 -3
  36. data/lib/traceview/inst/faraday.rb +4 -1
  37. data/lib/traceview/inst/mongo.rb +10 -5
  38. data/lib/traceview/inst/moped.rb +4 -4
  39. data/lib/traceview/inst/redis.rb +5 -7
  40. data/lib/traceview/inst/resque.rb +3 -3
  41. data/lib/traceview/inst/rest-client.rb +2 -2
  42. data/lib/traceview/inst/sidekiq-client.rb +3 -0
  43. data/lib/traceview/inst/sidekiq-worker.rb +3 -0
  44. data/lib/traceview/inst/twitter-cassandra.rb +8 -4
  45. data/lib/traceview/test.rb +30 -1
  46. data/lib/traceview/util.rb +7 -0
  47. data/lib/traceview/version.rb +2 -2
  48. data/test/frameworks/rails3x_test.rb +12 -2
  49. data/test/frameworks/rails4x_test.rb +12 -2
  50. data/test/instrumentation/curb_test.rb +2 -2
  51. data/test/instrumentation/dalli_test.rb +121 -118
  52. data/test/instrumentation/httpclient_test.rb +0 -1
  53. data/test/jobs/delayed_job/db_worker_job.rb +29 -0
  54. data/test/jobs/delayed_job/error_worker_job.rb +10 -0
  55. data/test/jobs/delayed_job/remote_call_worker_job.rb +20 -0
  56. data/test/minitest_helper.rb +8 -3
  57. data/test/models/widget.rb +19 -0
  58. data/test/queues/delayed_job-client_test.rb +95 -0
  59. data/test/queues/delayed_job-worker_test.rb +91 -0
  60. data/test/servers/delayed_job.rb +102 -0
  61. data/test/servers/rails3x_8140.rb +17 -1
  62. data/test/servers/rails4x_8140.rb +18 -1
  63. data/test/support/auto_tracing.rb +40 -0
  64. data/test/support/config_test.rb +5 -1
  65. data/traceview.gemspec +1 -0
  66. metadata +34 -6
  67. data/test/instrumentation/delayed_job-client_test.rb +0 -128
  68. data/test/instrumentation/delayed_job-worker_test.rb +0 -177
@@ -18,7 +18,12 @@ if defined?(::Rails)
18
18
  traces = get_all_traces
19
19
 
20
20
  traces.count.must_equal 8
21
- valid_edges?(traces).must_equal true
21
+ unless defined?(JRUBY_VERSION)
22
+ # We don't test this under JRuby because the Java instrumentation
23
+ # for the DB drivers doesn't use our test reporter hence we won't
24
+ # see all trace events. :-( To be improved.
25
+ valid_edges?(traces).must_equal true
26
+ end
22
27
  validate_outer_layers(traces, 'rack')
23
28
 
24
29
  traces[0]['Layer'].must_equal "rack"
@@ -60,7 +65,12 @@ if defined?(::Rails)
60
65
  traces = get_all_traces
61
66
 
62
67
  traces.count.must_equal 5
63
- valid_edges?(traces).must_equal true
68
+ unless defined?(JRUBY_VERSION)
69
+ # We don't test this under JRuby because the Java instrumentation
70
+ # for the DB drivers doesn't use our test reporter hence we won't
71
+ # see all trace events. :-( To be improved.
72
+ valid_edges?(traces).must_equal true
73
+ end
64
74
  validate_outer_layers(traces, 'rack')
65
75
 
66
76
  traces[0]['Layer'].must_equal "rack"
@@ -18,7 +18,12 @@ if defined?(::Rails)
18
18
  traces = get_all_traces
19
19
 
20
20
  traces.count.must_equal 7
21
- valid_edges?(traces).must_equal true
21
+ unless defined?(JRUBY_VERSION)
22
+ # We don't test this under JRuby because the Java instrumentation
23
+ # for the DB drivers doesn't use our test reporter hence we won't
24
+ # see all trace events. :-( To be improved.
25
+ valid_edges?(traces).must_equal true
26
+ end
22
27
  validate_outer_layers(traces, 'rack')
23
28
 
24
29
  traces[0]['Layer'].must_equal "rack"
@@ -58,7 +63,12 @@ if defined?(::Rails)
58
63
  traces = get_all_traces
59
64
 
60
65
  traces.count.must_equal 5
61
- valid_edges?(traces).must_equal true
66
+ unless defined?(JRUBY_VERSION)
67
+ # We don't test this under JRuby because the Java instrumentation
68
+ # for the DB drivers doesn't use our test reporter hence we won't
69
+ # see all trace events. :-( To be improved.
70
+ valid_edges?(traces).must_equal true
71
+ end
62
72
  validate_outer_layers(traces, 'rack')
63
73
 
64
74
  traces[0]['Layer'].must_equal "rack"
@@ -283,7 +283,7 @@ if RUBY_VERSION > '1.8.7' && !defined?(JRUBY_VERSION)
283
283
  assert_equal 'entry', traces[1]['Label']
284
284
  assert_equal 1, traces[1]['IsService']
285
285
  assert_equal 'GET', traces[1]['HTTPMethod'], "HTTP Method"
286
- assert_equal "http://127.0.0.1:8101/?curb_cross_host=1&", traces[1]['RemoteURL']
286
+ assert_equal "http://127.0.0.1:8101/?curb_cross_host=1", traces[1]['RemoteURL']
287
287
  assert traces[1].key?('Backtrace')
288
288
 
289
289
  assert_equal 'curb', traces[5]['Layer']
@@ -466,7 +466,7 @@ if RUBY_VERSION > '1.8.7' && !defined?(JRUBY_VERSION)
466
466
 
467
467
  traces = get_all_traces
468
468
  assert_equal 7, traces.count, "Trace count"
469
- assert_equal "http://127.0.0.1:8101/?blah=1&", traces[1]['RemoteURL']
469
+ assert_equal "http://127.0.0.1:8101/?blah=1", traces[1]['RemoteURL']
470
470
  end
471
471
 
472
472
  def test_without_tracing_class_get
@@ -1,174 +1,177 @@
1
1
  # Copyright (c) 2015 AppNeta, Inc.
2
2
  # All rights reserved.
3
3
 
4
- require 'minitest_helper'
4
+ if RUBY_VERSION > '1.8.7'
5
5
 
6
- describe "Dalli" do
7
- before do
8
- clear_all_traces
9
- @dc = Dalli::Client.new
10
- @collect_backtraces = TraceView::Config[:dalli][:collect_backtraces]
11
- end
6
+ require 'minitest_helper'
12
7
 
13
- after do
14
- TraceView::Config[:dalli][:collect_backtraces] = @collect_backtraces
15
- end
8
+ describe "Dalli" do
9
+ before do
10
+ clear_all_traces
11
+ @dc = Dalli::Client.new
12
+ @collect_backtraces = TraceView::Config[:dalli][:collect_backtraces]
13
+ end
16
14
 
17
- it 'Stock Dalli should be loaded, defined and ready' do
18
- defined?(::Dalli).wont_match nil
19
- defined?(::Dalli::Client).wont_match nil
20
- end
15
+ after do
16
+ TraceView::Config[:dalli][:collect_backtraces] = @collect_backtraces
17
+ end
21
18
 
22
- it 'should have traceview methods defined' do
23
- [ :perform_with_traceview, :get_multi_with_traceview].each do |m|
24
- ::Dalli::Client.method_defined?(m).must_equal true
19
+ it 'Stock Dalli should be loaded, defined and ready' do
20
+ defined?(::Dalli).wont_match nil
21
+ defined?(::Dalli::Client).wont_match nil
25
22
  end
26
- end
27
23
 
28
- it 'should trace set' do
29
- TraceView::API.start_trace('dalli_test', '', {}) do
30
- @dc.set('some_key', 1234)
24
+ it 'should have traceview methods defined' do
25
+ [ :perform_with_traceview, :get_multi_with_traceview].each do |m|
26
+ ::Dalli::Client.method_defined?(m).must_equal true
27
+ end
31
28
  end
32
29
 
33
- traces = get_all_traces
34
- traces.count.must_equal 4
30
+ it 'should trace set' do
31
+ TraceView::API.start_trace('dalli_test', '', {}) do
32
+ @dc.set('some_key', 1234)
33
+ end
35
34
 
36
- validate_outer_layers(traces, 'dalli_test')
35
+ traces = get_all_traces
36
+ traces.count.must_equal 4
37
37
 
38
- traces[1].has_key?("KVOp").must_equal true
39
- traces[1].has_key?("KVKey").must_equal true
40
- traces[1]['Layer'].must_equal "memcache"
41
- traces[1]['KVKey'].must_equal "some_key"
42
- traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
43
- end
38
+ validate_outer_layers(traces, 'dalli_test')
44
39
 
45
- it 'should trace get' do
46
- TraceView::API.start_trace('dalli_test', '', {}) do
47
- @dc.get('some_key')
40
+ traces[1].has_key?("KVOp").must_equal true
41
+ traces[1].has_key?("KVKey").must_equal true
42
+ traces[1]['Layer'].must_equal "memcache"
43
+ traces[1]['KVKey'].must_equal "some_key"
44
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
48
45
  end
49
46
 
50
- traces = get_all_traces
51
- traces.count.must_equal 5
47
+ it 'should trace get' do
48
+ TraceView::API.start_trace('dalli_test', '', {}) do
49
+ @dc.get('some_key')
50
+ end
52
51
 
53
- validate_outer_layers(traces, 'dalli_test')
52
+ traces = get_all_traces
53
+ traces.count.must_equal 5
54
54
 
55
- traces[1]['KVOp'].must_equal "get"
56
- traces[1]['KVKey'].must_equal "some_key"
57
- traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
58
- traces[2]['Label'].must_equal "info"
59
- traces[2].has_key?('KVHit').must_equal true
60
- traces[3]['Label'].must_equal "exit"
61
- end
55
+ validate_outer_layers(traces, 'dalli_test')
62
56
 
63
- it 'should trace get_multi' do
64
- TraceView::API.start_trace('dalli_test', '', {}) do
65
- @dc.get_multi([:one, :two, :three, :four, :five, :six])
57
+ traces[1]['KVOp'].must_equal "get"
58
+ traces[1]['KVKey'].must_equal "some_key"
59
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
60
+ traces[2]['Label'].must_equal "info"
61
+ traces[2].has_key?('KVHit').must_equal true
62
+ traces[3]['Label'].must_equal "exit"
66
63
  end
67
64
 
68
- traces = get_all_traces
69
- traces.count.must_equal 5
70
-
71
- validate_outer_layers(traces, 'dalli_test')
65
+ it 'should trace get_multi' do
66
+ TraceView::API.start_trace('dalli_test', '', {}) do
67
+ @dc.get_multi([:one, :two, :three, :four, :five, :six])
68
+ end
72
69
 
73
- traces[1]['KVOp'].must_equal "get_multi"
74
- traces[2]['Label'].must_equal "info"
75
- traces[2]['RemoteHost'].must_equal "127.0.0.1:11211"
76
- traces[2].has_key?('KVKeyCount').must_equal true
77
- traces[2].has_key?('KVHitCount').must_equal true
78
- traces[3]['Label'].must_equal "exit"
79
- end
70
+ traces = get_all_traces
71
+ traces.count.must_equal 5
80
72
 
81
- it "should trace increment" do
82
- @dc.incr("dalli_key_counter", 1, nil, 0)
73
+ validate_outer_layers(traces, 'dalli_test')
83
74
 
84
- TraceView::API.start_trace('dalli_test', '', {}) do
85
- @dc.incr("dalli_key_counter")
75
+ traces[1]['KVOp'].must_equal "get_multi"
76
+ traces[2]['Label'].must_equal "info"
77
+ traces[2]['RemoteHost'].must_equal "127.0.0.1:11211"
78
+ traces[2].has_key?('KVKeyCount').must_equal true
79
+ traces[2].has_key?('KVHitCount').must_equal true
80
+ traces[3]['Label'].must_equal "exit"
86
81
  end
87
82
 
88
- traces = get_all_traces
89
- traces.count.must_equal 4
83
+ it "should trace increment" do
84
+ @dc.incr("dalli_key_counter", 1, nil, 0)
90
85
 
91
- validate_outer_layers(traces, 'dalli_test')
86
+ TraceView::API.start_trace('dalli_test', '', {}) do
87
+ @dc.incr("dalli_key_counter")
88
+ end
92
89
 
93
- traces[1]['KVOp'].must_equal "incr"
94
- traces[1]['KVKey'].must_equal "dalli_key_counter"
95
- traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
96
- traces[2]['Label'].must_equal "exit"
97
- end
90
+ traces = get_all_traces
91
+ traces.count.must_equal 4
98
92
 
99
- it "should trace decrement" do
100
- @dc.incr("dalli_key_counter", 1, nil, 0)
93
+ validate_outer_layers(traces, 'dalli_test')
101
94
 
102
- TraceView::API.start_trace('dalli_test', '', {}) do
103
- @dc.decr("dalli_key_counter")
95
+ traces[1]['KVOp'].must_equal "incr"
96
+ traces[1]['KVKey'].must_equal "dalli_key_counter"
97
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
98
+ traces[2]['Label'].must_equal "exit"
104
99
  end
105
100
 
106
- traces = get_all_traces
107
- traces.count.must_equal 4
101
+ it "should trace decrement" do
102
+ @dc.incr("dalli_key_counter", 1, nil, 0)
108
103
 
109
- validate_outer_layers(traces, 'dalli_test')
104
+ TraceView::API.start_trace('dalli_test', '', {}) do
105
+ @dc.decr("dalli_key_counter")
106
+ end
110
107
 
111
- traces[1]['KVOp'].must_equal "decr"
112
- traces[1]['KVKey'].must_equal "dalli_key_counter"
113
- traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
114
- traces[2]['Label'].must_equal "exit"
115
- end
108
+ traces = get_all_traces
109
+ traces.count.must_equal 4
116
110
 
117
- it "should trace replace" do
118
- @dc.set('some_key', 1)
111
+ validate_outer_layers(traces, 'dalli_test')
119
112
 
120
- TraceView::API.start_trace('dalli_test', '', {}) do
121
- @dc.replace("some_key", "woop")
113
+ traces[1]['KVOp'].must_equal "decr"
114
+ traces[1]['KVKey'].must_equal "dalli_key_counter"
115
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
116
+ traces[2]['Label'].must_equal "exit"
122
117
  end
123
118
 
124
- traces = get_all_traces
125
- traces.count.must_equal 4
119
+ it "should trace replace" do
120
+ @dc.set('some_key', 1)
126
121
 
127
- validate_outer_layers(traces, 'dalli_test')
122
+ TraceView::API.start_trace('dalli_test', '', {}) do
123
+ @dc.replace("some_key", "woop")
124
+ end
128
125
 
129
- traces[1]['KVOp'].must_equal "replace"
130
- traces[1]['KVKey'].must_equal "some_key"
131
- traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
132
- traces[2]['Label'].must_equal "exit"
133
- end
126
+ traces = get_all_traces
127
+ traces.count.must_equal 4
134
128
 
135
- it "should trace delete" do
136
- @dc.set('some_key', 1)
129
+ validate_outer_layers(traces, 'dalli_test')
137
130
 
138
- TraceView::API.start_trace('dalli_test', '', {}) do
139
- @dc.delete("some_key")
131
+ traces[1]['KVOp'].must_equal "replace"
132
+ traces[1]['KVKey'].must_equal "some_key"
133
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
134
+ traces[2]['Label'].must_equal "exit"
140
135
  end
141
136
 
142
- traces = get_all_traces
143
- traces.count.must_equal 4
137
+ it "should trace delete" do
138
+ @dc.set('some_key', 1)
144
139
 
145
- validate_outer_layers(traces, 'dalli_test')
140
+ TraceView::API.start_trace('dalli_test', '', {}) do
141
+ @dc.delete("some_key")
142
+ end
146
143
 
147
- traces[1]['KVOp'].must_equal "delete"
148
- traces[1]['KVKey'].must_equal "some_key"
149
- traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
150
- end
144
+ traces = get_all_traces
145
+ traces.count.must_equal 4
151
146
 
152
- it "should obey :collect_backtraces setting when true" do
153
- @dc.set('some_key', 1)
154
- TraceView::Config[:dalli][:collect_backtraces] = true
147
+ validate_outer_layers(traces, 'dalli_test')
155
148
 
156
- TraceView::API.start_trace('dalli_test', '', {}) do
157
- @dc.get('some_key')
149
+ traces[1]['KVOp'].must_equal "delete"
150
+ traces[1]['KVKey'].must_equal "some_key"
151
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
158
152
  end
159
153
 
160
- traces = get_all_traces
161
- layer_has_key(traces, 'memcache', 'Backtrace')
162
- end
154
+ it "should obey :collect_backtraces setting when true" do
155
+ @dc.set('some_key', 1)
156
+ TraceView::Config[:dalli][:collect_backtraces] = true
163
157
 
164
- it "should obey :collect_backtraces setting when false" do
165
- TraceView::Config[:dalli][:collect_backtraces] = false
158
+ TraceView::API.start_trace('dalli_test', '', {}) do
159
+ @dc.get('some_key')
160
+ end
166
161
 
167
- TraceView::API.start_trace('dalli_test', '', {}) do
168
- @dc.get('some_key')
162
+ traces = get_all_traces
163
+ layer_has_key(traces, 'memcache', 'Backtrace')
169
164
  end
170
165
 
171
- traces = get_all_traces
172
- layer_doesnt_have_key(traces, 'memcache', 'Backtrace')
166
+ it "should obey :collect_backtraces setting when false" do
167
+ TraceView::Config[:dalli][:collect_backtraces] = false
168
+
169
+ TraceView::API.start_trace('dalli_test', '', {}) do
170
+ @dc.get('some_key')
171
+ end
172
+
173
+ traces = get_all_traces
174
+ layer_doesnt_have_key(traces, 'memcache', 'Backtrace')
175
+ end
173
176
  end
174
177
  end
@@ -155,7 +155,6 @@ unless defined?(JRUBY_VERSION)
155
155
  Thread.pass until conn.finished?
156
156
 
157
157
  traces = get_all_traces
158
- #require 'byebug'; debugger
159
158
  assert_equal traces.count, 7
160
159
  valid_edges?(traces)
161
160
 
@@ -0,0 +1,29 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ class DJDBWorkerJob
5
+ @queue = :normal
6
+
7
+ def self.perform(*args)
8
+ return unless defined?(::Sequel) && !defined?(JRUBY_VERSION)
9
+
10
+ if ENV.key?('TRAVIS_MYSQL_PASS')
11
+ @db = Sequel.connect("mysql2://root:#{ENV['TRAVIS_MYSQL_PASS']}@127.0.0.1:3306/travis_ci_test")
12
+ else
13
+ @db = Sequel.connect('mysql2://root@127.0.0.1:3306/travis_ci_test')
14
+ end
15
+
16
+ unless @db.table_exists?(:items)
17
+ @db.create_table :items do
18
+ primary_key :id
19
+ String :name
20
+ Float :price
21
+ end
22
+ end
23
+
24
+ @db.run('select 1')
25
+
26
+ items = @db[:items]
27
+ items.count
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ class DJErrorWorkerJob
5
+ @queue = :critical
6
+
7
+ def self.perform(*args)
8
+ raise "This is a worker error yeah!"
9
+ end
10
+ end
@@ -0,0 +1,20 @@
1
+ # Copyright (c) 2015 AppNeta, Inc.
2
+ # All rights reserved.
3
+
4
+ class DJRemoteCallWorkerJob
5
+ @queue = :critical
6
+
7
+ def self.perform(*args)
8
+ # Make some random Dalli (memcache) calls and top it
9
+ # off with an excon call to the background rack webserver.
10
+ @dc = Dalli::Client.new
11
+ @dc.get(rand(10).to_s)
12
+ uri = URI('http://gameface.in/gamers')
13
+ http = Net::HTTP.new(uri.host, uri.port)
14
+ request = Net::HTTP::Get.new(uri.request_uri)
15
+ http.request(request)
16
+ @dc.get(rand(10).to_s)
17
+ @dc.get(rand(10).to_s)
18
+ @dc.get_multi([:one, :two, :three, :four, :five, :six])
19
+ end
20
+ end
@@ -49,16 +49,21 @@ TraceView.logger.level = Logger::DEBUG
49
49
  # puts %x{psql -c 'create database travis_ci_test;' -U postgres}
50
50
 
51
51
  # Our background Rack-app for http client testing
52
- require "./test/servers/rackapp_8101"
52
+ require './test/servers/rackapp_8101'
53
53
 
54
54
  # Conditionally load other background servers
55
55
  # depending on what we're testing
56
56
  #
57
57
  case File.basename(ENV['BUNDLE_GEMFILE'])
58
+ when /delayed_job/
59
+ require './test/servers/delayed_job'
60
+
58
61
  when /rails4/
59
- require "./test/servers/rails4x_8140"
62
+ require './test/servers/rails4x_8140'
63
+
60
64
  when /rails3/
61
- require "./test/servers/rails3x_8140"
65
+ require './test/servers/rails3x_8140'
66
+
62
67
  when /frameworks/
63
68
  when /libraries/
64
69
  if RUBY_VERSION >= '2.0'