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,130 @@
|
|
|
1
|
+
|
|
2
|
+
require 'test_helper'
|
|
3
|
+
|
|
4
|
+
class TracerIDMgmtTest < Minitest::Test
|
|
5
|
+
def test_id_to_header_conversion
|
|
6
|
+
# Test passing a standard Integer ID
|
|
7
|
+
original_id = ::Instana::Util.generate_id
|
|
8
|
+
converted_id = Instana::Util.id_to_header(original_id)
|
|
9
|
+
|
|
10
|
+
# Assert that it is a string and there are no non-hex characters
|
|
11
|
+
assert converted_id.is_a?(String)
|
|
12
|
+
assert !converted_id[/\H/]
|
|
13
|
+
|
|
14
|
+
# Test passing a standard Integer ID as a String
|
|
15
|
+
original_id = ::Instana::Util.generate_id
|
|
16
|
+
converted_id = Instana::Util.id_to_header(original_id)
|
|
17
|
+
|
|
18
|
+
# Assert that it is a string and there are no non-hex characters
|
|
19
|
+
assert converted_id.is_a?(String)
|
|
20
|
+
assert !converted_id[/\H/]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_id_to_header_conversion_with_bogus_id
|
|
24
|
+
# Test passing an empty String
|
|
25
|
+
converted_id = Instana::Util.id_to_header('')
|
|
26
|
+
|
|
27
|
+
# Assert that it is a string and there are no non-hex characters
|
|
28
|
+
assert converted_id.is_a?(String)
|
|
29
|
+
assert converted_id == ''
|
|
30
|
+
|
|
31
|
+
# Test passing a nil
|
|
32
|
+
converted_id = Instana::Util.id_to_header(nil)
|
|
33
|
+
|
|
34
|
+
# Assert that it is a string and there are no non-hex characters
|
|
35
|
+
assert converted_id.is_a?(String)
|
|
36
|
+
assert converted_id == ''
|
|
37
|
+
|
|
38
|
+
# Test passing an Array
|
|
39
|
+
converted_id = Instana::Util.id_to_header([])
|
|
40
|
+
|
|
41
|
+
# Assert that it is a string and there are no non-hex characters
|
|
42
|
+
assert converted_id.is_a?(String)
|
|
43
|
+
assert converted_id == ''
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_header_to_id_conversion
|
|
47
|
+
# Get a hex string to test against & convert
|
|
48
|
+
header_id = Instana::Util.id_to_header(::Instana::Util.generate_id)
|
|
49
|
+
converted_id = Instana::Util.header_to_id(header_id)
|
|
50
|
+
|
|
51
|
+
# Assert that it is an Integer
|
|
52
|
+
assert converted_id.is_a?(Integer)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_header_to_id_conversion_with_bogus_header
|
|
56
|
+
# Bogus nil arg
|
|
57
|
+
bogus_result = Instana::Util.header_to_id(nil)
|
|
58
|
+
assert_equal 0, bogus_result
|
|
59
|
+
|
|
60
|
+
# Bogus Integer arg
|
|
61
|
+
bogus_result = Instana::Util.header_to_id(1234)
|
|
62
|
+
assert_equal 0, bogus_result
|
|
63
|
+
|
|
64
|
+
# Bogus Array arg
|
|
65
|
+
bogus_result = Instana::Util.header_to_id([1234])
|
|
66
|
+
assert_equal 0, bogus_result
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_id_conversion_back_and_forth
|
|
70
|
+
# id --> header --> id
|
|
71
|
+
original_id = ::Instana::Util.generate_id
|
|
72
|
+
header_id = Instana::Util.id_to_header(original_id)
|
|
73
|
+
converted_back_id = Instana::Util.header_to_id(header_id)
|
|
74
|
+
assert original_id == converted_back_id
|
|
75
|
+
|
|
76
|
+
# header --> id --> header
|
|
77
|
+
original_header_id = "c025ee93b1aeda7b"
|
|
78
|
+
id = Instana::Util.header_to_id(original_header_id)
|
|
79
|
+
converted_back_header_id = Instana::Util.id_to_header(id)
|
|
80
|
+
assert_equal original_header_id, converted_back_header_id
|
|
81
|
+
|
|
82
|
+
# Test a random value
|
|
83
|
+
id = -7815363404733516491
|
|
84
|
+
header = "938a406416457535"
|
|
85
|
+
|
|
86
|
+
result = Instana::Util.header_to_id(header)
|
|
87
|
+
assert_equal id, result
|
|
88
|
+
|
|
89
|
+
result = Instana::Util.id_to_header(id)
|
|
90
|
+
assert_equal header, result
|
|
91
|
+
|
|
92
|
+
10000.times do
|
|
93
|
+
original_id = ::Instana::Util.generate_id
|
|
94
|
+
header_id = Instana::Util.id_to_header(original_id)
|
|
95
|
+
converted_back_id = Instana::Util.header_to_id(header_id)
|
|
96
|
+
assert original_id == converted_back_id
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_id_max_value_and_conversion
|
|
101
|
+
max_id = 9223372036854775807
|
|
102
|
+
min_id = -9223372036854775808
|
|
103
|
+
max_hex = "7fffffffffffffff"
|
|
104
|
+
min_hex = "8000000000000000"
|
|
105
|
+
|
|
106
|
+
assert_equal max_hex, Instana::Util.id_to_header(max_id)
|
|
107
|
+
assert_equal min_hex, Instana::Util.id_to_header(min_id)
|
|
108
|
+
|
|
109
|
+
assert_equal max_id, Instana::Util.header_to_id(max_hex)
|
|
110
|
+
assert_equal min_id, Instana::Util.header_to_id(min_hex)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_that_leading_zeros_handled_correctly
|
|
114
|
+
|
|
115
|
+
header = ::Instana::Util.id_to_header(16)
|
|
116
|
+
assert_equal "10", header
|
|
117
|
+
|
|
118
|
+
id = ::Instana::Util.header_to_id("10")
|
|
119
|
+
assert_equal 16, id
|
|
120
|
+
|
|
121
|
+
id = ::Instana::Util.header_to_id("0000000000000010")
|
|
122
|
+
assert_equal 16, id
|
|
123
|
+
|
|
124
|
+
id = ::Instana::Util.header_to_id("88b6c735206ca42")
|
|
125
|
+
assert_equal 615705016619420226, id
|
|
126
|
+
|
|
127
|
+
id = ::Instana::Util.header_to_id("088b6c735206ca42")
|
|
128
|
+
assert_equal 615705016619420226, id
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'rack/test'
|
|
3
|
+
require 'rack/lobster'
|
|
4
|
+
require "opentracing"
|
|
5
|
+
|
|
6
|
+
module Instana
|
|
7
|
+
class OTRack1
|
|
8
|
+
def initialize(app)
|
|
9
|
+
@app = app
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
otrack1_span = OpenTracing.start_span(:otrack1)
|
|
14
|
+
result = @app.call(env)
|
|
15
|
+
otrack1_span.finish
|
|
16
|
+
result
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class OTRack2
|
|
21
|
+
def initialize(app)
|
|
22
|
+
@app = app
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def call(env)
|
|
26
|
+
otrack2_span = OpenTracing.start_span(:otrack2)
|
|
27
|
+
result = @app.call(env)
|
|
28
|
+
otrack2_span.finish
|
|
29
|
+
result
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
OpenTracing.global_tracer = ::Instana.tracer
|
|
35
|
+
|
|
36
|
+
class OpenTracerTest < Minitest::Test
|
|
37
|
+
include Rack::Test::Methods
|
|
38
|
+
|
|
39
|
+
def app
|
|
40
|
+
@app = Rack::Builder.new {
|
|
41
|
+
use Instana::Rack
|
|
42
|
+
use Instana::OTRack1
|
|
43
|
+
use Rack::CommonLogger
|
|
44
|
+
use Rack::ShowExceptions
|
|
45
|
+
use Instana::OTRack2
|
|
46
|
+
map "/mrlobster" do
|
|
47
|
+
run Rack::Lobster.new
|
|
48
|
+
end
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_supplies_all_ot_interfaces
|
|
53
|
+
clear_all!
|
|
54
|
+
assert defined?(OpenTracing)
|
|
55
|
+
assert OpenTracing.respond_to?(:global_tracer)
|
|
56
|
+
assert OpenTracing.global_tracer.respond_to?(:start_span)
|
|
57
|
+
assert OpenTracing.global_tracer.respond_to?(:inject)
|
|
58
|
+
assert OpenTracing.global_tracer.respond_to?(:extract)
|
|
59
|
+
|
|
60
|
+
assert defined?(OpenTracing::Carrier)
|
|
61
|
+
carrier = OpenTracing::Carrier.new
|
|
62
|
+
assert carrier.respond_to?(:[])
|
|
63
|
+
assert carrier.respond_to?(:[]=)
|
|
64
|
+
assert carrier.respond_to?(:each)
|
|
65
|
+
|
|
66
|
+
span = OpenTracing.start_span(:blah)
|
|
67
|
+
assert span.respond_to?(:finish)
|
|
68
|
+
assert span.respond_to?(:set_tag)
|
|
69
|
+
assert span.respond_to?(:tags)
|
|
70
|
+
assert span.respond_to?(:operation_name=)
|
|
71
|
+
assert span.respond_to?(:set_baggage_item)
|
|
72
|
+
assert span.respond_to?(:get_baggage_item)
|
|
73
|
+
assert span.respond_to?(:context)
|
|
74
|
+
assert span.respond_to?(:log)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_basic_get_with_opentracing
|
|
78
|
+
clear_all!
|
|
79
|
+
get '/mrlobster'
|
|
80
|
+
assert last_response.ok?
|
|
81
|
+
|
|
82
|
+
spans = ::Instana.processor.queued_spans
|
|
83
|
+
assert_equal 3, spans.length
|
|
84
|
+
|
|
85
|
+
first_span = find_first_span_by_name(spans, :rack)
|
|
86
|
+
second_span = find_first_span_by_name(spans, :otrack1)
|
|
87
|
+
third_span = find_first_span_by_name(spans, :otrack2)
|
|
88
|
+
|
|
89
|
+
assert_equal :rack, first_span[:n]
|
|
90
|
+
assert first_span[:ts].is_a?(Integer)
|
|
91
|
+
assert first_span[:ts] > 0
|
|
92
|
+
assert first_span[:d].is_a?(Integer)
|
|
93
|
+
assert first_span[:d].between?(0, 5)
|
|
94
|
+
assert first_span.key?(:data)
|
|
95
|
+
assert first_span[:data].key?(:http)
|
|
96
|
+
assert_equal "GET", first_span[:data][:http][:method]
|
|
97
|
+
assert_equal "/mrlobster", first_span[:data][:http][:url]
|
|
98
|
+
assert_equal 200, first_span[:data][:http][:status]
|
|
99
|
+
assert_equal 'example.org', first_span[:data][:http][:host]
|
|
100
|
+
assert_equal :otrack1, second_span[:data][:sdk][:name]
|
|
101
|
+
assert second_span.key?(:data)
|
|
102
|
+
assert second_span[:data].key?(:sdk)
|
|
103
|
+
assert second_span[:data][:sdk].key?(:name)
|
|
104
|
+
assert_equal :otrack2, third_span[:data][:sdk][:name]
|
|
105
|
+
assert third_span.key?(:data)
|
|
106
|
+
assert third_span[:data].key?(:sdk)
|
|
107
|
+
assert third_span[:data][:sdk].key?(:name)
|
|
108
|
+
|
|
109
|
+
# ID Validation
|
|
110
|
+
refute_equal first_span[:t], second_span[:t]
|
|
111
|
+
refute_equal second_span[:t], third_span[:t]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_get_with_inject_extract
|
|
115
|
+
clear_all!
|
|
116
|
+
|
|
117
|
+
trace_id = ::Instana::Util.generate_id
|
|
118
|
+
span_id = ::Instana::Util.generate_id
|
|
119
|
+
|
|
120
|
+
header 'X-Instana-T', ::Instana::Util.id_to_header(trace_id)
|
|
121
|
+
header 'X-Instana-S', ::Instana::Util.id_to_header(span_id)
|
|
122
|
+
|
|
123
|
+
get '/mrlobster'
|
|
124
|
+
assert last_response.ok?
|
|
125
|
+
|
|
126
|
+
spans = ::Instana.processor.queued_spans
|
|
127
|
+
|
|
128
|
+
assert_equal 3, spans.length
|
|
129
|
+
first_span = find_first_span_by_name(spans, :rack)
|
|
130
|
+
|
|
131
|
+
# Make sure context was picked up and continued in the resulting
|
|
132
|
+
# trace
|
|
133
|
+
assert_equal trace_id, first_span[:t]
|
|
134
|
+
assert_equal span_id, first_span[:p]
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_start_span_with_tags
|
|
138
|
+
clear_all!
|
|
139
|
+
span = OpenTracing.start_span('my_app_entry')
|
|
140
|
+
|
|
141
|
+
assert span.is_a?(::Instana::Span)
|
|
142
|
+
|
|
143
|
+
span.set_tag(:tag_integer, 1234)
|
|
144
|
+
span.set_tag(:tag_boolean, true)
|
|
145
|
+
span.set_tag(:tag_array, [1,2,3,4])
|
|
146
|
+
span.set_tag(:tag_string, "1234")
|
|
147
|
+
|
|
148
|
+
assert_equal 1234, span.tags(:tag_integer)
|
|
149
|
+
assert_equal true, span.tags(:tag_boolean)
|
|
150
|
+
assert_equal [1,2,3,4], span.tags(:tag_array)
|
|
151
|
+
assert_equal "1234", span.tags(:tag_string)
|
|
152
|
+
span.finish
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_start_span_with_custom_start_time
|
|
156
|
+
clear_all!
|
|
157
|
+
now = Time.now
|
|
158
|
+
now_in_ms = ::Instana::Util.time_to_ms(now)
|
|
159
|
+
|
|
160
|
+
span = OpenTracing.start_span('my_app_entry', :start_time => now)
|
|
161
|
+
|
|
162
|
+
assert span.is_a?(::Instana::Span)
|
|
163
|
+
|
|
164
|
+
span.set_tag(:tag_integer, 1234)
|
|
165
|
+
span.set_tag(:tag_boolean, true)
|
|
166
|
+
span.set_tag(:tag_array, [1,2,3,4])
|
|
167
|
+
span.set_tag(:tag_string, "1234")
|
|
168
|
+
|
|
169
|
+
assert_equal 1234, span.tags(:tag_integer)
|
|
170
|
+
assert_equal true, span.tags(:tag_boolean)
|
|
171
|
+
assert_equal [1,2,3,4], span.tags(:tag_array)
|
|
172
|
+
assert_equal "1234", span.tags(:tag_string)
|
|
173
|
+
span.finish
|
|
174
|
+
|
|
175
|
+
assert span[:ts].is_a?(Integer)
|
|
176
|
+
assert_equal now_in_ms, span[:ts]
|
|
177
|
+
assert span[:d].is_a?(Integer)
|
|
178
|
+
assert span[:d].between?(0, 5)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def test_span_kind_translation
|
|
182
|
+
clear_all!
|
|
183
|
+
span = OpenTracing.start_span('my_app_entry')
|
|
184
|
+
|
|
185
|
+
assert span.is_a?(::Instana::Span)
|
|
186
|
+
|
|
187
|
+
span.set_tag(:'span.kind', :server)
|
|
188
|
+
assert_equal :entry, span[:data][:sdk][:type]
|
|
189
|
+
assert_equal 1, span[:k]
|
|
190
|
+
|
|
191
|
+
span.set_tag(:'span.kind', :consumer)
|
|
192
|
+
assert_equal :entry, span[:data][:sdk][:type]
|
|
193
|
+
assert_equal 1, span[:k]
|
|
194
|
+
|
|
195
|
+
span.set_tag(:'span.kind', :client)
|
|
196
|
+
assert_equal :exit, span[:data][:sdk][:type]
|
|
197
|
+
assert_equal 2, span[:k]
|
|
198
|
+
|
|
199
|
+
span.set_tag(:'span.kind', :producer)
|
|
200
|
+
assert_equal :exit, span[:data][:sdk][:type]
|
|
201
|
+
assert_equal 2, span[:k]
|
|
202
|
+
|
|
203
|
+
span[:data][:sdk].delete(:type)
|
|
204
|
+
span.set_tag(:'span.kind', :blah)
|
|
205
|
+
assert_equal :intermediate, span[:data][:sdk][:type]
|
|
206
|
+
assert_equal 3, span[:k]
|
|
207
|
+
assert_equal :blah, span[:data][:sdk][:custom][:tags][:'span.kind']
|
|
208
|
+
|
|
209
|
+
span.finish
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def test_start_span_with_baggage
|
|
213
|
+
clear_all!
|
|
214
|
+
span = OpenTracing.start_span('my_app_entry')
|
|
215
|
+
span.set_baggage_item(:baggage_integer, 1234)
|
|
216
|
+
span.set_baggage_item(:baggage_boolean, false)
|
|
217
|
+
span.set_baggage_item(:baggage_array, [1,2,3,4])
|
|
218
|
+
span.set_baggage_item(:baggage_string, '1234')
|
|
219
|
+
|
|
220
|
+
assert_equal 1234, span.get_baggage_item(:baggage_integer)
|
|
221
|
+
assert_equal false, span.get_baggage_item(:baggage_boolean)
|
|
222
|
+
assert_equal [1,2,3,4], span.get_baggage_item(:baggage_array)
|
|
223
|
+
assert_equal "1234", span.get_baggage_item(:baggage_string)
|
|
224
|
+
span.finish
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def test_start_span_with_timestamps
|
|
228
|
+
clear_all!
|
|
229
|
+
span_tags = {:start_tag => 1234, :another_tag => 'tag_value'}
|
|
230
|
+
|
|
231
|
+
ts_start = Time.now - 1 # Put start time a bit in the past
|
|
232
|
+
ts_start_ms = ::Instana::Util.time_to_ms(ts_start)
|
|
233
|
+
|
|
234
|
+
span = OpenTracing.start_span('my_app_entry', tags: span_tags, start_time: ts_start)
|
|
235
|
+
sleep 0.1
|
|
236
|
+
|
|
237
|
+
ts_finish = Time.now + 5 # Put end time in the future
|
|
238
|
+
ts_finish_ms = ::Instana::Util.time_to_ms(ts_finish)
|
|
239
|
+
|
|
240
|
+
span.finish(ts_finish)
|
|
241
|
+
|
|
242
|
+
assert_equal ts_start_ms, span[:ts]
|
|
243
|
+
assert_equal (ts_finish_ms - ts_start_ms), span[:d]
|
|
244
|
+
|
|
245
|
+
assert_equal 1234, span[:data][:sdk][:custom][:tags][:start_tag]
|
|
246
|
+
assert_equal 'tag_value', span[:data][:sdk][:custom][:tags][:another_tag]
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def test_nested_spans_using_child_of
|
|
250
|
+
clear_all!
|
|
251
|
+
entry_span = OpenTracing.start_span(:rack)
|
|
252
|
+
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
|
253
|
+
av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
|
|
254
|
+
sleep 0.1
|
|
255
|
+
av_span.finish
|
|
256
|
+
ac_span.finish
|
|
257
|
+
entry_span.finish
|
|
258
|
+
|
|
259
|
+
spans = ::Instana.processor.queued_spans
|
|
260
|
+
assert_equal 3, spans.length
|
|
261
|
+
|
|
262
|
+
first_span = find_first_span_by_name(spans, :rack)
|
|
263
|
+
second_span = find_first_span_by_name(spans, :action_controller)
|
|
264
|
+
third_span = find_first_span_by_name(spans, :action_view)
|
|
265
|
+
|
|
266
|
+
# IDs
|
|
267
|
+
assert_equal first_span[:t], second_span[:t]
|
|
268
|
+
assert_equal second_span[:t], third_span[:t]
|
|
269
|
+
|
|
270
|
+
# Linkage
|
|
271
|
+
assert first_span[:p].nil?
|
|
272
|
+
assert_equal first_span[:s], second_span[:p]
|
|
273
|
+
assert_equal second_span[:s], third_span[:p]
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def test_nested_spans_with_baggage
|
|
277
|
+
clear_all!
|
|
278
|
+
entry_span = OpenTracing.start_span(:rack)
|
|
279
|
+
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
|
280
|
+
ac_span.set_baggage_item(:my_bag, 1)
|
|
281
|
+
av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
|
|
282
|
+
sleep 0.1
|
|
283
|
+
av_span.finish
|
|
284
|
+
ac_span.finish
|
|
285
|
+
entry_span.finish
|
|
286
|
+
|
|
287
|
+
spans = ::Instana.processor.queued_spans
|
|
288
|
+
assert_equal 3, spans.length
|
|
289
|
+
|
|
290
|
+
first_span = find_first_span_by_name(spans, :rack)
|
|
291
|
+
second_span = find_first_span_by_name(spans, :action_controller)
|
|
292
|
+
third_span = find_first_span_by_name(spans, :action_view)
|
|
293
|
+
|
|
294
|
+
# IDs
|
|
295
|
+
assert_equal first_span[:t], second_span[:t]
|
|
296
|
+
assert_equal second_span[:t], third_span[:t]
|
|
297
|
+
|
|
298
|
+
# Linkage
|
|
299
|
+
assert first_span[:p].nil?
|
|
300
|
+
assert_equal first_span[:s], second_span[:p]
|
|
301
|
+
assert_equal second_span[:s], third_span[:p]
|
|
302
|
+
|
|
303
|
+
# Every span should have baggage
|
|
304
|
+
assert_equal(nil, entry_span.context.baggage)
|
|
305
|
+
assert_equal({:my_bag=>1}, ac_span.context.baggage)
|
|
306
|
+
assert_equal({:my_bag=>1}, av_span.context.baggage)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def test_context_should_carry_baggage
|
|
310
|
+
clear_all!
|
|
311
|
+
|
|
312
|
+
entry_span = OpenTracing.start_span(:rack)
|
|
313
|
+
entry_span_context = entry_span.context
|
|
314
|
+
|
|
315
|
+
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
|
316
|
+
ac_span.set_baggage_item(:my_bag, 1)
|
|
317
|
+
ac_span_context = ac_span.context
|
|
318
|
+
|
|
319
|
+
av_span = OpenTracing.start_span(:action_view, child_of: entry_span)
|
|
320
|
+
av_span_context = av_span.context
|
|
321
|
+
|
|
322
|
+
sleep 0.1
|
|
323
|
+
|
|
324
|
+
av_span.finish
|
|
325
|
+
ac_span.finish
|
|
326
|
+
entry_span.finish
|
|
327
|
+
|
|
328
|
+
spans = ::Instana.processor.queued_spans
|
|
329
|
+
assert_equal 3, spans.length
|
|
330
|
+
|
|
331
|
+
assert_equal(nil, entry_span.context.baggage)
|
|
332
|
+
assert_equal({:my_bag=>1}, ac_span.context.baggage)
|
|
333
|
+
assert_equal(nil, av_span.context.baggage)
|
|
334
|
+
end
|
|
335
|
+
end
|