instana 1.217.1 → 2.1.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 +4 -4
- data/README.md +2 -1
- data/lib/instana/base.rb +4 -2
- data/lib/instana/instrumentation/action_cable.rb +8 -4
- data/lib/instana/instrumentation/action_controller.rb +2 -4
- data/lib/instana/instrumentation/action_mailer.rb +1 -1
- data/lib/instana/instrumentation/action_view.rb +4 -4
- data/lib/instana/instrumentation/active_job.rb +20 -5
- data/lib/instana/instrumentation/active_record.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_lambda.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
- data/lib/instana/instrumentation/dalli.rb +1 -1
- data/lib/instana/instrumentation/excon.rb +2 -2
- data/lib/instana/instrumentation/graphql.rb +3 -3
- data/lib/instana/instrumentation/grpc.rb +14 -13
- data/lib/instana/instrumentation/mongo.rb +3 -3
- data/lib/instana/instrumentation/net-http.rb +5 -4
- data/lib/instana/instrumentation/rack.rb +36 -4
- data/lib/instana/instrumentation/redis.rb +1 -1
- data/lib/instana/instrumentation/resque.rb +10 -8
- data/lib/instana/instrumentation/rest-client.rb +4 -4
- data/lib/instana/instrumentation/sequel.rb +3 -3
- data/lib/instana/instrumentation/shoryuken.rb +4 -1
- data/lib/instana/instrumentation/sidekiq-client.rb +21 -19
- data/lib/instana/instrumentation/sidekiq-worker.rb +22 -21
- data/lib/instana/instrumented_logger.rb +1 -1
- data/lib/instana/samplers/result.rb +32 -0
- data/lib/instana/samplers/samplers.rb +76 -0
- data/lib/instana/serverless.rb +4 -2
- data/lib/instana/setup.rb +5 -5
- data/lib/instana/span_filtering/condition.rb +134 -0
- data/lib/instana/span_filtering/configuration.rb +262 -0
- data/lib/instana/span_filtering/filter_rule.rb +31 -0
- data/lib/instana/span_filtering.rb +62 -0
- data/lib/instana/trace/export.rb +36 -0
- data/lib/instana/{tracing → trace}/processor.rb +19 -15
- data/lib/instana/trace/span.rb +534 -0
- data/lib/instana/{tracing → trace}/span_context.rb +17 -8
- data/lib/instana/trace/span_kind.rb +51 -0
- data/lib/instana/trace/span_limits.rb +63 -0
- data/lib/instana/{tracer.rb → trace/tracer.rb} +106 -54
- data/lib/instana/trace/tracer_provider.rb +198 -0
- data/lib/instana/trace.rb +74 -0
- data/lib/instana/util.rb +11 -0
- data/lib/instana/version.rb +1 -1
- metadata +89 -267
- data/.circleci/config.yml +0 -485
- data/.codeclimate.yml +0 -23
- data/.editorconfig +0 -10
- data/.fasterer.yml +0 -23
- data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
- data/.github/ISSUE_TEMPLATE/config.yml +0 -8
- data/.github/workflows/pr_commits_signed_off.yml +0 -16
- data/.github/workflows/release-notification-on-slack.yml +0 -34
- data/.gitignore +0 -19
- data/.rubocop.yml +0 -34
- data/.rubocop_todo.yml +0 -1140
- data/.tekton/.currency/docs/report.md +0 -20
- data/.tekton/.currency/resources/requirements.txt +0 -4
- data/.tekton/.currency/resources/table.json +0 -100
- data/.tekton/.currency/scripts/generate_report.py +0 -136
- data/.tekton/README.md +0 -278
- data/.tekton/github-interceptor-secret.yaml +0 -8
- data/.tekton/github-pr-eventlistener.yaml +0 -104
- data/.tekton/github-pr-pipeline.yaml.part +0 -38
- data/.tekton/github-set-status-task.yaml +0 -43
- data/.tekton/github-webhook-ingress.yaml +0 -20
- data/.tekton/pipeline.yaml +0 -571
- data/.tekton/pipelinerun.yaml +0 -21
- data/.tekton/ruby-tracer-prepuller.yaml +0 -87
- data/.tekton/run_unittests.sh +0 -87
- data/.tekton/scheduled-eventlistener.yaml +0 -108
- data/.tekton/task.yaml +0 -449
- data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
- data/Appraisals +0 -124
- data/CONTRIBUTING.md +0 -86
- data/Gemfile +0 -17
- data/LICENSE +0 -22
- data/MAINTAINERS.md +0 -3
- data/Rakefile +0 -49
- data/bin/announce_release_on_slack.py +0 -103
- data/docker-compose.yml +0 -20
- data/download.sh +0 -85
- data/examples/opentracing.rb +0 -35
- data/examples/tracing.rb +0 -84
- data/extras/license_header.rb +0 -44
- data/gemfiles/.bundle/config +0 -2
- data/gemfiles/aws_30.gemfile +0 -21
- data/gemfiles/aws_60.gemfile +0 -16
- data/gemfiles/cuba_30.gemfile +0 -16
- data/gemfiles/cuba_40.gemfile +0 -13
- data/gemfiles/dalli_20.gemfile +0 -15
- data/gemfiles/dalli_30.gemfile +0 -12
- data/gemfiles/dalli_32.gemfile +0 -12
- data/gemfiles/excon_0100.gemfile +0 -14
- data/gemfiles/excon_021.gemfile +0 -17
- data/gemfiles/excon_079.gemfile +0 -17
- data/gemfiles/excon_100.gemfile +0 -14
- data/gemfiles/graphql_10.gemfile +0 -16
- data/gemfiles/graphql_20.gemfile +0 -15
- data/gemfiles/grpc_10.gemfile +0 -15
- data/gemfiles/mongo_216.gemfile +0 -15
- data/gemfiles/mongo_219.gemfile +0 -12
- data/gemfiles/net_http_01.gemfile +0 -17
- data/gemfiles/rack_16.gemfile +0 -15
- data/gemfiles/rack_20.gemfile +0 -15
- data/gemfiles/rack_30.gemfile +0 -13
- data/gemfiles/rails_42.gemfile +0 -18
- data/gemfiles/rails_50.gemfile +0 -19
- data/gemfiles/rails_52.gemfile +0 -19
- data/gemfiles/rails_60.gemfile +0 -19
- data/gemfiles/rails_61.gemfile +0 -20
- data/gemfiles/rails_70.gemfile +0 -17
- data/gemfiles/rails_71.gemfile +0 -17
- data/gemfiles/rails_80.gemfile +0 -17
- data/gemfiles/redis_40.gemfile +0 -15
- data/gemfiles/redis_50.gemfile +0 -13
- data/gemfiles/redis_51.gemfile +0 -13
- data/gemfiles/resque_122.gemfile +0 -16
- data/gemfiles/resque_1274_3scale.gemfile +0 -17
- data/gemfiles/resque_20.gemfile +0 -16
- data/gemfiles/rest_client_16.gemfile +0 -17
- data/gemfiles/rest_client_20.gemfile +0 -17
- data/gemfiles/roda_20.gemfile +0 -16
- data/gemfiles/roda_30.gemfile +0 -16
- data/gemfiles/rubocop_162.gemfile +0 -6
- data/gemfiles/sequel_56.gemfile +0 -16
- data/gemfiles/sequel_57.gemfile +0 -16
- data/gemfiles/sequel_58.gemfile +0 -16
- data/gemfiles/shoryuken_50.gemfile +0 -16
- data/gemfiles/shoryuken_60.gemfile +0 -13
- data/gemfiles/sidekiq_42.gemfile +0 -15
- data/gemfiles/sidekiq_50.gemfile +0 -15
- data/gemfiles/sidekiq_60.gemfile +0 -12
- data/gemfiles/sidekiq_65.gemfile +0 -12
- data/gemfiles/sidekiq_70.gemfile +0 -12
- data/gemfiles/sinatra_14.gemfile +0 -15
- data/gemfiles/sinatra_22.gemfile +0 -12
- data/gemfiles/sinatra_30.gemfile +0 -12
- data/gemfiles/sinatra_40.gemfile +0 -12
- data/instana.gemspec +0 -48
- data/lib/instana/open_tracing/carrier.rb +0 -7
- data/lib/instana/open_tracing/instana_tracer.rb +0 -99
- data/lib/instana/tracing/span.rb +0 -431
- data/lib/opentracing.rb +0 -32
- data/log/.keep +0 -0
- data/sonar-project.properties +0 -9
- data/test/activator_test.rb +0 -50
- data/test/backend/agent_test.rb +0 -80
- data/test/backend/gc_snapshot_test.rb +0 -11
- data/test/backend/host_agent_activation_observer_test.rb +0 -73
- data/test/backend/host_agent_lookup_test.rb +0 -78
- data/test/backend/host_agent_reporting_observer_test.rb +0 -276
- data/test/backend/host_agent_test.rb +0 -89
- data/test/backend/process_info_test.rb +0 -83
- data/test/backend/request_client_test.rb +0 -39
- data/test/backend/serverless_agent_test.rb +0 -83
- data/test/benchmarks/bench_id_generation.rb +0 -15
- data/test/benchmarks/bench_opentracing.rb +0 -16
- data/test/config_test.rb +0 -34
- data/test/frameworks/cuba_test.rb +0 -61
- data/test/frameworks/roda_test.rb +0 -60
- data/test/frameworks/sinatra_test.rb +0 -71
- data/test/instana_test.rb +0 -37
- data/test/instrumentation/aws_test.rb +0 -241
- data/test/instrumentation/dalli_test.rb +0 -325
- data/test/instrumentation/excon_test.rb +0 -204
- data/test/instrumentation/graphql_test.rb +0 -289
- data/test/instrumentation/grpc_test.rb +0 -420
- data/test/instrumentation/mongo_test.rb +0 -68
- data/test/instrumentation/net_http_test.rb +0 -220
- data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
- data/test/instrumentation/rack_test.rb +0 -415
- data/test/instrumentation/rails_action_cable_test.rb +0 -135
- data/test/instrumentation/rails_action_controller_test.rb +0 -218
- data/test/instrumentation/rails_action_mailer_test.rb +0 -66
- data/test/instrumentation/rails_action_view_test.rb +0 -154
- data/test/instrumentation/rails_active_job_test.rb +0 -65
- data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -45
- data/test/instrumentation/rails_active_record_test.rb +0 -115
- data/test/instrumentation/redis_test.rb +0 -152
- data/test/instrumentation/resque_test.rb +0 -188
- data/test/instrumentation/rest_client_test.rb +0 -107
- data/test/instrumentation/sequel_test.rb +0 -105
- data/test/instrumentation/shoryuken_test.rb +0 -47
- data/test/instrumentation/sidekiq-client_test.rb +0 -169
- data/test/instrumentation/sidekiq-worker_test.rb +0 -180
- data/test/secrets_test.rb +0 -112
- data/test/serverless_test.rb +0 -369
- data/test/snapshot/deltable_test.rb +0 -17
- data/test/snapshot/docker_container_test.rb +0 -82
- data/test/snapshot/fargate_container_test.rb +0 -82
- data/test/snapshot/fargate_process_test.rb +0 -35
- data/test/snapshot/fargate_task_test.rb +0 -49
- data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
- data/test/snapshot/google_cloud_run_process_test.rb +0 -33
- data/test/snapshot/lambda_function_test.rb +0 -37
- data/test/snapshot/ruby_process_test.rb +0 -32
- data/test/support/apps/active_record/active_record.rb +0 -24
- data/test/support/apps/grpc/boot.rb +0 -23
- data/test/support/apps/grpc/grpc_server.rb +0 -84
- data/test/support/apps/http_endpoint/boot.rb +0 -28
- data/test/support/apps/rails/boot.rb +0 -219
- data/test/support/apps/rails/models/block.rb +0 -21
- data/test/support/apps/rails/models/block6.rb +0 -21
- data/test/support/apps/resque/boot.rb +0 -5
- data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
- data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
- data/test/support/apps/sidekiq/boot.rb +0 -25
- data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
- data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
- data/test/support/apps/sidekiq/worker.rb +0 -37
- data/test/support/helpers.rb +0 -85
- data/test/support/mock_timer.rb +0 -20
- data/test/test_helper.rb +0 -69
- data/test/tracing/custom_test.rb +0 -226
- data/test/tracing/id_management_test.rb +0 -80
- data/test/tracing/instrumented_logger_test.rb +0 -39
- data/test/tracing/opentracing_test.rb +0 -382
- data/test/tracing/processor_test.rb +0 -58
- data/test/tracing/span_context_test.rb +0 -22
- data/test/tracing/span_test.rb +0 -179
- data/test/tracing/tracer_async_test.rb +0 -230
- data/test/tracing/tracer_test.rb +0 -352
- data/test/util_test.rb +0 -10
@@ -1,68 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2021
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class MongoTest < Minitest::Test
|
7
|
-
def setup
|
8
|
-
clear_all!
|
9
|
-
end
|
10
|
-
|
11
|
-
def teardown
|
12
|
-
::Instana.config[:allow_exit_as_root] = false
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_mongo
|
16
|
-
Instana.tracer.start_or_continue_trace(:'mongo-test') do
|
17
|
-
client = Mongo::Client.new('mongodb://127.0.0.1:27017/instana')
|
18
|
-
client[:people].delete_many({ name: /$S*/ })
|
19
|
-
client[:people].insert_many([{ _id: 1, name: "Stan" }])
|
20
|
-
end
|
21
|
-
|
22
|
-
spans = ::Instana.processor.queued_spans
|
23
|
-
delete_span, insert_span, = spans
|
24
|
-
|
25
|
-
delete_data = delete_span[:data][:mongo]
|
26
|
-
insert_data = insert_span[:data][:mongo]
|
27
|
-
|
28
|
-
assert_equal delete_span[:n], :mongo
|
29
|
-
assert_equal insert_span[:n], :mongo
|
30
|
-
|
31
|
-
assert_equal delete_data[:namespace], "instana"
|
32
|
-
assert_equal delete_data[:command], "delete"
|
33
|
-
assert_equal delete_data[:peer], {hostname: "127.0.0.1", port: 27017}
|
34
|
-
assert delete_data[:json].include?("delete")
|
35
|
-
|
36
|
-
assert_equal insert_data[:namespace], "instana"
|
37
|
-
assert_equal insert_data[:command], "insert"
|
38
|
-
assert_equal insert_data[:peer], {hostname: "127.0.0.1", port: 27017}
|
39
|
-
assert insert_data[:json].include?("insert")
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_mongo_as_root_exit_span
|
43
|
-
::Instana.config[:allow_exit_as_root] = true
|
44
|
-
|
45
|
-
client = Mongo::Client.new('mongodb://127.0.0.1:27017/instana')
|
46
|
-
client[:people].delete_many({ name: /$S*/ })
|
47
|
-
client[:people].insert_many([{ _id: 1, name: "Stan" }])
|
48
|
-
|
49
|
-
spans = ::Instana.processor.queued_spans
|
50
|
-
delete_span, insert_span, = spans
|
51
|
-
|
52
|
-
delete_data = delete_span[:data][:mongo]
|
53
|
-
insert_data = insert_span[:data][:mongo]
|
54
|
-
|
55
|
-
assert_equal delete_span[:n], :mongo
|
56
|
-
assert_equal insert_span[:n], :mongo
|
57
|
-
|
58
|
-
assert_equal delete_data[:namespace], "instana"
|
59
|
-
assert_equal delete_data[:command], "delete"
|
60
|
-
assert_equal delete_data[:peer], {hostname: "127.0.0.1", port: 27017}
|
61
|
-
assert delete_data[:json].include?("delete")
|
62
|
-
|
63
|
-
assert_equal insert_data[:namespace], "instana"
|
64
|
-
assert_equal insert_data[:command], "insert"
|
65
|
-
assert_equal insert_data[:peer], {hostname: "127.0.0.1", port: 27017}
|
66
|
-
assert insert_data[:json].include?("insert")
|
67
|
-
end
|
68
|
-
end
|
@@ -1,220 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2016
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
require 'support/apps/http_endpoint/boot'
|
6
|
-
|
7
|
-
class NetHTTPTest < Minitest::Test
|
8
|
-
def teardown
|
9
|
-
::Instana.config[:allow_exit_as_root] = false
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_config_defaults
|
13
|
-
assert ::Instana.config[:nethttp].is_a?(Hash)
|
14
|
-
assert ::Instana.config[:nethttp].key?(:enabled)
|
15
|
-
assert_equal true, ::Instana.config[:nethttp][:enabled]
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_get_with_query
|
19
|
-
clear_all!
|
20
|
-
WebMock.allow_net_connect!
|
21
|
-
|
22
|
-
Instana.tracer.start_or_continue_trace(:"net-http-test") do
|
23
|
-
Net::HTTP.get(URI('http://127.0.0.1:6511/?query_value=true'))
|
24
|
-
end
|
25
|
-
|
26
|
-
spans = ::Instana.processor.queued_spans
|
27
|
-
assert_equal 3, spans.length
|
28
|
-
|
29
|
-
http_span = find_first_span_by_name(spans, :'net-http')
|
30
|
-
assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
|
31
|
-
assert_equal "query_value=true", http_span[:data][:http][:params]
|
32
|
-
|
33
|
-
WebMock.disable_net_connect!
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_get_without_query
|
37
|
-
clear_all!
|
38
|
-
WebMock.allow_net_connect!
|
39
|
-
|
40
|
-
Instana.tracer.start_or_continue_trace(:"net-http-test") do
|
41
|
-
Net::HTTP.get(URI('http://127.0.0.1:6511/'))
|
42
|
-
end
|
43
|
-
|
44
|
-
spans = ::Instana.processor.queued_spans
|
45
|
-
assert_equal 3, spans.length
|
46
|
-
|
47
|
-
http_span = find_first_span_by_name(spans, :'net-http')
|
48
|
-
assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
|
49
|
-
assert_equal "200", http_span[:data][:http][:status]
|
50
|
-
|
51
|
-
WebMock.disable_net_connect!
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_get_without_query_as_root_exit_span
|
55
|
-
clear_all!
|
56
|
-
::Instana.config[:allow_exit_as_root] = true
|
57
|
-
WebMock.allow_net_connect!
|
58
|
-
Net::HTTP.get(URI('http://127.0.0.1:6511/'))
|
59
|
-
|
60
|
-
spans = ::Instana.processor.queued_spans
|
61
|
-
assert_equal 2, spans.length # 1 rack span from the endpoint is generated extra
|
62
|
-
|
63
|
-
http_span = find_first_span_by_name(spans, :'net-http')
|
64
|
-
assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
|
65
|
-
assert_equal "200", http_span[:data][:http][:status]
|
66
|
-
|
67
|
-
WebMock.disable_net_connect!
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_block_request
|
71
|
-
clear_all!
|
72
|
-
WebMock.allow_net_connect!
|
73
|
-
url = "http://127.0.0.1:6511/"
|
74
|
-
|
75
|
-
uri = URI.parse(url)
|
76
|
-
req = Net::HTTP::Get.new(uri)
|
77
|
-
|
78
|
-
response = nil
|
79
|
-
Instana.tracer.start_or_continue_trace('net-http-test') do
|
80
|
-
Net::HTTP.start(req.uri.hostname, req.uri.port, :open_timeout => 1, :read_timeout => 1) do |http|
|
81
|
-
response = http.request(req)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
spans = ::Instana.processor.queued_spans
|
86
|
-
assert_equal 3, spans.length
|
87
|
-
|
88
|
-
rs_span = find_first_span_by_name(spans, :rack)
|
89
|
-
first_span = find_first_span_by_name(spans, :'net-http-test')
|
90
|
-
second_span = find_first_span_by_name(spans, :'net-http')
|
91
|
-
|
92
|
-
# Span name validation
|
93
|
-
assert_equal :sdk, first_span[:n]
|
94
|
-
assert_equal :'net-http', second_span[:n]
|
95
|
-
|
96
|
-
# first_span is the parent of second_span
|
97
|
-
assert_equal first_span[:s], second_span[:p]
|
98
|
-
|
99
|
-
# data keys/values
|
100
|
-
refute_nil second_span.key?(:data)
|
101
|
-
refute_nil second_span[:data].key?(:http)
|
102
|
-
assert_equal "http://127.0.0.1:6511/", second_span[:data][:http][:url]
|
103
|
-
assert_equal "200", second_span[:data][:http][:status]
|
104
|
-
assert !second_span.key?(:stack)
|
105
|
-
|
106
|
-
# Rack server trace should have the same trace ID
|
107
|
-
assert_equal rs_span[:t], first_span[:t]
|
108
|
-
assert_equal first_span[:t], second_span[:t]
|
109
|
-
|
110
|
-
# Rack server trace should have net-http has parent span
|
111
|
-
assert_equal second_span[:s], rs_span[:p]
|
112
|
-
|
113
|
-
WebMock.disable_net_connect!
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_basic_post_without_uri
|
117
|
-
clear_all!
|
118
|
-
WebMock.allow_net_connect!
|
119
|
-
|
120
|
-
response = nil
|
121
|
-
Instana.tracer.start_or_continue_trace('net-http-test') do
|
122
|
-
http = Net::HTTP.new("127.0.0.1", 6511)
|
123
|
-
response = http.request(Net::HTTP::Post.new("/"))
|
124
|
-
end
|
125
|
-
|
126
|
-
spans = ::Instana.processor.queued_spans
|
127
|
-
assert_equal 3, spans.length
|
128
|
-
|
129
|
-
rack_span = find_first_span_by_name(spans, :rack)
|
130
|
-
sdk_span = find_first_span_by_name(spans, :'net-http-test')
|
131
|
-
http_span = find_first_span_by_name(spans, :'net-http')
|
132
|
-
|
133
|
-
# Span name validation
|
134
|
-
assert_equal :sdk, sdk_span[:n]
|
135
|
-
assert_equal :'net-http', http_span[:n]
|
136
|
-
|
137
|
-
# first_span is the parent of second_span
|
138
|
-
assert_equal sdk_span[:s], http_span[:p]
|
139
|
-
|
140
|
-
# data keys/values
|
141
|
-
refute_nil http_span.key?(:data)
|
142
|
-
refute_nil http_span[:data].key?(:http)
|
143
|
-
assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
|
144
|
-
assert_equal "200", http_span[:data][:http][:status]
|
145
|
-
assert !http_span.key?(:stack)
|
146
|
-
|
147
|
-
# Rack server trace should have the same trace ID
|
148
|
-
assert_equal rack_span[:t], sdk_span[:t]
|
149
|
-
assert_equal sdk_span[:t], http_span[:t]
|
150
|
-
|
151
|
-
# Rack server trace should have net-http has parent span
|
152
|
-
assert_equal http_span[:s], rack_span[:p]
|
153
|
-
|
154
|
-
WebMock.disable_net_connect!
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_request_with_dns_error
|
158
|
-
clear_all!
|
159
|
-
WebMock.allow_net_connect!
|
160
|
-
|
161
|
-
begin
|
162
|
-
Instana.tracer.start_or_continue_trace('net-http-error-test') do
|
163
|
-
http = Net::HTTP.new("asdfasdf.asdfsadf", 80)
|
164
|
-
http.request(Net::HTTP::Get.new("/blah"))
|
165
|
-
end
|
166
|
-
rescue Exception
|
167
|
-
nil
|
168
|
-
end
|
169
|
-
|
170
|
-
spans = ::Instana.processor.queued_spans
|
171
|
-
assert_equal 1, spans.length
|
172
|
-
|
173
|
-
first_span = spans.first
|
174
|
-
|
175
|
-
assert_equal :sdk, first_span[:n]
|
176
|
-
assert_equal :'net-http-error-test', first_span[:data][:sdk][:name]
|
177
|
-
assert_equal true, first_span[:error]
|
178
|
-
assert_equal 1, first_span[:ec]
|
179
|
-
ts_key = first_span[:data][:sdk][:custom][:logs].keys.first
|
180
|
-
assert first_span[:data][:sdk][:custom][:logs].key?(ts_key)
|
181
|
-
assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:event)
|
182
|
-
assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:parameters)
|
183
|
-
|
184
|
-
WebMock.disable_net_connect!
|
185
|
-
end
|
186
|
-
|
187
|
-
def test_request_with_5xx_response
|
188
|
-
clear_all!
|
189
|
-
WebMock.allow_net_connect!
|
190
|
-
|
191
|
-
response = nil
|
192
|
-
Instana.tracer.start_or_continue_trace('net-http-error-test') do
|
193
|
-
http = Net::HTTP.new("127.0.0.1", 6511)
|
194
|
-
response = http.request(Net::HTTP::Get.new("/error"))
|
195
|
-
end
|
196
|
-
|
197
|
-
spans = ::Instana.processor.queued_spans
|
198
|
-
assert_equal 3, spans.length
|
199
|
-
|
200
|
-
rack_span = find_first_span_by_name(spans, :rack)
|
201
|
-
sdk_span = find_first_span_by_name(spans, :'net-http-error-test')
|
202
|
-
http_span = find_first_span_by_name(spans, :'net-http')
|
203
|
-
|
204
|
-
assert_equal :sdk, sdk_span[:n]
|
205
|
-
assert_equal :'net-http-error-test', sdk_span[:data][:sdk][:name]
|
206
|
-
assert_nil sdk_span[:error]
|
207
|
-
assert_nil sdk_span[:ec]
|
208
|
-
|
209
|
-
refute_nil http_span.key?(:data)
|
210
|
-
refute_nil http_span[:data].key?(:http)
|
211
|
-
assert_equal "http://127.0.0.1:6511/error", http_span[:data][:http][:url]
|
212
|
-
assert_equal "500", http_span[:data][:http][:status]
|
213
|
-
assert_equal :'net-http', http_span[:n]
|
214
|
-
assert !http_span.key?(:stack)
|
215
|
-
assert_equal true, http_span[:error]
|
216
|
-
assert_equal 1, http_span[:ec]
|
217
|
-
|
218
|
-
WebMock.disable_net_connect!
|
219
|
-
end
|
220
|
-
end
|
@@ -1,211 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2021
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class RackInstrumentedRequestTest < Minitest::Test
|
7
|
-
def test_suppression_via_x_instana_l
|
8
|
-
req = Instana::InstrumentedRequest.new(
|
9
|
-
'HTTP_X_INSTANA_L' => '0'
|
10
|
-
)
|
11
|
-
|
12
|
-
assert req.skip_trace?
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_suppression_via_x_instana_l_with_trailing_content
|
16
|
-
req = Instana::InstrumentedRequest.new(
|
17
|
-
'HTTP_X_INSTANA_L' => '0;sample-data'
|
18
|
-
)
|
19
|
-
|
20
|
-
assert req.skip_trace?
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_no_suppression_assume_level_1_as_default
|
24
|
-
req = Instana::InstrumentedRequest.new({})
|
25
|
-
|
26
|
-
assert !req.skip_trace?
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_no_suppression_when_x_instana_l_is_provided_explicitly
|
30
|
-
req = Instana::InstrumentedRequest.new(
|
31
|
-
'HTTP_X_INSTANA_L' => '1'
|
32
|
-
)
|
33
|
-
|
34
|
-
assert !req.skip_trace?
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_skip_trace_without_header
|
38
|
-
req = Instana::InstrumentedRequest.new({})
|
39
|
-
|
40
|
-
refute req.skip_trace?
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_incoming_context
|
44
|
-
id = Instana::Util.generate_id
|
45
|
-
req = Instana::InstrumentedRequest.new(
|
46
|
-
'HTTP_X_INSTANA_L' => '1',
|
47
|
-
'HTTP_X_INSTANA_T' => id,
|
48
|
-
'HTTP_X_INSTANA_S' => id
|
49
|
-
)
|
50
|
-
|
51
|
-
expected = {
|
52
|
-
trace_id: id,
|
53
|
-
span_id: id,
|
54
|
-
from_w3c: false,
|
55
|
-
level: '1'
|
56
|
-
}
|
57
|
-
|
58
|
-
assert_equal expected, req.incoming_context
|
59
|
-
refute req.continuing_from_trace_parent?
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_incoming_w3c_context
|
63
|
-
req = Instana::InstrumentedRequest.new(
|
64
|
-
'HTTP_TRACEPARENT' => '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
|
65
|
-
)
|
66
|
-
|
67
|
-
expected = {
|
68
|
-
external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
|
69
|
-
external_state: nil,
|
70
|
-
trace_id: 'a3ce929d0e0e4736',
|
71
|
-
span_id: '00f067aa0ba902b7',
|
72
|
-
from_w3c: true
|
73
|
-
}
|
74
|
-
|
75
|
-
assert_equal expected, req.incoming_context
|
76
|
-
assert req.continuing_from_trace_parent?
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_incoming_w3c_context_newer_version_additional_fields
|
80
|
-
req = Instana::InstrumentedRequest.new(
|
81
|
-
'HTTP_TRACEPARENT' => 'fe-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-abcdefg'
|
82
|
-
)
|
83
|
-
|
84
|
-
expected = {
|
85
|
-
external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
|
86
|
-
external_state: nil,
|
87
|
-
trace_id: 'a3ce929d0e0e4736',
|
88
|
-
span_id: '00f067aa0ba902b7',
|
89
|
-
from_w3c: true
|
90
|
-
}
|
91
|
-
|
92
|
-
assert_equal expected, req.incoming_context
|
93
|
-
assert req.continuing_from_trace_parent?
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_incoming_w3c_context_unknown_flags
|
97
|
-
req = Instana::InstrumentedRequest.new(
|
98
|
-
'HTTP_TRACEPARENT' => '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-ff'
|
99
|
-
)
|
100
|
-
|
101
|
-
expected = {
|
102
|
-
external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
|
103
|
-
external_state: nil,
|
104
|
-
trace_id: 'a3ce929d0e0e4736',
|
105
|
-
span_id: '00f067aa0ba902b7',
|
106
|
-
from_w3c: true
|
107
|
-
}
|
108
|
-
|
109
|
-
assert_equal expected, req.incoming_context
|
110
|
-
assert req.continuing_from_trace_parent?
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_incoming_w3c_context_invalid_version
|
114
|
-
req = Instana::InstrumentedRequest.new(
|
115
|
-
'HTTP_TRACEPARENT' => 'ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
|
116
|
-
)
|
117
|
-
|
118
|
-
expected = {}
|
119
|
-
|
120
|
-
assert_equal expected, req.incoming_context
|
121
|
-
refute req.continuing_from_trace_parent?
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_incoming_w3c_context_invalid_id
|
125
|
-
req = Instana::InstrumentedRequest.new(
|
126
|
-
'HTTP_TRACEPARENT' => '00-00000000000000000000000000000000-0000000000000000-01'
|
127
|
-
)
|
128
|
-
|
129
|
-
expected = {}
|
130
|
-
|
131
|
-
assert_equal expected, req.incoming_context
|
132
|
-
refute req.continuing_from_trace_parent?
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_incoming_invalid_w3c_context
|
136
|
-
req = Instana::InstrumentedRequest.new(
|
137
|
-
'HTTP_TRACEPARENT' => '00-XXa3ce929d0e0e4736-00f67aa0ba902b7-01'
|
138
|
-
)
|
139
|
-
|
140
|
-
expected = {}
|
141
|
-
|
142
|
-
assert_equal expected, req.incoming_context
|
143
|
-
refute req.continuing_from_trace_parent?
|
144
|
-
end
|
145
|
-
|
146
|
-
def test_incoming_w3c_state
|
147
|
-
req = Instana::InstrumentedRequest.new(
|
148
|
-
'HTTP_TRACESTATE' => 'a=12345,in=123;abe,c=[+]'
|
149
|
-
)
|
150
|
-
|
151
|
-
expected = {
|
152
|
-
t: '123',
|
153
|
-
p: 'abe'
|
154
|
-
}
|
155
|
-
|
156
|
-
assert_equal expected, req.instana_ancestor
|
157
|
-
end
|
158
|
-
|
159
|
-
def test_request_tags
|
160
|
-
::Instana.agent.define_singleton_method(:extra_headers) { %w[X-Capture-This] }
|
161
|
-
|
162
|
-
req = Instana::InstrumentedRequest.new(
|
163
|
-
'HTTP_HOST' => 'example.com',
|
164
|
-
'REQUEST_METHOD' => 'GET',
|
165
|
-
'HTTP_X_CAPTURE_THIS' => 'that',
|
166
|
-
'PATH_INFO' => '/',
|
167
|
-
'QUERY_STRING' => 'test=true'
|
168
|
-
)
|
169
|
-
|
170
|
-
expected = {
|
171
|
-
method: 'GET',
|
172
|
-
url: '/',
|
173
|
-
host: 'example.com',
|
174
|
-
header: {
|
175
|
-
"X-Capture-This": 'that'
|
176
|
-
},
|
177
|
-
params: 'test=true'
|
178
|
-
}
|
179
|
-
|
180
|
-
assert_equal expected, req.request_tags
|
181
|
-
::Instana.agent.singleton_class.send(:remove_method, :extra_headers)
|
182
|
-
end
|
183
|
-
|
184
|
-
def test_correlation_data_valid
|
185
|
-
req = Instana::InstrumentedRequest.new(
|
186
|
-
'HTTP_X_INSTANA_L' => '1,correlationType=web ;correlationId=1234567890abcdef'
|
187
|
-
)
|
188
|
-
expected = {
|
189
|
-
type: 'web',
|
190
|
-
id: '1234567890abcdef'
|
191
|
-
}
|
192
|
-
|
193
|
-
assert_equal expected, req.correlation_data
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_correlation_data_invalid
|
197
|
-
req = Instana::InstrumentedRequest.new(
|
198
|
-
'HTTP_X_INSTANA_L' => '0;sample-data'
|
199
|
-
)
|
200
|
-
|
201
|
-
assert_equal({}, req.correlation_data)
|
202
|
-
end
|
203
|
-
|
204
|
-
def test_correlation_data_legacy
|
205
|
-
req = Instana::InstrumentedRequest.new(
|
206
|
-
'HTTP_X_INSTANA_L' => '1'
|
207
|
-
)
|
208
|
-
|
209
|
-
assert_equal({}, req.correlation_data)
|
210
|
-
end
|
211
|
-
end
|