traceview 3.0.0

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 (137) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rubocop.yml +5 -0
  4. data/.travis.yml +58 -0
  5. data/Appraisals +10 -0
  6. data/CHANGELOG.md +490 -0
  7. data/CONFIG.md +16 -0
  8. data/Gemfile +95 -0
  9. data/LICENSE +199 -0
  10. data/README.md +380 -0
  11. data/Rakefile +109 -0
  12. data/examples/DNT.md +35 -0
  13. data/examples/carrying_context.rb +225 -0
  14. data/examples/instrumenting_metal_controller.rb +8 -0
  15. data/examples/puma_on_heroku_config.rb +17 -0
  16. data/examples/tracing_async_threads.rb +125 -0
  17. data/examples/tracing_background_jobs.rb +52 -0
  18. data/examples/tracing_forked_processes.rb +100 -0
  19. data/examples/unicorn_on_heroku_config.rb +28 -0
  20. data/ext/oboe_metal/extconf.rb +61 -0
  21. data/ext/oboe_metal/noop/noop.c +7 -0
  22. data/ext/oboe_metal/src/bson/bson.h +221 -0
  23. data/ext/oboe_metal/src/bson/platform_hacks.h +91 -0
  24. data/ext/oboe_metal/src/oboe.h +275 -0
  25. data/ext/oboe_metal/src/oboe.hpp +352 -0
  26. data/ext/oboe_metal/src/oboe_wrap.cxx +3886 -0
  27. data/ext/oboe_metal/tests/test.rb +11 -0
  28. data/gemfiles/mongo.gemfile +33 -0
  29. data/gemfiles/moped.gemfile +33 -0
  30. data/get_version.rb +5 -0
  31. data/init.rb +4 -0
  32. data/lib/joboe_metal.rb +206 -0
  33. data/lib/oboe.rb +7 -0
  34. data/lib/oboe/README +2 -0
  35. data/lib/oboe/backward_compatibility.rb +59 -0
  36. data/lib/oboe/inst/rack.rb +11 -0
  37. data/lib/oboe_metal.rb +151 -0
  38. data/lib/rails/generators/traceview/install_generator.rb +76 -0
  39. data/lib/rails/generators/traceview/templates/traceview_initializer.rb +159 -0
  40. data/lib/traceview.rb +62 -0
  41. data/lib/traceview/api.rb +18 -0
  42. data/lib/traceview/api/layerinit.rb +51 -0
  43. data/lib/traceview/api/logging.rb +209 -0
  44. data/lib/traceview/api/memcache.rb +31 -0
  45. data/lib/traceview/api/profiling.rb +50 -0
  46. data/lib/traceview/api/tracing.rb +135 -0
  47. data/lib/traceview/api/util.rb +121 -0
  48. data/lib/traceview/base.rb +225 -0
  49. data/lib/traceview/config.rb +238 -0
  50. data/lib/traceview/frameworks/grape.rb +97 -0
  51. data/lib/traceview/frameworks/padrino.rb +64 -0
  52. data/lib/traceview/frameworks/padrino/templates.rb +58 -0
  53. data/lib/traceview/frameworks/rails.rb +145 -0
  54. data/lib/traceview/frameworks/rails/helpers/rum/rum_ajax_header.js.erb +5 -0
  55. data/lib/traceview/frameworks/rails/helpers/rum/rum_footer.js.erb +1 -0
  56. data/lib/traceview/frameworks/rails/helpers/rum/rum_header.js.erb +3 -0
  57. data/lib/traceview/frameworks/rails/inst/action_controller.rb +216 -0
  58. data/lib/traceview/frameworks/rails/inst/action_view.rb +56 -0
  59. data/lib/traceview/frameworks/rails/inst/action_view_2x.rb +54 -0
  60. data/lib/traceview/frameworks/rails/inst/action_view_30.rb +48 -0
  61. data/lib/traceview/frameworks/rails/inst/active_record.rb +24 -0
  62. data/lib/traceview/frameworks/rails/inst/connection_adapters/mysql.rb +43 -0
  63. data/lib/traceview/frameworks/rails/inst/connection_adapters/mysql2.rb +28 -0
  64. data/lib/traceview/frameworks/rails/inst/connection_adapters/oracle.rb +18 -0
  65. data/lib/traceview/frameworks/rails/inst/connection_adapters/postgresql.rb +30 -0
  66. data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +117 -0
  67. data/lib/traceview/frameworks/sinatra.rb +95 -0
  68. data/lib/traceview/frameworks/sinatra/templates.rb +56 -0
  69. data/lib/traceview/inst/cassandra.rb +279 -0
  70. data/lib/traceview/inst/dalli.rb +86 -0
  71. data/lib/traceview/inst/em-http-request.rb +99 -0
  72. data/lib/traceview/inst/excon.rb +111 -0
  73. data/lib/traceview/inst/faraday.rb +73 -0
  74. data/lib/traceview/inst/http.rb +87 -0
  75. data/lib/traceview/inst/httpclient.rb +173 -0
  76. data/lib/traceview/inst/memcache.rb +102 -0
  77. data/lib/traceview/inst/memcached.rb +94 -0
  78. data/lib/traceview/inst/mongo.rb +238 -0
  79. data/lib/traceview/inst/moped.rb +474 -0
  80. data/lib/traceview/inst/rack.rb +122 -0
  81. data/lib/traceview/inst/redis.rb +271 -0
  82. data/lib/traceview/inst/resque.rb +192 -0
  83. data/lib/traceview/inst/rest-client.rb +38 -0
  84. data/lib/traceview/inst/sequel.rb +162 -0
  85. data/lib/traceview/inst/typhoeus.rb +102 -0
  86. data/lib/traceview/instrumentation.rb +21 -0
  87. data/lib/traceview/loading.rb +94 -0
  88. data/lib/traceview/logger.rb +41 -0
  89. data/lib/traceview/method_profiling.rb +84 -0
  90. data/lib/traceview/ruby.rb +36 -0
  91. data/lib/traceview/support.rb +113 -0
  92. data/lib/traceview/thread_local.rb +26 -0
  93. data/lib/traceview/util.rb +250 -0
  94. data/lib/traceview/version.rb +16 -0
  95. data/lib/traceview/xtrace.rb +90 -0
  96. data/test/frameworks/apps/grape_nested.rb +30 -0
  97. data/test/frameworks/apps/grape_simple.rb +24 -0
  98. data/test/frameworks/apps/padrino_simple.rb +45 -0
  99. data/test/frameworks/apps/sinatra_simple.rb +24 -0
  100. data/test/frameworks/grape_test.rb +142 -0
  101. data/test/frameworks/padrino_test.rb +30 -0
  102. data/test/frameworks/sinatra_test.rb +30 -0
  103. data/test/instrumentation/cassandra_test.rb +380 -0
  104. data/test/instrumentation/dalli_test.rb +171 -0
  105. data/test/instrumentation/em_http_request_test.rb +86 -0
  106. data/test/instrumentation/excon_test.rb +207 -0
  107. data/test/instrumentation/faraday_test.rb +235 -0
  108. data/test/instrumentation/http_test.rb +140 -0
  109. data/test/instrumentation/httpclient_test.rb +296 -0
  110. data/test/instrumentation/memcache_test.rb +251 -0
  111. data/test/instrumentation/memcached_test.rb +226 -0
  112. data/test/instrumentation/mongo_test.rb +462 -0
  113. data/test/instrumentation/moped_test.rb +496 -0
  114. data/test/instrumentation/rack_test.rb +116 -0
  115. data/test/instrumentation/redis_hashes_test.rb +265 -0
  116. data/test/instrumentation/redis_keys_test.rb +318 -0
  117. data/test/instrumentation/redis_lists_test.rb +310 -0
  118. data/test/instrumentation/redis_misc_test.rb +160 -0
  119. data/test/instrumentation/redis_sets_test.rb +293 -0
  120. data/test/instrumentation/redis_sortedsets_test.rb +325 -0
  121. data/test/instrumentation/redis_strings_test.rb +333 -0
  122. data/test/instrumentation/resque_test.rb +62 -0
  123. data/test/instrumentation/rest-client_test.rb +294 -0
  124. data/test/instrumentation/sequel_mysql2_test.rb +326 -0
  125. data/test/instrumentation/sequel_mysql_test.rb +326 -0
  126. data/test/instrumentation/sequel_pg_test.rb +330 -0
  127. data/test/instrumentation/typhoeus_test.rb +285 -0
  128. data/test/minitest_helper.rb +187 -0
  129. data/test/profiling/method_test.rb +198 -0
  130. data/test/servers/rackapp_8101.rb +22 -0
  131. data/test/support/backcompat_test.rb +269 -0
  132. data/test/support/config_test.rb +128 -0
  133. data/test/support/dnt_test.rb +73 -0
  134. data/test/support/liboboe_settings_test.rb +104 -0
  135. data/test/support/xtrace_test.rb +35 -0
  136. data/traceview.gemspec +29 -0
  137. metadata +250 -0
@@ -0,0 +1,171 @@
1
+ require 'minitest_helper'
2
+
3
+ describe "Dalli" do
4
+ before do
5
+ clear_all_traces
6
+ @dc = Dalli::Client.new
7
+ @collect_backtraces = TraceView::Config[:dalli][:collect_backtraces]
8
+ end
9
+
10
+ after do
11
+ TraceView::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 traceview methods defined' do
20
+ [ :perform_with_traceview, :get_multi_with_traceview].each do |m|
21
+ ::Dalli::Client.method_defined?(m).must_equal true
22
+ end
23
+ end
24
+
25
+ it 'should trace set' do
26
+ TraceView::API.start_trace('dalli_test', '', {}) do
27
+ @dc.set('some_key', 1234)
28
+ end
29
+
30
+ traces = get_all_traces
31
+ traces.count.must_equal 4
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
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
40
+ end
41
+
42
+ it 'should trace get' do
43
+ TraceView::API.start_trace('dalli_test', '', {}) do
44
+ @dc.get('some_key')
45
+ end
46
+
47
+ traces = get_all_traces
48
+ traces.count.must_equal 5
49
+
50
+ validate_outer_layers(traces, 'dalli_test')
51
+
52
+ traces[1]['KVOp'].must_equal "get"
53
+ traces[1]['KVKey'].must_equal "some_key"
54
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
55
+ traces[2]['Label'].must_equal "info"
56
+ traces[2].has_key?('KVHit').must_equal true
57
+ traces[3]['Label'].must_equal "exit"
58
+ end
59
+
60
+ it 'should trace get_multi' do
61
+ TraceView::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]['RemoteHost'].must_equal "127.0.0.1:11211"
73
+ traces[2].has_key?('KVKeyCount').must_equal true
74
+ traces[2].has_key?('KVHitCount').must_equal true
75
+ traces[3]['Label'].must_equal "exit"
76
+ end
77
+
78
+ it "should trace increment" do
79
+ @dc.incr("dalli_key_counter", 1, nil, 0)
80
+
81
+ TraceView::API.start_trace('dalli_test', '', {}) do
82
+ @dc.incr("dalli_key_counter")
83
+ end
84
+
85
+ traces = get_all_traces
86
+ traces.count.must_equal 4
87
+
88
+ validate_outer_layers(traces, 'dalli_test')
89
+
90
+ traces[1]['KVOp'].must_equal "incr"
91
+ traces[1]['KVKey'].must_equal "dalli_key_counter"
92
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
93
+ traces[2]['Label'].must_equal "exit"
94
+ end
95
+
96
+ it "should trace decrement" do
97
+ @dc.incr("dalli_key_counter", 1, nil, 0)
98
+
99
+ TraceView::API.start_trace('dalli_test', '', {}) do
100
+ @dc.decr("dalli_key_counter")
101
+ end
102
+
103
+ traces = get_all_traces
104
+ traces.count.must_equal 4
105
+
106
+ validate_outer_layers(traces, 'dalli_test')
107
+
108
+ traces[1]['KVOp'].must_equal "decr"
109
+ traces[1]['KVKey'].must_equal "dalli_key_counter"
110
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
111
+ traces[2]['Label'].must_equal "exit"
112
+ end
113
+
114
+ it "should trace replace" do
115
+ @dc.set('some_key', 1)
116
+
117
+ TraceView::API.start_trace('dalli_test', '', {}) do
118
+ @dc.replace("some_key", "woop")
119
+ end
120
+
121
+ traces = get_all_traces
122
+ traces.count.must_equal 4
123
+
124
+ validate_outer_layers(traces, 'dalli_test')
125
+
126
+ traces[1]['KVOp'].must_equal "replace"
127
+ traces[1]['KVKey'].must_equal "some_key"
128
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
129
+ traces[2]['Label'].must_equal "exit"
130
+ end
131
+
132
+ it "should trace delete" do
133
+ @dc.set('some_key', 1)
134
+
135
+ TraceView::API.start_trace('dalli_test', '', {}) do
136
+ @dc.delete("some_key")
137
+ end
138
+
139
+ traces = get_all_traces
140
+ traces.count.must_equal 4
141
+
142
+ validate_outer_layers(traces, 'dalli_test')
143
+
144
+ traces[1]['KVOp'].must_equal "delete"
145
+ traces[1]['KVKey'].must_equal "some_key"
146
+ traces[1]['RemoteHost'].must_equal "127.0.0.1:11211"
147
+ end
148
+
149
+ it "should obey :collect_backtraces setting when true" do
150
+ @dc.set('some_key', 1)
151
+ TraceView::Config[:dalli][:collect_backtraces] = true
152
+
153
+ TraceView::API.start_trace('dalli_test', '', {}) do
154
+ @dc.get('some_key')
155
+ end
156
+
157
+ traces = get_all_traces
158
+ layer_has_key(traces, 'memcache', 'Backtrace')
159
+ end
160
+
161
+ it "should obey :collect_backtraces setting when false" do
162
+ TraceView::Config[:dalli][:collect_backtraces] = false
163
+
164
+ TraceView::API.start_trace('dalli_test', '', {}) do
165
+ @dc.get('some_key')
166
+ end
167
+
168
+ traces = get_all_traces
169
+ layer_doesnt_have_key(traces, 'memcache', 'Backtrace')
170
+ end
171
+ end
@@ -0,0 +1,86 @@
1
+ require 'minitest_helper'
2
+
3
+ # Disable this test on JRuby until we can investigate
4
+ # "SOCKET: SET COMM INACTIVITY UNIMPLEMENTED 10"
5
+ # https://travis-ci.org/appneta/traceview-ruby/jobs/33745752
6
+ if RUBY_VERSION >= '1.9' and TraceView::Config[:em_http_request][:enabled] and not defined?(JRUBY_VERSION)
7
+
8
+ describe "EventMachine" do
9
+ before do
10
+ clear_all_traces
11
+ @collect_backtraces = TraceView::Config[:em_http_request][:collect_backtraces]
12
+ end
13
+
14
+ after do
15
+ TraceView::Config[:em_http_request][:collect_backtraces] = @collect_backtraces
16
+ end
17
+
18
+ it 'EventMachine::HttpConnection should be loaded, defined and ready' do
19
+ defined?(::EventMachine::HttpConnection).wont_match nil
20
+ end
21
+
22
+ it 'should have traceview methods defined' do
23
+ ::EventMachine::HttpConnection.method_defined?("setup_request_with_traceview").must_equal true
24
+ end
25
+
26
+ it 'should trace request' do
27
+ TraceView::API.start_trace('em-http-request_test', '', {}) do
28
+ EventMachine.run do
29
+ http = EventMachine::HttpRequest.new('http://appneta.com/').get
30
+ http.callback do
31
+ EventMachine.stop
32
+ end
33
+ end
34
+ end
35
+
36
+ traces = get_all_traces
37
+
38
+ traces.count.must_equal 4
39
+ validate_outer_layers(traces, 'em-http-request_test')
40
+
41
+ traces[1]["Layer"].must_equal "em-http-request"
42
+ traces[1]["Label"].must_equal "entry"
43
+ traces[1]["IsService"].must_equal "1"
44
+ traces[1]["RemoteURL"].must_equal "http://appneta.com/"
45
+ traces[1].has_key?('Backtrace').must_equal TraceView::Config[:em_http_request][:collect_backtraces]
46
+
47
+ traces[2]["Layer"].must_equal "em-http-request"
48
+ traces[2]["Label"].must_equal "exit"
49
+ traces[2]["Async"].must_equal "1"
50
+ traces[2].has_key?('Backtrace').must_equal TraceView::Config[:em_http_request][:collect_backtraces]
51
+ end
52
+
53
+ it "should obey :collect_backtraces setting when true" do
54
+ TraceView::Config[:em_http_request][:collect_backtraces] = true
55
+
56
+ TraceView::API.start_trace('em-http-request_test', '', {}) do
57
+ EventMachine.run do
58
+ http = EventMachine::HttpRequest.new('http://appneta.com/').get
59
+ http.callback do
60
+ EventMachine.stop
61
+ end
62
+ end
63
+ end
64
+
65
+ traces = get_all_traces
66
+ layer_has_key(traces, 'em-http-request', 'Backtrace')
67
+ end
68
+
69
+ it "should obey :collect_backtraces setting when false" do
70
+ TraceView::Config[:em_http_request][:collect_backtraces] = false
71
+
72
+ TraceView::API.start_trace('em-http-request_test', '', {}) do
73
+ EventMachine.run do
74
+ http = EventMachine::HttpRequest.new('http://appneta.com/').get
75
+ http.callback do
76
+ EventMachine.stop
77
+ end
78
+ end
79
+ end
80
+
81
+ traces = get_all_traces
82
+ layer_doesnt_have_key(traces, 'em-http-request', 'Backtrace')
83
+ end
84
+ end
85
+
86
+ end # unless defined?(JRUBY_VERSION)
@@ -0,0 +1,207 @@
1
+ require 'minitest_helper'
2
+ require 'traceview/inst/rack'
3
+ require File.expand_path(File.dirname(__FILE__) + '../../frameworks/apps/sinatra_simple')
4
+
5
+ class ExconTest < Minitest::Test
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ SinatraSimple
10
+ end
11
+
12
+ def test_must_return_xtrace_header
13
+ clear_all_traces
14
+ get "/"
15
+ xtrace = last_response['X-Trace']
16
+ assert xtrace
17
+ assert TraceView::XTrace.valid?(xtrace)
18
+ end
19
+
20
+ def test_reports_version_init
21
+ init_kvs = ::TraceView::Util.build_init_report
22
+ assert init_kvs.key?('Ruby.Excon.Version')
23
+ assert_equal init_kvs['Ruby.Excon.Version'], "Excon-#{::Excon::VERSION}"
24
+ end
25
+
26
+ def test_class_get_request
27
+ clear_all_traces
28
+
29
+ TraceView::API.start_trace('excon_tests') do
30
+ Excon.get('http://127.0.0.1:8101/')
31
+ end
32
+
33
+ traces = get_all_traces
34
+ assert_equal traces.count, 7
35
+ validate_outer_layers(traces, "excon_tests")
36
+ valid_edges?(traces)
37
+
38
+ assert_equal traces[1]['IsService'], 1
39
+ assert_equal traces[1]['RemoteHost'], '127.0.0.1'
40
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
41
+ assert_equal traces[1]['ServiceArg'], '/'
42
+ assert_equal traces[1]['HTTPMethod'], 'GET'
43
+ assert traces[1].key?('Backtrace')
44
+
45
+ assert_equal traces[5]['Layer'], 'excon'
46
+ assert_equal traces[5]['Label'], 'exit'
47
+ assert_equal traces[5]['HTTPStatus'], 200
48
+ end
49
+
50
+ def test_cross_app_tracing
51
+ clear_all_traces
52
+
53
+ TraceView::API.start_trace('excon_tests') do
54
+ response = Excon.get('http://127.0.0.1:8101/?blah=1')
55
+ xtrace = response.headers['X-Trace']
56
+ assert xtrace
57
+ assert TraceView::XTrace.valid?(xtrace)
58
+ end
59
+
60
+ traces = get_all_traces
61
+ assert_equal traces.count, 7
62
+ validate_outer_layers(traces, "excon_tests")
63
+ valid_edges?(traces)
64
+
65
+ assert_equal traces[1]['IsService'], 1
66
+ assert_equal traces[1]['RemoteHost'], '127.0.0.1'
67
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
68
+ assert_equal traces[1]['ServiceArg'], '/?blah=1'
69
+ assert_equal traces[1]['HTTPMethod'], 'GET'
70
+ assert traces[1].key?('Backtrace')
71
+ assert_equal traces[5]['HTTPStatus'], 200
72
+ end
73
+
74
+ def test_persistent_requests
75
+ # Persistence was adding in 0.31.0
76
+ skip if Excon::VERSION < '0.31.0'
77
+
78
+ clear_all_traces
79
+
80
+ TraceView::API.start_trace('excon_tests') do
81
+ connection = Excon.new('http://127.0.0.1:8101/') # non-persistent by default
82
+ connection.get # socket established, then closed
83
+ connection.get(:persistent => true) # socket established, left open
84
+ connection.get # socket reused, then closed
85
+ end
86
+
87
+ traces = get_all_traces
88
+ assert_equal traces.count, 17
89
+ validate_outer_layers(traces, "excon_tests")
90
+ valid_edges?(traces)
91
+
92
+ assert_equal traces[1]['IsService'], 1
93
+ assert_equal traces[1]['RemoteHost'], '127.0.0.1'
94
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
95
+ assert_equal traces[1]['ServiceArg'], '/'
96
+ assert_equal traces[1]['HTTPMethod'], 'GET'
97
+ assert traces[1].key?('Backtrace')
98
+ assert_equal traces[5]['HTTPStatus'], 200
99
+
100
+ assert_equal traces[6]['IsService'], 1
101
+ assert_equal traces[6]['RemoteHost'], '127.0.0.1'
102
+ assert_equal traces[6]['RemoteProtocol'], 'HTTP'
103
+ assert_equal traces[6]['ServiceArg'], '/'
104
+ assert_equal traces[6]['HTTPMethod'], 'GET'
105
+ assert traces[6].key?('Backtrace')
106
+ assert_equal traces[10]['HTTPStatus'], 200
107
+
108
+ assert_equal traces[11]['IsService'], 1
109
+ assert_equal traces[11]['RemoteHost'], '127.0.0.1'
110
+ assert_equal traces[11]['RemoteProtocol'], 'HTTP'
111
+ assert_equal traces[11]['ServiceArg'], '/'
112
+ assert_equal traces[11]['HTTPMethod'], 'GET'
113
+ assert traces[11].key?('Backtrace')
114
+ assert_equal traces[15]['HTTPStatus'], 200
115
+ end
116
+
117
+ def test_pipelined_requests
118
+ skip if Excon::VERSION <= '0.17.0'
119
+
120
+ clear_all_traces
121
+
122
+ TraceView::API.start_trace('excon_tests') do
123
+ connection = Excon.new('http://127.0.0.1:8101/')
124
+ connection.requests([{:method => :get}, {:method => :put}])
125
+ end
126
+
127
+ traces = get_all_traces
128
+ assert_equal traces.count, 10
129
+ validate_outer_layers(traces, "excon_tests")
130
+ valid_edges?(traces)
131
+
132
+ assert_equal traces[1]['IsService'], 1
133
+ assert_equal traces[1]['RemoteHost'], '127.0.0.1'
134
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
135
+ assert_equal traces[1]['ServiceArg'], '/'
136
+ assert_equal traces[1]['Pipeline'], 'true'
137
+ assert_equal traces[1]['HTTPMethods'], 'GET, PUT'
138
+ assert traces[1].key?('Backtrace')
139
+ end
140
+
141
+ def test_requests_with_errors
142
+ clear_all_traces
143
+
144
+ begin
145
+ TraceView::API.start_trace('excon_tests') do
146
+ Excon.get('http://asfjalkfjlajfljkaljf/')
147
+ end
148
+ rescue
149
+ end
150
+
151
+ traces = get_all_traces
152
+ assert_equal traces.count, 5
153
+ validate_outer_layers(traces, "excon_tests")
154
+ valid_edges?(traces)
155
+
156
+ assert_equal traces[1]['IsService'], 1
157
+ assert_equal traces[1]['RemoteHost'], 'asfjalkfjlajfljkaljf'
158
+ assert_equal traces[1]['RemoteProtocol'], 'HTTP'
159
+ assert_equal traces[1]['ServiceArg'], '/'
160
+ assert_equal traces[1]['HTTPMethod'], 'GET'
161
+ assert traces[1].key?('Backtrace')
162
+
163
+ assert_equal traces[2]['Layer'], 'excon'
164
+ assert_equal traces[2]['Label'], 'error'
165
+ assert_equal traces[2]['ErrorClass'], "Excon::Errors::SocketError"
166
+ assert traces[2].key?('ErrorMsg')
167
+ assert traces[2].key?('Backtrace')
168
+
169
+ assert_equal traces[3]['Layer'], 'excon'
170
+ assert_equal traces[3]['Label'], 'exit'
171
+ end
172
+
173
+ def test_obey_log_args_when_false
174
+ @log_args = TraceView::Config[:excon][:log_args]
175
+ clear_all_traces
176
+
177
+ TraceView::Config[:excon][:log_args] = false
178
+
179
+ TraceView::API.start_trace('excon_tests') do
180
+ Excon.get('http://127.0.0.1:8101/?blah=1')
181
+ end
182
+
183
+ traces = get_all_traces
184
+ assert_equal traces.count, 7
185
+ assert_equal traces[1]['ServiceArg'], '/'
186
+
187
+ TraceView::Config[:excon][:log_args] = @log_args
188
+ end
189
+
190
+ def test_obey_log_args_when_true
191
+ @log_args = TraceView::Config[:excon][:log_args]
192
+ clear_all_traces
193
+
194
+ TraceView::Config[:excon][:log_args] = true
195
+
196
+ TraceView::API.start_trace('excon_tests') do
197
+ Excon.get('http://127.0.0.1:8101/?blah=1')
198
+ end
199
+
200
+ traces = get_all_traces
201
+ assert_equal traces.count, 7
202
+ assert_equal traces[1]['ServiceArg'], '/?blah=1'
203
+
204
+ TraceView::Config[:excon][:log_args] = @log_args
205
+ end
206
+ end
207
+