instana 1.10.1-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.
- checksums.yaml +7 -0
- data/.codeclimate.yml +23 -0
- data/.gitignore +16 -0
- data/.rubocop.yml +1156 -0
- data/.travis.yml +43 -0
- data/Configuration.md +149 -0
- data/Dockerfile +13 -0
- data/Gemfile +41 -0
- data/LICENSE +21 -0
- data/README.md +102 -0
- data/Rakefile +56 -0
- data/Tracing.md +145 -0
- data/Troubleshooting.md +32 -0
- data/benchmarks/Gemfile +7 -0
- data/benchmarks/id_generation.rb +12 -0
- data/benchmarks/opentracing.rb +26 -0
- data/benchmarks/rack_vanilla_vs_traced.rb +80 -0
- data/benchmarks/stackprof_rack_tracing.rb +77 -0
- data/benchmarks/time_processing.rb +12 -0
- data/bin/console +7 -0
- data/bin/setup +8 -0
- data/examples/opentracing.rb +31 -0
- data/examples/tracing.rb +80 -0
- data/gemfiles/libraries.gemfile +71 -0
- data/gemfiles/rails32.gemfile +51 -0
- data/gemfiles/rails42.gemfile +50 -0
- data/gemfiles/rails50.gemfile +52 -0
- data/instana.gemspec +46 -0
- data/lib/instana.rb +12 -0
- data/lib/instana/agent.rb +441 -0
- data/lib/instana/agent/helpers.rb +61 -0
- data/lib/instana/agent/hooks.rb +37 -0
- data/lib/instana/agent/tasks.rb +48 -0
- data/lib/instana/base.rb +54 -0
- data/lib/instana/collector.rb +116 -0
- data/lib/instana/collectors/gc.rb +57 -0
- data/lib/instana/collectors/memory.rb +34 -0
- data/lib/instana/collectors/thread.rb +30 -0
- data/lib/instana/config.rb +79 -0
- data/lib/instana/eum/eum-test.js.erb +16 -0
- data/lib/instana/eum/eum.js.erb +14 -0
- data/lib/instana/frameworks/cuba.rb +6 -0
- data/lib/instana/frameworks/instrumentation/abstract_mysql_adapter.rb +58 -0
- data/lib/instana/frameworks/instrumentation/action_controller.rb +183 -0
- data/lib/instana/frameworks/instrumentation/action_view.rb +43 -0
- data/lib/instana/frameworks/instrumentation/active_record.rb +27 -0
- data/lib/instana/frameworks/instrumentation/mysql2_adapter.rb +81 -0
- data/lib/instana/frameworks/instrumentation/mysql_adapter.rb +56 -0
- data/lib/instana/frameworks/instrumentation/postgresql_adapter.rb +71 -0
- data/lib/instana/frameworks/rails.rb +42 -0
- data/lib/instana/frameworks/roda.rb +6 -0
- data/lib/instana/frameworks/sinatra.rb +9 -0
- data/lib/instana/helpers.rb +40 -0
- data/lib/instana/instrumentation.rb +21 -0
- data/lib/instana/instrumentation/dalli.rb +78 -0
- data/lib/instana/instrumentation/excon.rb +74 -0
- data/lib/instana/instrumentation/grpc.rb +84 -0
- data/lib/instana/instrumentation/net-http.rb +66 -0
- data/lib/instana/instrumentation/rack.rb +77 -0
- data/lib/instana/instrumentation/redis.rb +82 -0
- data/lib/instana/instrumentation/resque.rb +131 -0
- data/lib/instana/instrumentation/rest-client.rb +34 -0
- data/lib/instana/instrumentation/sidekiq-client.rb +45 -0
- data/lib/instana/instrumentation/sidekiq-worker.rb +54 -0
- data/lib/instana/opentracing/carrier.rb +4 -0
- data/lib/instana/opentracing/tracer.rb +18 -0
- data/lib/instana/rack.rb +10 -0
- data/lib/instana/setup.rb +36 -0
- data/lib/instana/test.rb +40 -0
- data/lib/instana/thread_local.rb +15 -0
- data/lib/instana/tracer.rb +392 -0
- data/lib/instana/tracing/processor.rb +92 -0
- data/lib/instana/tracing/span.rb +401 -0
- data/lib/instana/tracing/span_context.rb +33 -0
- data/lib/instana/util.rb +261 -0
- data/lib/instana/version.rb +4 -0
- data/lib/oj_check.rb +16 -0
- data/lib/opentracing.rb +6 -0
- data/test/agent/agent_test.rb +143 -0
- data/test/apps/cuba.rb +15 -0
- data/test/apps/grpc_server.rb +81 -0
- data/test/apps/roda.rb +10 -0
- data/test/apps/sinatra.rb +5 -0
- data/test/benchmarks/bench_id_generation.rb +12 -0
- data/test/benchmarks/bench_opentracing.rb +13 -0
- data/test/config_test.rb +37 -0
- data/test/frameworks/cuba_test.rb +44 -0
- data/test/frameworks/rack_test.rb +167 -0
- data/test/frameworks/rails/actioncontroller_test.rb +93 -0
- data/test/frameworks/rails/actionview3_test.rb +255 -0
- data/test/frameworks/rails/actionview4_test.rb +254 -0
- data/test/frameworks/rails/actionview5_test.rb +221 -0
- data/test/frameworks/rails/activerecord3_test.rb +134 -0
- data/test/frameworks/rails/activerecord4_test.rb +134 -0
- data/test/frameworks/rails/activerecord5_test.rb +87 -0
- data/test/frameworks/roda_test.rb +44 -0
- data/test/frameworks/sinatra_test.rb +44 -0
- data/test/instana_test.rb +27 -0
- data/test/instrumentation/dalli_test.rb +253 -0
- data/test/instrumentation/excon_test.rb +147 -0
- data/test/instrumentation/grpc_test.rb +377 -0
- data/test/instrumentation/net-http_test.rb +160 -0
- data/test/instrumentation/redis_test.rb +119 -0
- data/test/instrumentation/resque_test.rb +128 -0
- data/test/instrumentation/rest-client_test.rb +55 -0
- data/test/instrumentation/sidekiq-client_test.rb +125 -0
- data/test/instrumentation/sidekiq-worker_test.rb +173 -0
- data/test/jobs/resque_error_job.rb +22 -0
- data/test/jobs/resque_fast_job.rb +20 -0
- data/test/jobs/sidekiq_job_1.rb +6 -0
- data/test/jobs/sidekiq_job_2.rb +7 -0
- data/test/models/block.rb +18 -0
- data/test/servers/grpc_50051.rb +20 -0
- data/test/servers/helpers/sidekiq_worker_initializer.rb +27 -0
- data/test/servers/rackapp_6511.rb +25 -0
- data/test/servers/rails_3205.rb +167 -0
- data/test/servers/sidekiq/worker.rb +27 -0
- data/test/test_helper.rb +145 -0
- data/test/tracing/custom_test.rb +158 -0
- data/test/tracing/id_management_test.rb +130 -0
- data/test/tracing/opentracing_test.rb +335 -0
- data/test/tracing/trace_test.rb +67 -0
- data/test/tracing/tracer_async_test.rb +198 -0
- data/test/tracing/tracer_test.rb +223 -0
- metadata +327 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class NetHTTPTest < Minitest::Test
|
|
4
|
+
def test_config_defaults
|
|
5
|
+
assert ::Instana.config[:nethttp].is_a?(Hash)
|
|
6
|
+
assert ::Instana.config[:nethttp].key?(:enabled)
|
|
7
|
+
assert_equal true, ::Instana.config[:nethttp][:enabled]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_block_request
|
|
11
|
+
clear_all!
|
|
12
|
+
WebMock.allow_net_connect!
|
|
13
|
+
url = "http://127.0.0.1:6511/"
|
|
14
|
+
|
|
15
|
+
uri = URI.parse(url)
|
|
16
|
+
req = Net::HTTP::Get.new(uri)
|
|
17
|
+
|
|
18
|
+
response = nil
|
|
19
|
+
Instana.tracer.start_or_continue_trace('net-http-test') do
|
|
20
|
+
Net::HTTP.start(req.uri.hostname, req.uri.port, :open_timeout => 1, :read_timeout => 1) do |http|
|
|
21
|
+
response = http.request(req)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
spans = ::Instana.processor.queued_spans
|
|
26
|
+
assert_equal 3, spans.length
|
|
27
|
+
|
|
28
|
+
rs_span = find_first_span_by_name(spans, :rack)
|
|
29
|
+
first_span = find_first_span_by_name(spans, :'net-http-test')
|
|
30
|
+
second_span = find_first_span_by_name(spans, :'net-http')
|
|
31
|
+
|
|
32
|
+
# Span name validation
|
|
33
|
+
assert_equal :sdk, first_span[:n]
|
|
34
|
+
assert_equal :'net-http', second_span[:n]
|
|
35
|
+
|
|
36
|
+
# first_span is the parent of second_span
|
|
37
|
+
assert_equal first_span[:s], second_span[:p]
|
|
38
|
+
|
|
39
|
+
# data keys/values
|
|
40
|
+
refute_nil second_span.key?(:data)
|
|
41
|
+
refute_nil second_span[:data].key?(:http)
|
|
42
|
+
assert_equal "http://127.0.0.1:6511/", second_span[:data][:http][:url]
|
|
43
|
+
assert_equal "200", second_span[:data][:http][:status]
|
|
44
|
+
assert !second_span.key?(:stack)
|
|
45
|
+
|
|
46
|
+
# Rack server trace should have the same trace ID
|
|
47
|
+
assert_equal rs_span[:t], first_span[:t]
|
|
48
|
+
assert_equal first_span[:t], second_span[:t]
|
|
49
|
+
|
|
50
|
+
# Rack server trace should have net-http has parent span
|
|
51
|
+
assert_equal second_span[:s], rs_span[:p]
|
|
52
|
+
|
|
53
|
+
WebMock.disable_net_connect!
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_basic_post_without_uri
|
|
57
|
+
clear_all!
|
|
58
|
+
WebMock.allow_net_connect!
|
|
59
|
+
|
|
60
|
+
response = nil
|
|
61
|
+
Instana.tracer.start_or_continue_trace('net-http-test') do
|
|
62
|
+
http = Net::HTTP.new("127.0.0.1", 6511)
|
|
63
|
+
response = http.request(Net::HTTP::Post.new("/"))
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
spans = ::Instana.processor.queued_spans
|
|
67
|
+
assert_equal 3, spans.length
|
|
68
|
+
|
|
69
|
+
rack_span = find_first_span_by_name(spans, :rack)
|
|
70
|
+
sdk_span = find_first_span_by_name(spans, :'net-http-test')
|
|
71
|
+
http_span = find_first_span_by_name(spans, :'net-http')
|
|
72
|
+
|
|
73
|
+
# Span name validation
|
|
74
|
+
assert_equal :sdk, sdk_span[:n]
|
|
75
|
+
assert_equal :'net-http', http_span[:n]
|
|
76
|
+
|
|
77
|
+
# first_span is the parent of second_span
|
|
78
|
+
assert_equal sdk_span[:s], http_span[:p]
|
|
79
|
+
|
|
80
|
+
# data keys/values
|
|
81
|
+
refute_nil http_span.key?(:data)
|
|
82
|
+
refute_nil http_span[:data].key?(:http)
|
|
83
|
+
assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
|
|
84
|
+
assert_equal "200", http_span[:data][:http][:status]
|
|
85
|
+
assert !http_span.key?(:stack)
|
|
86
|
+
|
|
87
|
+
# Rack server trace should have the same trace ID
|
|
88
|
+
assert_equal rack_span[:t], sdk_span[:t]
|
|
89
|
+
assert_equal sdk_span[:t], http_span[:t]
|
|
90
|
+
|
|
91
|
+
# Rack server trace should have net-http has parent span
|
|
92
|
+
assert_equal http_span[:s], rack_span[:p]
|
|
93
|
+
|
|
94
|
+
WebMock.disable_net_connect!
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_request_with_dns_error
|
|
98
|
+
clear_all!
|
|
99
|
+
WebMock.allow_net_connect!
|
|
100
|
+
|
|
101
|
+
begin
|
|
102
|
+
Instana.tracer.start_or_continue_trace('net-http-error-test') do
|
|
103
|
+
http = Net::HTTP.new("asdfasdf.asdfsadf", 80)
|
|
104
|
+
http.request(Net::HTTP::Get.new("/blah"))
|
|
105
|
+
end
|
|
106
|
+
rescue Exception
|
|
107
|
+
nil
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
spans = ::Instana.processor.queued_spans
|
|
111
|
+
assert_equal 1, spans.length
|
|
112
|
+
|
|
113
|
+
first_span = spans.first
|
|
114
|
+
|
|
115
|
+
assert_equal :sdk, first_span[:n]
|
|
116
|
+
assert_equal :'net-http-error-test', first_span[:data][:sdk][:name]
|
|
117
|
+
assert_equal true, first_span[:error]
|
|
118
|
+
assert_equal 1, first_span[:ec]
|
|
119
|
+
ts_key = first_span[:data][:sdk][:custom][:logs].keys.first
|
|
120
|
+
assert first_span[:data][:sdk][:custom][:logs].key?(ts_key)
|
|
121
|
+
assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:event)
|
|
122
|
+
assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:parameters)
|
|
123
|
+
|
|
124
|
+
WebMock.disable_net_connect!
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_request_with_5xx_response
|
|
128
|
+
clear_all!
|
|
129
|
+
WebMock.allow_net_connect!
|
|
130
|
+
|
|
131
|
+
response = nil
|
|
132
|
+
Instana.tracer.start_or_continue_trace('net-http-error-test') do
|
|
133
|
+
http = Net::HTTP.new("127.0.0.1", 6511)
|
|
134
|
+
response = http.request(Net::HTTP::Get.new("/error"))
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
spans = ::Instana.processor.queued_spans
|
|
138
|
+
assert_equal 3, spans.length
|
|
139
|
+
|
|
140
|
+
rack_span = find_first_span_by_name(spans, :rack)
|
|
141
|
+
sdk_span = find_first_span_by_name(spans, :'net-http-error-test')
|
|
142
|
+
http_span = find_first_span_by_name(spans, :'net-http')
|
|
143
|
+
|
|
144
|
+
assert_equal :sdk, sdk_span[:n]
|
|
145
|
+
assert_equal :'net-http-error-test', sdk_span[:data][:sdk][:name]
|
|
146
|
+
assert_equal nil, sdk_span[:error]
|
|
147
|
+
assert_equal nil, sdk_span[:ec]
|
|
148
|
+
|
|
149
|
+
refute_nil http_span.key?(:data)
|
|
150
|
+
refute_nil http_span[:data].key?(:http)
|
|
151
|
+
assert_equal "http://127.0.0.1:6511/error", http_span[:data][:http][:url]
|
|
152
|
+
assert_equal "500", http_span[:data][:http][:status]
|
|
153
|
+
assert_equal :'net-http', http_span[:n]
|
|
154
|
+
assert !http_span.key?(:stack)
|
|
155
|
+
assert_equal true, http_span[:error]
|
|
156
|
+
assert_equal 1, http_span[:ec]
|
|
157
|
+
|
|
158
|
+
WebMock.disable_net_connect!
|
|
159
|
+
end
|
|
160
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RedisTest < Minitest::Test
|
|
4
|
+
def test_normal_call
|
|
5
|
+
clear_all!
|
|
6
|
+
redis_client = create_redis_client
|
|
7
|
+
|
|
8
|
+
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
9
|
+
redis_client.set('hello', 'world')
|
|
10
|
+
end
|
|
11
|
+
redis_client.disconnect!
|
|
12
|
+
|
|
13
|
+
assert_redis_trace('SET')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_normal_call_with_error
|
|
17
|
+
clear_all!
|
|
18
|
+
redis_client = create_redis_client
|
|
19
|
+
|
|
20
|
+
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
21
|
+
begin
|
|
22
|
+
redis_client.zadd('hello', 'invalid', 'value')
|
|
23
|
+
rescue; end
|
|
24
|
+
end
|
|
25
|
+
redis_client.disconnect!
|
|
26
|
+
|
|
27
|
+
assert_redis_trace('ZADD', with_error: 'ERR value is not a valid float')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_pipeline_call
|
|
31
|
+
clear_all!
|
|
32
|
+
redis_client = create_redis_client
|
|
33
|
+
|
|
34
|
+
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
35
|
+
redis_client.pipelined do
|
|
36
|
+
redis_client.set('hello', 'world')
|
|
37
|
+
redis_client.set('other', 'world')
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
assert_redis_trace('PIPELINE')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_pipeline_call_with_error
|
|
45
|
+
clear_all!
|
|
46
|
+
redis_client = create_redis_client
|
|
47
|
+
|
|
48
|
+
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
49
|
+
begin
|
|
50
|
+
redis_client.pipelined do
|
|
51
|
+
redis_client.set('other', 'world')
|
|
52
|
+
redis_client.call('invalid')
|
|
53
|
+
end
|
|
54
|
+
rescue; end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
assert_redis_trace('PIPELINE', with_error: "ERR unknown command 'invalid'")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_multi_call
|
|
61
|
+
clear_all!
|
|
62
|
+
redis_client = create_redis_client
|
|
63
|
+
|
|
64
|
+
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
65
|
+
redis_client.multi do
|
|
66
|
+
redis_client.set('hello', 'world')
|
|
67
|
+
redis_client.set('other', 'world')
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
assert_redis_trace('MULTI')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_multi_call_with_error
|
|
75
|
+
clear_all!
|
|
76
|
+
redis_client = create_redis_client
|
|
77
|
+
|
|
78
|
+
Instana.tracer.start_or_continue_trace(:redis_test) do
|
|
79
|
+
begin
|
|
80
|
+
redis_client.multi do
|
|
81
|
+
redis_client.set('other', 'world')
|
|
82
|
+
redis_client.call('invalid')
|
|
83
|
+
end
|
|
84
|
+
rescue; end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
assert_redis_trace('MULTI', with_error: "ERR unknown command 'invalid'")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
def create_redis_client
|
|
93
|
+
Redis.new(url: ENV['I_REDIS_URL'])
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def assert_redis_trace(command, with_error: nil)
|
|
97
|
+
spans = ::Instana.processor.queued_spans
|
|
98
|
+
assert_equal 2, spans.length
|
|
99
|
+
first_span, second_span = spans.to_a.reverse
|
|
100
|
+
|
|
101
|
+
# first_span is the parent of second_span
|
|
102
|
+
assert_equal first_span[:s], second_span[:p]
|
|
103
|
+
assert_equal :sdk, first_span[:n]
|
|
104
|
+
assert_equal :redis, second_span[:n]
|
|
105
|
+
|
|
106
|
+
data = second_span[:data]
|
|
107
|
+
|
|
108
|
+
uri = URI.parse(ENV['I_REDIS_URL'])
|
|
109
|
+
assert_equal "#{uri.host}:#{uri.port}", data[:redis][:connection]
|
|
110
|
+
|
|
111
|
+
assert_equal 0, data[:redis][:db]
|
|
112
|
+
assert_equal command, data[:redis][:command]
|
|
113
|
+
|
|
114
|
+
if with_error
|
|
115
|
+
assert_equal true, data[:redis][:error]
|
|
116
|
+
assert data[:log].key?(:message)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require_relative "../jobs/resque_fast_job"
|
|
3
|
+
require_relative "../jobs/resque_error_job"
|
|
4
|
+
require 'resque'
|
|
5
|
+
|
|
6
|
+
if ENV.key?('REDIS_URL')
|
|
7
|
+
::Resque.redis = ENV['REDIS_URL']
|
|
8
|
+
elsif ENV.key?('I_REDIS_URL')
|
|
9
|
+
::Resque.redis = ENV['I_REDIS_URL']
|
|
10
|
+
else
|
|
11
|
+
::Resque.redis = 'localhost:6379'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class ResqueClientTest < Minitest::Test
|
|
15
|
+
def setup
|
|
16
|
+
clear_all!
|
|
17
|
+
ENV['FORK_PER_JOB'] = 'false'
|
|
18
|
+
Resque.redis.redis.flushall
|
|
19
|
+
@worker = Resque::Worker.new(:critical)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def teardown
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_enqueue
|
|
26
|
+
::Instana.tracer.start_or_continue_trace('resque-client_test') do
|
|
27
|
+
::Resque.enqueue(FastJob)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
spans = ::Instana.processor.queued_spans
|
|
31
|
+
assert_equal 3, spans.length
|
|
32
|
+
|
|
33
|
+
sdk_span = find_first_span_by_name(spans, :'resque-client_test')
|
|
34
|
+
resque_span = find_first_span_by_name(spans, :'resque-client')
|
|
35
|
+
redis_span = find_first_span_by_name(spans, :redis)
|
|
36
|
+
|
|
37
|
+
assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
|
|
38
|
+
|
|
39
|
+
assert_equal :"resque-client", resque_span[:n]
|
|
40
|
+
assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
|
|
41
|
+
assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
|
|
42
|
+
assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
|
|
43
|
+
|
|
44
|
+
assert_equal :redis, redis_span[:n]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_enqueue_to
|
|
48
|
+
::Instana.tracer.start_or_continue_trace('resque-client_test') do
|
|
49
|
+
::Resque.enqueue_to(:critical, FastJob)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
spans = ::Instana.processor.queued_spans
|
|
53
|
+
assert_equal 3, spans.length
|
|
54
|
+
|
|
55
|
+
sdk_span = find_first_span_by_name(spans, :'resque-client_test')
|
|
56
|
+
resque_span = find_first_span_by_name(spans, :'resque-client')
|
|
57
|
+
redis_span = find_first_span_by_name(spans, :redis)
|
|
58
|
+
|
|
59
|
+
assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
|
|
60
|
+
assert_equal :"resque-client", resque_span[:n]
|
|
61
|
+
assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
|
|
62
|
+
assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
|
|
63
|
+
assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
|
|
64
|
+
assert_equal :redis, redis_span[:n]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_dequeue
|
|
68
|
+
::Instana.tracer.start_or_continue_trace('resque-client_test', '', {}) do
|
|
69
|
+
::Resque.dequeue(FastJob, { :generate => :farfalla })
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
spans = ::Instana.processor.queued_spans
|
|
73
|
+
assert_equal 3, spans.length
|
|
74
|
+
|
|
75
|
+
sdk_span = find_first_span_by_name(spans, :'resque-client_test')
|
|
76
|
+
resque_span = find_first_span_by_name(spans, :'resque-client')
|
|
77
|
+
redis_span = find_first_span_by_name(spans, :redis)
|
|
78
|
+
|
|
79
|
+
assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
|
|
80
|
+
assert_equal :"resque-client", spans[1][:n]
|
|
81
|
+
assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
|
|
82
|
+
assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
|
|
83
|
+
assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
|
|
84
|
+
assert_equal :redis, redis_span[:n]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_worker_job
|
|
88
|
+
Resque::Job.create(:critical, FastJob)
|
|
89
|
+
@worker.work(0)
|
|
90
|
+
|
|
91
|
+
spans = ::Instana.processor.queued_spans
|
|
92
|
+
assert_equal 3, spans.length
|
|
93
|
+
|
|
94
|
+
resque_span = spans[2]
|
|
95
|
+
redis1_span = spans[1]
|
|
96
|
+
redis2_span = spans[0]
|
|
97
|
+
|
|
98
|
+
assert_equal :'resque-worker', resque_span[:n]
|
|
99
|
+
assert_equal false, resque_span.key?(:error)
|
|
100
|
+
assert_equal false, resque_span.key?(:ec)
|
|
101
|
+
assert_equal "FastJob", resque_span[:data][:'resque-worker'][:job]
|
|
102
|
+
assert_equal "critical", resque_span[:data][:'resque-worker'][:queue]
|
|
103
|
+
assert_equal false, resque_span[:data][:'resque-worker'].key?(:error)
|
|
104
|
+
|
|
105
|
+
assert_equal :redis, redis1_span[:n]
|
|
106
|
+
assert_equal "SET", redis1_span[:data][:redis][:command]
|
|
107
|
+
assert_equal :redis, redis2_span[:n]
|
|
108
|
+
assert_equal "SET", redis2_span[:data][:redis][:command]
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_worker_error_job
|
|
112
|
+
Resque::Job.create(:critical, ErrorJob)
|
|
113
|
+
@worker.work(0)
|
|
114
|
+
|
|
115
|
+
spans = ::Instana.processor.queued_spans
|
|
116
|
+
assert_equal 5, spans.length
|
|
117
|
+
|
|
118
|
+
resque_span = find_first_span_by_name(spans, :'resque-worker')
|
|
119
|
+
|
|
120
|
+
assert_equal :'resque-worker', resque_span[:n]
|
|
121
|
+
assert_equal true, resque_span.key?(:error)
|
|
122
|
+
assert_equal 1, resque_span[:ec]
|
|
123
|
+
assert_equal "ErrorJob", resque_span[:data][:'resque-worker'][:job]
|
|
124
|
+
assert_equal "critical", resque_span[:data][:'resque-worker'][:queue]
|
|
125
|
+
assert_equal "Exception: Silly Rabbit, Trix are for kids.", resque_span[:data][:'resque-worker'][:error]
|
|
126
|
+
assert_equal Array, resque_span[:stack].class
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RestClientTest < Minitest::Test
|
|
4
|
+
def test_config_defaults
|
|
5
|
+
assert ::Instana.config[:'rest-client'].is_a?(Hash)
|
|
6
|
+
assert ::Instana.config[:'rest-client'].key?(:enabled)
|
|
7
|
+
assert_equal true, ::Instana.config[:'rest-client'][:enabled]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_basic_get
|
|
11
|
+
clear_all!
|
|
12
|
+
WebMock.allow_net_connect!
|
|
13
|
+
|
|
14
|
+
url = "http://127.0.0.1:6511/"
|
|
15
|
+
|
|
16
|
+
Instana.tracer.start_or_continue_trace('restclient-test') do
|
|
17
|
+
RestClient.get url
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
spans = ::Instana.processor.queued_spans
|
|
21
|
+
assert_equal 4, spans.length
|
|
22
|
+
|
|
23
|
+
rack_span = find_first_span_by_name(spans, :rack)
|
|
24
|
+
sdk_span = find_first_span_by_name(spans, :'restclient-test')
|
|
25
|
+
rest_span = find_first_span_by_name(spans, :'rest-client')
|
|
26
|
+
net_span = find_first_span_by_name(spans, :'net-http')
|
|
27
|
+
|
|
28
|
+
validate_sdk_span(sdk_span, {:name => :'restclient-test', :type => :intermediate})
|
|
29
|
+
validate_sdk_span(rest_span, {:name => :'rest-client', :type => :intermediate})
|
|
30
|
+
|
|
31
|
+
# Span name validation
|
|
32
|
+
assert_equal :rack, rack_span[:n]
|
|
33
|
+
assert_equal :sdk, sdk_span[:n]
|
|
34
|
+
assert_equal :sdk, rest_span[:n]
|
|
35
|
+
assert_equal :"net-http", net_span[:n]
|
|
36
|
+
|
|
37
|
+
# Trace IDs and relationships
|
|
38
|
+
trace_id = sdk_span[:t]
|
|
39
|
+
assert_equal trace_id, rest_span[:t]
|
|
40
|
+
assert_equal trace_id, net_span[:t]
|
|
41
|
+
assert_equal trace_id, rack_span[:t]
|
|
42
|
+
|
|
43
|
+
assert_equal sdk_span[:s], rest_span[:p]
|
|
44
|
+
assert_equal rest_span[:s], net_span[:p]
|
|
45
|
+
assert_equal net_span[:s], rack_span[:p]
|
|
46
|
+
|
|
47
|
+
# data keys/values
|
|
48
|
+
refute_nil net_span.key?(:data)
|
|
49
|
+
refute_nil net_span[:data].key?(:http)
|
|
50
|
+
assert_equal "http://127.0.0.1:6511/", net_span[:data][:http][:url]
|
|
51
|
+
assert_equal "200", net_span[:data][:http][:status]
|
|
52
|
+
|
|
53
|
+
WebMock.disable_net_connect!
|
|
54
|
+
end
|
|
55
|
+
end
|