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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rubocop.yml +5 -0
- data/.travis.yml +58 -0
- data/Appraisals +10 -0
- data/CHANGELOG.md +490 -0
- data/CONFIG.md +16 -0
- data/Gemfile +95 -0
- data/LICENSE +199 -0
- data/README.md +380 -0
- data/Rakefile +109 -0
- data/examples/DNT.md +35 -0
- data/examples/carrying_context.rb +225 -0
- data/examples/instrumenting_metal_controller.rb +8 -0
- data/examples/puma_on_heroku_config.rb +17 -0
- data/examples/tracing_async_threads.rb +125 -0
- data/examples/tracing_background_jobs.rb +52 -0
- data/examples/tracing_forked_processes.rb +100 -0
- data/examples/unicorn_on_heroku_config.rb +28 -0
- data/ext/oboe_metal/extconf.rb +61 -0
- data/ext/oboe_metal/noop/noop.c +7 -0
- data/ext/oboe_metal/src/bson/bson.h +221 -0
- data/ext/oboe_metal/src/bson/platform_hacks.h +91 -0
- data/ext/oboe_metal/src/oboe.h +275 -0
- data/ext/oboe_metal/src/oboe.hpp +352 -0
- data/ext/oboe_metal/src/oboe_wrap.cxx +3886 -0
- data/ext/oboe_metal/tests/test.rb +11 -0
- data/gemfiles/mongo.gemfile +33 -0
- data/gemfiles/moped.gemfile +33 -0
- data/get_version.rb +5 -0
- data/init.rb +4 -0
- data/lib/joboe_metal.rb +206 -0
- data/lib/oboe.rb +7 -0
- data/lib/oboe/README +2 -0
- data/lib/oboe/backward_compatibility.rb +59 -0
- data/lib/oboe/inst/rack.rb +11 -0
- data/lib/oboe_metal.rb +151 -0
- data/lib/rails/generators/traceview/install_generator.rb +76 -0
- data/lib/rails/generators/traceview/templates/traceview_initializer.rb +159 -0
- data/lib/traceview.rb +62 -0
- data/lib/traceview/api.rb +18 -0
- data/lib/traceview/api/layerinit.rb +51 -0
- data/lib/traceview/api/logging.rb +209 -0
- data/lib/traceview/api/memcache.rb +31 -0
- data/lib/traceview/api/profiling.rb +50 -0
- data/lib/traceview/api/tracing.rb +135 -0
- data/lib/traceview/api/util.rb +121 -0
- data/lib/traceview/base.rb +225 -0
- data/lib/traceview/config.rb +238 -0
- data/lib/traceview/frameworks/grape.rb +97 -0
- data/lib/traceview/frameworks/padrino.rb +64 -0
- data/lib/traceview/frameworks/padrino/templates.rb +58 -0
- data/lib/traceview/frameworks/rails.rb +145 -0
- data/lib/traceview/frameworks/rails/helpers/rum/rum_ajax_header.js.erb +5 -0
- data/lib/traceview/frameworks/rails/helpers/rum/rum_footer.js.erb +1 -0
- data/lib/traceview/frameworks/rails/helpers/rum/rum_header.js.erb +3 -0
- data/lib/traceview/frameworks/rails/inst/action_controller.rb +216 -0
- data/lib/traceview/frameworks/rails/inst/action_view.rb +56 -0
- data/lib/traceview/frameworks/rails/inst/action_view_2x.rb +54 -0
- data/lib/traceview/frameworks/rails/inst/action_view_30.rb +48 -0
- data/lib/traceview/frameworks/rails/inst/active_record.rb +24 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/mysql.rb +43 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/mysql2.rb +28 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/oracle.rb +18 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/postgresql.rb +30 -0
- data/lib/traceview/frameworks/rails/inst/connection_adapters/utils.rb +117 -0
- data/lib/traceview/frameworks/sinatra.rb +95 -0
- data/lib/traceview/frameworks/sinatra/templates.rb +56 -0
- data/lib/traceview/inst/cassandra.rb +279 -0
- data/lib/traceview/inst/dalli.rb +86 -0
- data/lib/traceview/inst/em-http-request.rb +99 -0
- data/lib/traceview/inst/excon.rb +111 -0
- data/lib/traceview/inst/faraday.rb +73 -0
- data/lib/traceview/inst/http.rb +87 -0
- data/lib/traceview/inst/httpclient.rb +173 -0
- data/lib/traceview/inst/memcache.rb +102 -0
- data/lib/traceview/inst/memcached.rb +94 -0
- data/lib/traceview/inst/mongo.rb +238 -0
- data/lib/traceview/inst/moped.rb +474 -0
- data/lib/traceview/inst/rack.rb +122 -0
- data/lib/traceview/inst/redis.rb +271 -0
- data/lib/traceview/inst/resque.rb +192 -0
- data/lib/traceview/inst/rest-client.rb +38 -0
- data/lib/traceview/inst/sequel.rb +162 -0
- data/lib/traceview/inst/typhoeus.rb +102 -0
- data/lib/traceview/instrumentation.rb +21 -0
- data/lib/traceview/loading.rb +94 -0
- data/lib/traceview/logger.rb +41 -0
- data/lib/traceview/method_profiling.rb +84 -0
- data/lib/traceview/ruby.rb +36 -0
- data/lib/traceview/support.rb +113 -0
- data/lib/traceview/thread_local.rb +26 -0
- data/lib/traceview/util.rb +250 -0
- data/lib/traceview/version.rb +16 -0
- data/lib/traceview/xtrace.rb +90 -0
- data/test/frameworks/apps/grape_nested.rb +30 -0
- data/test/frameworks/apps/grape_simple.rb +24 -0
- data/test/frameworks/apps/padrino_simple.rb +45 -0
- data/test/frameworks/apps/sinatra_simple.rb +24 -0
- data/test/frameworks/grape_test.rb +142 -0
- data/test/frameworks/padrino_test.rb +30 -0
- data/test/frameworks/sinatra_test.rb +30 -0
- data/test/instrumentation/cassandra_test.rb +380 -0
- data/test/instrumentation/dalli_test.rb +171 -0
- data/test/instrumentation/em_http_request_test.rb +86 -0
- data/test/instrumentation/excon_test.rb +207 -0
- data/test/instrumentation/faraday_test.rb +235 -0
- data/test/instrumentation/http_test.rb +140 -0
- data/test/instrumentation/httpclient_test.rb +296 -0
- data/test/instrumentation/memcache_test.rb +251 -0
- data/test/instrumentation/memcached_test.rb +226 -0
- data/test/instrumentation/mongo_test.rb +462 -0
- data/test/instrumentation/moped_test.rb +496 -0
- data/test/instrumentation/rack_test.rb +116 -0
- data/test/instrumentation/redis_hashes_test.rb +265 -0
- data/test/instrumentation/redis_keys_test.rb +318 -0
- data/test/instrumentation/redis_lists_test.rb +310 -0
- data/test/instrumentation/redis_misc_test.rb +160 -0
- data/test/instrumentation/redis_sets_test.rb +293 -0
- data/test/instrumentation/redis_sortedsets_test.rb +325 -0
- data/test/instrumentation/redis_strings_test.rb +333 -0
- data/test/instrumentation/resque_test.rb +62 -0
- data/test/instrumentation/rest-client_test.rb +294 -0
- data/test/instrumentation/sequel_mysql2_test.rb +326 -0
- data/test/instrumentation/sequel_mysql_test.rb +326 -0
- data/test/instrumentation/sequel_pg_test.rb +330 -0
- data/test/instrumentation/typhoeus_test.rb +285 -0
- data/test/minitest_helper.rb +187 -0
- data/test/profiling/method_test.rb +198 -0
- data/test/servers/rackapp_8101.rb +22 -0
- data/test/support/backcompat_test.rb +269 -0
- data/test/support/config_test.rb +128 -0
- data/test/support/dnt_test.rb +73 -0
- data/test/support/liboboe_settings_test.rb +104 -0
- data/test/support/xtrace_test.rb +35 -0
- data/traceview.gemspec +29 -0
- 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
|
+
|