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,230 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2016
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class TracerAsyncTest < Minitest::Test
|
7
|
-
def test_same_thread_async_tracing
|
8
|
-
clear_all!
|
9
|
-
|
10
|
-
# Start tracing
|
11
|
-
::Instana.tracer.log_start_or_continue(:rack, {:rack_start_kv => 1})
|
12
|
-
|
13
|
-
# Start an asynchronous span
|
14
|
-
span = ::Instana.tracer.log_async_entry(:my_async_op, { :entry_kv => 1})
|
15
|
-
|
16
|
-
refute_nil span
|
17
|
-
refute_nil span.context
|
18
|
-
|
19
|
-
# Current span should still be rack
|
20
|
-
assert_equal :rack, ::Instana.tracer.current_span.name
|
21
|
-
|
22
|
-
# End an asynchronous span
|
23
|
-
::Instana.tracer.log_async_exit(:my_async_op, { :exit_kv => 1 }, span)
|
24
|
-
|
25
|
-
# Current span should still be rack
|
26
|
-
assert_equal :rack, ::Instana.tracer.current_span.name
|
27
|
-
|
28
|
-
# End tracing
|
29
|
-
::Instana.tracer.log_end(:rack, {:rack_end_kv => 1})
|
30
|
-
|
31
|
-
spans = ::Instana.processor.queued_spans
|
32
|
-
assert_equal 2, spans.length
|
33
|
-
|
34
|
-
rack_span = find_first_span_by_name(spans, :rack)
|
35
|
-
async_span = find_first_span_by_name(spans, :my_async_op)
|
36
|
-
|
37
|
-
# Both spans have a duration
|
38
|
-
assert rack_span[:d]
|
39
|
-
assert async_span[:d]
|
40
|
-
|
41
|
-
# first_span is the parent of first_span
|
42
|
-
assert_equal rack_span[:s], async_span[:p]
|
43
|
-
# same trace id
|
44
|
-
assert_equal rack_span[:t], async_span[:t]
|
45
|
-
|
46
|
-
# KV checks
|
47
|
-
assert_equal 1, rack_span[:data][:rack_start_kv]
|
48
|
-
assert_equal 1, rack_span[:data][:rack_end_kv]
|
49
|
-
assert_equal 1, async_span[:data][:sdk][:custom][:tags][:entry_kv]
|
50
|
-
assert_equal 1, async_span[:data][:sdk][:custom][:tags][:exit_kv]
|
51
|
-
end
|
52
|
-
|
53
|
-
def test_diff_thread_async_tracing
|
54
|
-
clear_all!
|
55
|
-
|
56
|
-
# Start tracing
|
57
|
-
::Instana.tracer.log_start_or_continue(:rack, {:rack_start_kv => 1})
|
58
|
-
|
59
|
-
t_context = ::Instana.tracer.context
|
60
|
-
refute_nil t_context.trace_id
|
61
|
-
refute_nil t_context.span_id
|
62
|
-
|
63
|
-
Thread.new do
|
64
|
-
::Instana.tracer.log_start_or_continue(:async_thread, { :async_start => 1 }, t_context)
|
65
|
-
::Instana.tracer.log_entry(:sleepy_time, { :tired => 1 })
|
66
|
-
# Sleep beyond the end of this root trace
|
67
|
-
sleep 0.5
|
68
|
-
::Instana.tracer.log_exit(:sleepy_time, { :wake_up => 1})
|
69
|
-
::Instana.tracer.log_end(:async_thread, { :async_end => 1 })
|
70
|
-
end
|
71
|
-
|
72
|
-
# Current span should still be rack
|
73
|
-
assert_equal :rack, ::Instana.tracer.current_span.name
|
74
|
-
|
75
|
-
# End tracing
|
76
|
-
::Instana.tracer.log_end(:rack, {:rack_end_kv => 1})
|
77
|
-
|
78
|
-
assert_equal false, ::Instana.tracer.tracing?
|
79
|
-
|
80
|
-
# Sleep for 1 seconds to wait for the async thread to finish
|
81
|
-
sleep 1
|
82
|
-
|
83
|
-
spans = ::Instana.processor.queued_spans
|
84
|
-
assert_equal 3, spans.length
|
85
|
-
|
86
|
-
rack_span = find_first_span_by_name(spans, :rack)
|
87
|
-
async_span1 = find_first_span_by_name(spans, :async_thread)
|
88
|
-
async_span2 = find_first_span_by_name(spans, :sleepy_time)
|
89
|
-
|
90
|
-
# Validate the first original thread span
|
91
|
-
assert_equal :rack, rack_span[:n]
|
92
|
-
assert rack_span[:d]
|
93
|
-
assert_equal 1, rack_span[:data][:rack_start_kv]
|
94
|
-
assert_equal 1, rack_span[:data][:rack_end_kv]
|
95
|
-
|
96
|
-
# first span in second trace
|
97
|
-
assert_equal :sdk, async_span1[:n]
|
98
|
-
assert_equal :async_thread, async_span1[:data][:sdk][:name]
|
99
|
-
assert async_span1[:d]
|
100
|
-
assert_equal 1, async_span1[:data][:sdk][:custom][:tags][:async_start]
|
101
|
-
assert_equal 1, async_span1[:data][:sdk][:custom][:tags][:async_end]
|
102
|
-
|
103
|
-
# second span in second trace
|
104
|
-
assert_equal :sdk, async_span2[:n]
|
105
|
-
assert_equal :sleepy_time, async_span2[:data][:sdk][:name]
|
106
|
-
assert async_span2[:d]
|
107
|
-
assert_equal 1, async_span2[:data][:sdk][:custom][:tags][:tired]
|
108
|
-
assert_equal 1, async_span2[:data][:sdk][:custom][:tags][:wake_up]
|
109
|
-
|
110
|
-
# Validate linkage
|
111
|
-
# All spans have the same trace ID
|
112
|
-
assert rack_span[:t]==async_span1[:t] && async_span1[:t]==async_span2[:t]
|
113
|
-
|
114
|
-
assert_equal async_span2[:p], async_span1[:s]
|
115
|
-
assert_equal async_span1[:p], rack_span[:s]
|
116
|
-
|
117
|
-
assert rack_span[:t] == rack_span[:s]
|
118
|
-
assert async_span1[:t] != async_span1[:s]
|
119
|
-
assert async_span2[:t] != async_span2[:s]
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_out_of_order_async_tracing
|
123
|
-
clear_all!
|
124
|
-
|
125
|
-
# Start tracing
|
126
|
-
::Instana.tracer.log_start_or_continue(:rack, {:rack_start_kv => 1})
|
127
|
-
|
128
|
-
# Start three asynchronous spans
|
129
|
-
span1 = ::Instana.tracer.log_async_entry(:my_async_op1, { :entry_kv => 1})
|
130
|
-
span2 = ::Instana.tracer.log_async_entry(:my_async_op2, { :entry_kv => 2})
|
131
|
-
span3 = ::Instana.tracer.log_async_entry(:my_async_op3, { :entry_kv => 3})
|
132
|
-
|
133
|
-
# Current span should still be rack
|
134
|
-
assert_equal :rack, ::Instana.tracer.current_span.name
|
135
|
-
|
136
|
-
# Log info to the async spans (out of order)
|
137
|
-
span2.set_tags({ :info_kv => 2 })
|
138
|
-
span1.set_tags({ :info_kv => 1 })
|
139
|
-
span3.set_tags({ :info_kv => 3 })
|
140
|
-
|
141
|
-
# Log out of order errors to the async spans
|
142
|
-
span3.add_error(Exception.new("Async span 3"))
|
143
|
-
span2.add_error(Exception.new("Async span 3"))
|
144
|
-
|
145
|
-
# End two out of order asynchronous spans
|
146
|
-
span3.set_tags({ :exit_kv => 3 })
|
147
|
-
span3.close
|
148
|
-
span2.set_tags({ :exit_kv => 2 })
|
149
|
-
span2.close
|
150
|
-
|
151
|
-
# Current span should still be rack
|
152
|
-
assert_equal :rack, ::Instana.tracer.current_span.name
|
153
|
-
|
154
|
-
# End tracing
|
155
|
-
::Instana.tracer.log_end(:rack, {:rack_end_kv => 1})
|
156
|
-
|
157
|
-
# Log an error to and close out the remaining async span after the parent trace has finished
|
158
|
-
span1.add_error(Exception.new("Async span 1"))
|
159
|
-
span1.set_tags({ :exit_kv => 1 })
|
160
|
-
span1.close
|
161
|
-
|
162
|
-
spans = ::Instana.processor.queued_spans
|
163
|
-
assert_equal 4, spans.length
|
164
|
-
|
165
|
-
first_span = find_first_span_by_name(spans, :rack)
|
166
|
-
second_span = find_first_span_by_name(spans, :my_async_op1)
|
167
|
-
third_span = find_first_span_by_name(spans, :my_async_op2)
|
168
|
-
fourth_span = find_first_span_by_name(spans, :my_async_op3)
|
169
|
-
|
170
|
-
# Assure all spans have completed
|
171
|
-
assert first_span.key?(:d)
|
172
|
-
assert second_span.key?(:d)
|
173
|
-
assert third_span.key?(:d)
|
174
|
-
assert fourth_span.key?(:d)
|
175
|
-
|
176
|
-
# Linkage
|
177
|
-
assert_equal first_span[:s], second_span[:p]
|
178
|
-
assert_equal first_span[:s], third_span[:p]
|
179
|
-
assert_equal first_span[:s], fourth_span[:p]
|
180
|
-
|
181
|
-
# same trace id
|
182
|
-
assert_equal first_span[:t], second_span[:t]
|
183
|
-
assert_equal first_span[:t], third_span[:t]
|
184
|
-
assert_equal first_span[:t], fourth_span[:t]
|
185
|
-
|
186
|
-
assert first_span[:n] != :sdk
|
187
|
-
assert second_span[:n] == :sdk
|
188
|
-
assert third_span[:n] == :sdk
|
189
|
-
assert fourth_span[:n] == :sdk
|
190
|
-
|
191
|
-
# KV checks
|
192
|
-
assert_equal 1, first_span[:data][:rack_start_kv]
|
193
|
-
assert_equal 1, first_span[:data][:rack_end_kv]
|
194
|
-
assert_equal 1, second_span[:data][:sdk][:custom][:tags][:entry_kv]
|
195
|
-
assert_equal 1, second_span[:data][:sdk][:custom][:tags][:exit_kv]
|
196
|
-
assert_equal 2, third_span[:data][:sdk][:custom][:tags][:entry_kv]
|
197
|
-
assert_equal 2, third_span[:data][:sdk][:custom][:tags][:exit_kv]
|
198
|
-
assert_equal 3, fourth_span[:data][:sdk][:custom][:tags][:entry_kv]
|
199
|
-
assert_equal 3, fourth_span[:data][:sdk][:custom][:tags][:exit_kv]
|
200
|
-
end
|
201
|
-
|
202
|
-
def test_async_helpers
|
203
|
-
clear_all!
|
204
|
-
::Instana.tracer.log_start_or_continue(:rack)
|
205
|
-
|
206
|
-
span = ::Instana.tracer.log_async_entry(:async, {})
|
207
|
-
::Instana.tracer.log_async_info({a: 1}, span)
|
208
|
-
::Instana.tracer.log_async_error(StandardError.new('Error'), span)
|
209
|
-
::Instana.tracer.log_async_exit(nil, {}, span)
|
210
|
-
|
211
|
-
spans = ::Instana.processor.queued_spans
|
212
|
-
span, = spans
|
213
|
-
|
214
|
-
assert_equal({a: 1}, span[:data][:sdk][:custom][:tags])
|
215
|
-
assert_equal(1, span[:ec])
|
216
|
-
end
|
217
|
-
|
218
|
-
def test_async_helpers_tag_exit
|
219
|
-
clear_all!
|
220
|
-
::Instana.tracer.log_start_or_continue(:rack)
|
221
|
-
|
222
|
-
span = ::Instana.tracer.log_async_entry(:async, {})
|
223
|
-
::Instana.tracer.log_async_exit(nil, {a: 1}, span)
|
224
|
-
|
225
|
-
spans = ::Instana.processor.queued_spans
|
226
|
-
span, = spans
|
227
|
-
|
228
|
-
assert_equal({a: 1}, span[:data][:sdk][:custom][:tags])
|
229
|
-
end
|
230
|
-
end
|
data/test/tracing/tracer_test.rb
DELETED
@@ -1,352 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2016
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class TracerTest < Minitest::Test
|
7
|
-
def test_that_it_has_a_valid_tracer
|
8
|
-
refute_nil ::Instana.tracer
|
9
|
-
assert ::Instana.tracer.is_a?(::Instana::Tracer)
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_obey_tracing_config
|
13
|
-
clear_all!
|
14
|
-
|
15
|
-
::Instana.config[:tracing][:enabled] = false
|
16
|
-
assert_equal false, ::Instana.tracer.tracing?
|
17
|
-
|
18
|
-
::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
|
19
|
-
assert_equal false, ::Instana.tracer.tracing?
|
20
|
-
end
|
21
|
-
|
22
|
-
::Instana.config[:tracing][:enabled] = true
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_basic_trace_block
|
26
|
-
clear_all!
|
27
|
-
|
28
|
-
assert_equal false, ::Instana.tracer.tracing?
|
29
|
-
|
30
|
-
::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
|
31
|
-
assert_equal true, ::Instana.tracer.tracing?
|
32
|
-
sleep 0.1
|
33
|
-
end
|
34
|
-
|
35
|
-
spans = ::Instana.processor.queued_spans
|
36
|
-
assert_equal 1, spans.length
|
37
|
-
|
38
|
-
first_span = spans.first
|
39
|
-
assert_equal :rack, first_span[:n]
|
40
|
-
assert first_span[:ts].is_a?(Integer)
|
41
|
-
assert first_span[:d].is_a?(Integer)
|
42
|
-
assert first_span[:d].between?(100, 130)
|
43
|
-
assert first_span.key?(:data)
|
44
|
-
assert_equal 1, first_span[:data][:one]
|
45
|
-
assert first_span.key?(:f)
|
46
|
-
assert_equal ::Instana.agent.source, first_span[:f]
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_exotic_tag_types
|
50
|
-
clear_all!
|
51
|
-
|
52
|
-
assert_equal false, ::Instana.tracer.tracing?
|
53
|
-
|
54
|
-
ipv4 = '111.111.111.111'
|
55
|
-
|
56
|
-
::Instana.tracer.start_or_continue_trace(:rack, {:ipaddr => ipv4}) do
|
57
|
-
assert_equal true, ::Instana.tracer.tracing?
|
58
|
-
sleep 0.1
|
59
|
-
end
|
60
|
-
|
61
|
-
spans = ::Instana.processor.queued_spans
|
62
|
-
assert_equal 1, spans.length
|
63
|
-
|
64
|
-
first_span = spans.first
|
65
|
-
assert_equal :rack, first_span[:n]
|
66
|
-
assert first_span[:ts].is_a?(Integer)
|
67
|
-
assert first_span[:d].is_a?(Integer)
|
68
|
-
assert first_span[:d].between?(100, 130)
|
69
|
-
assert first_span.key?(:data)
|
70
|
-
assert first_span[:data].key?(:ipaddr)
|
71
|
-
assert first_span[:data][:ipaddr].is_a?(String)
|
72
|
-
assert first_span.key?(:f)
|
73
|
-
assert_equal ::Instana.agent.source, first_span[:f]
|
74
|
-
end
|
75
|
-
|
76
|
-
def test_errors_are_properly_propagated
|
77
|
-
clear_all!
|
78
|
-
exception_raised = false
|
79
|
-
begin
|
80
|
-
::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
|
81
|
-
raise Exception.new('Error in block - this should continue to propogate outside of tracing')
|
82
|
-
end
|
83
|
-
rescue Exception
|
84
|
-
exception_raised = true
|
85
|
-
end
|
86
|
-
|
87
|
-
assert exception_raised
|
88
|
-
|
89
|
-
spans = ::Instana.processor.queued_spans
|
90
|
-
assert_equal 1, spans.length
|
91
|
-
|
92
|
-
first_span = spans.first
|
93
|
-
assert_equal :rack, first_span[:n]
|
94
|
-
assert first_span[:ts].is_a?(Integer)
|
95
|
-
assert first_span[:ts] > 0
|
96
|
-
assert first_span[:d].is_a?(Integer)
|
97
|
-
assert first_span[:d].between?(0, 5)
|
98
|
-
assert first_span.key?(:data)
|
99
|
-
assert_equal 1, first_span[:data][:one]
|
100
|
-
assert first_span.key?(:f)
|
101
|
-
assert_equal ::Instana.agent.source, first_span[:f]
|
102
|
-
assert_equal first_span[:error], true
|
103
|
-
assert_equal first_span[:ec], 1
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_complex_trace_block
|
107
|
-
clear_all!
|
108
|
-
::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
|
109
|
-
sleep 0.2
|
110
|
-
::Instana.tracer.trace(:sub_block, {:sub_two => 2}) do
|
111
|
-
sleep 0.2
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
spans = ::Instana.processor.queued_spans
|
116
|
-
assert_equal 2, spans.length
|
117
|
-
|
118
|
-
rack_span = find_first_span_by_name(spans, :rack)
|
119
|
-
sdk_span = find_first_span_by_name(spans, :sub_block)
|
120
|
-
|
121
|
-
assert_equal rack_span[:n], :rack
|
122
|
-
assert_nil rack_span[:p]
|
123
|
-
assert_equal rack_span[:t], rack_span[:s]
|
124
|
-
assert_equal rack_span[:data][:one], 1
|
125
|
-
|
126
|
-
assert_equal sdk_span[:n], :sdk
|
127
|
-
assert_equal sdk_span[:data][:sdk][:name], :sub_block
|
128
|
-
assert_equal sdk_span[:data][:sdk][:type], :intermediate
|
129
|
-
assert_equal sdk_span[:k], 3
|
130
|
-
assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_two], 2
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_custom_complex_trace_block
|
134
|
-
clear_all!
|
135
|
-
::Instana.tracer.start_or_continue_trace(:root_span, {:one => 1}) do
|
136
|
-
sleep 0.2
|
137
|
-
::Instana.tracer.trace(:sub_span, {:sub_two => 2}) do
|
138
|
-
sleep 0.2
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
spans = ::Instana.processor.queued_spans
|
143
|
-
assert_equal 2, spans.length
|
144
|
-
|
145
|
-
root_span = find_first_span_by_name(spans, :root_span)
|
146
|
-
sub_span = find_first_span_by_name(spans, :sub_span)
|
147
|
-
|
148
|
-
assert_equal root_span[:n], :sdk
|
149
|
-
assert_equal root_span[:data][:sdk][:name], :root_span
|
150
|
-
assert_equal root_span[:data][:sdk][:type], :entry
|
151
|
-
assert_equal root_span[:k], 1
|
152
|
-
assert_nil root_span[:p]
|
153
|
-
assert_equal root_span[:t], root_span[:s]
|
154
|
-
assert_equal root_span[:data][:sdk][:custom][:tags][:one], 1
|
155
|
-
|
156
|
-
assert_equal sub_span[:n], :sdk
|
157
|
-
assert_equal sub_span[:data][:sdk][:name], :sub_span
|
158
|
-
assert_equal sub_span[:data][:sdk][:type], :intermediate
|
159
|
-
assert_equal sub_span[:k], 3
|
160
|
-
assert_equal sub_span[:p], root_span[:s]
|
161
|
-
assert_equal sub_span[:t], root_span[:t]
|
162
|
-
assert_equal sub_span[:data][:sdk][:custom][:tags][:sub_two], 2
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_basic_low_level_tracing
|
166
|
-
clear_all!
|
167
|
-
|
168
|
-
assert_equal false, ::Instana.tracer.tracing?
|
169
|
-
# Start tracing
|
170
|
-
::Instana.tracer.log_start_or_continue(:rack, {:one => 1})
|
171
|
-
assert_equal true, ::Instana.tracer.tracing?
|
172
|
-
::Instana.tracer.log_info({:info_logged => 1})
|
173
|
-
# End tracing
|
174
|
-
::Instana.tracer.log_end(:rack, {:close_one => 1})
|
175
|
-
assert_equal false, ::Instana.tracer.tracing?
|
176
|
-
|
177
|
-
spans = ::Instana.processor.queued_spans
|
178
|
-
assert_equal 1, spans.length
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_complex_low_level_tracing
|
182
|
-
clear_all!
|
183
|
-
|
184
|
-
assert_equal false, ::Instana.tracer.tracing?
|
185
|
-
|
186
|
-
# Start tracing
|
187
|
-
::Instana.tracer.log_start_or_continue(:rack, {:one => 1})
|
188
|
-
assert_equal true, ::Instana.tracer.tracing?
|
189
|
-
::Instana.tracer.log_info({:info_logged => 1})
|
190
|
-
|
191
|
-
# Start tracing a sub span
|
192
|
-
::Instana.tracer.log_entry(:sub_task)
|
193
|
-
assert_equal true, ::Instana.tracer.tracing?
|
194
|
-
::Instana.tracer.log_info({:sub_task_info => 1})
|
195
|
-
# Exit from the sub span
|
196
|
-
::Instana.tracer.log_exit(:sub_task, {:sub_task_exit_info => 1})
|
197
|
-
assert_equal true, ::Instana.tracer.tracing?
|
198
|
-
|
199
|
-
# End tracing
|
200
|
-
::Instana.tracer.log_end(:rack, {:close_one => 1})
|
201
|
-
assert_equal false, ::Instana.tracer.tracing?
|
202
|
-
|
203
|
-
spans = ::Instana.processor.queued_spans
|
204
|
-
assert_equal 2, spans.length
|
205
|
-
|
206
|
-
rack_span = find_first_span_by_name(spans, :rack)
|
207
|
-
sdk_span = find_first_span_by_name(spans, :sub_task)
|
208
|
-
|
209
|
-
assert_equal :rack, rack_span[:n]
|
210
|
-
assert rack_span.key?(:data)
|
211
|
-
assert_equal rack_span[:data][:one], 1
|
212
|
-
assert_equal rack_span[:data][:info_logged], 1
|
213
|
-
assert_equal rack_span[:data][:close_one], 1
|
214
|
-
|
215
|
-
assert rack_span.key?(:f)
|
216
|
-
assert_equal ::Instana.agent.source, rack_span[:f]
|
217
|
-
|
218
|
-
assert_equal sdk_span[:n], :sdk
|
219
|
-
assert_equal sdk_span[:data][:sdk][:name], :sub_task
|
220
|
-
assert_equal sdk_span[:data][:sdk][:type], :intermediate
|
221
|
-
assert_equal sdk_span[:k], 3
|
222
|
-
assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_info], 1
|
223
|
-
assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_exit_info], 1
|
224
|
-
end
|
225
|
-
|
226
|
-
def test_block_tracing_error_capture
|
227
|
-
clear_all!
|
228
|
-
exception_raised = false
|
229
|
-
begin
|
230
|
-
::Instana.tracer.start_or_continue_trace(:test_trace, {:one => 1}) do
|
231
|
-
::Instana.tracer.trace(:test_trace_two) do
|
232
|
-
raise Exception.new("Block exception test error")
|
233
|
-
end
|
234
|
-
end
|
235
|
-
rescue Exception
|
236
|
-
exception_raised = true
|
237
|
-
end
|
238
|
-
|
239
|
-
assert exception_raised
|
240
|
-
|
241
|
-
spans = ::Instana.processor.queued_spans
|
242
|
-
assert_equal 2, spans.length
|
243
|
-
|
244
|
-
sdk_span = spans.last
|
245
|
-
|
246
|
-
assert_equal sdk_span[:n], :sdk
|
247
|
-
assert_equal sdk_span[:data][:sdk][:name], :test_trace
|
248
|
-
assert_equal sdk_span[:data][:sdk][:type], :entry
|
249
|
-
assert_equal sdk_span[:k], 1
|
250
|
-
assert_equal sdk_span[:data][:sdk][:custom][:tags][:one], 1
|
251
|
-
assert_equal sdk_span[:error], true
|
252
|
-
assert_equal sdk_span[:ec], 1
|
253
|
-
assert_equal sdk_span.key?(:stack), true
|
254
|
-
end
|
255
|
-
|
256
|
-
def test_low_level_error_logging
|
257
|
-
clear_all!
|
258
|
-
::Instana.tracer.log_start_or_continue(:test_trace, {:one => 1})
|
259
|
-
::Instana.tracer.log_info({:info_logged => 1})
|
260
|
-
::Instana.tracer.log_error(Exception.new("Low level tracing api error"))
|
261
|
-
::Instana.tracer.log_end(:test_trace, {:close_one => 1})
|
262
|
-
|
263
|
-
spans = ::Instana.processor.queued_spans
|
264
|
-
assert_equal 1, spans.length
|
265
|
-
|
266
|
-
sdk_span = spans[0]
|
267
|
-
|
268
|
-
assert_equal sdk_span[:n], :sdk
|
269
|
-
assert_equal sdk_span[:data][:sdk][:name], :test_trace
|
270
|
-
assert_equal sdk_span[:data][:sdk][:type], :entry
|
271
|
-
assert_equal sdk_span[:k], 1
|
272
|
-
assert_equal sdk_span[:data][:sdk][:custom][:tags][:one], 1
|
273
|
-
assert_equal sdk_span[:data][:sdk][:custom][:tags][:info_logged], 1
|
274
|
-
assert_equal sdk_span[:data][:sdk][:custom][:tags][:close_one], 1
|
275
|
-
assert_equal sdk_span[:error], true
|
276
|
-
assert_equal sdk_span[:ec], 1
|
277
|
-
assert_equal sdk_span.key?(:stack), false
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_nil_returns
|
281
|
-
clear_all!
|
282
|
-
|
283
|
-
refute ::Instana.tracer.tracing?
|
284
|
-
assert_nil ::Instana.tracer.log_entry(nil)
|
285
|
-
assert_nil ::Instana.tracer.log_info(nil)
|
286
|
-
assert_nil ::Instana.tracer.log_error(nil)
|
287
|
-
assert_nil ::Instana.tracer.log_exit(nil)
|
288
|
-
assert_nil ::Instana.tracer.log_end(nil)
|
289
|
-
assert_nil ::Instana.tracer.log_async_entry(nil, nil)
|
290
|
-
assert_nil ::Instana.tracer.context
|
291
|
-
end
|
292
|
-
|
293
|
-
def test_tracing_span
|
294
|
-
clear_all!
|
295
|
-
|
296
|
-
refute ::Instana.tracer.tracing_span?(:rack)
|
297
|
-
::Instana.tracer.log_start_or_continue(:rack)
|
298
|
-
assert ::Instana.tracer.tracing_span?(:rack)
|
299
|
-
end
|
300
|
-
|
301
|
-
def test_log_exit_warn_span_name
|
302
|
-
logger = Minitest::Mock.new
|
303
|
-
logger.expect(:warn, true, [String])
|
304
|
-
subject = Instana::Tracer.new(logger: logger)
|
305
|
-
|
306
|
-
subject.log_start_or_continue(:sample)
|
307
|
-
subject.log_exit(:roda)
|
308
|
-
|
309
|
-
logger.verify
|
310
|
-
end
|
311
|
-
|
312
|
-
def test_log_end_warn_span_name
|
313
|
-
clear_all!
|
314
|
-
|
315
|
-
logger = Minitest::Mock.new
|
316
|
-
logger.expect(:warn, true, [String])
|
317
|
-
subject = Instana::Tracer.new(logger: logger)
|
318
|
-
|
319
|
-
subject.log_start_or_continue(:sample)
|
320
|
-
subject.log_end(:roda)
|
321
|
-
|
322
|
-
logger.verify
|
323
|
-
end
|
324
|
-
|
325
|
-
def test_log_entry_span
|
326
|
-
clear_all!
|
327
|
-
|
328
|
-
subject = Instana::Tracer.new
|
329
|
-
span = Instana::Span.new(:rack)
|
330
|
-
|
331
|
-
subject.log_entry(:sample, {}, ::Instana::Util.now_in_ms, span)
|
332
|
-
assert subject.tracing?
|
333
|
-
assert subject.current_span.parent, span
|
334
|
-
end
|
335
|
-
|
336
|
-
def test_log_entry_span_context
|
337
|
-
clear_all!
|
338
|
-
|
339
|
-
subject = Instana::Tracer.new
|
340
|
-
span_context = Instana::SpanContext.new('test', 'test')
|
341
|
-
|
342
|
-
subject.log_entry(:sample, {}, ::Instana::Util.now_in_ms, span_context)
|
343
|
-
assert subject.tracing?
|
344
|
-
assert subject.current_span.context, span_context
|
345
|
-
end
|
346
|
-
|
347
|
-
def test_missing_class_super
|
348
|
-
assert_raises NoMethodError do
|
349
|
-
Instana::Tracer.invalid
|
350
|
-
end
|
351
|
-
end
|
352
|
-
end
|
data/test/util_test.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2021
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class UtilTest < Minitest::Test
|
7
|
-
def test_get_rb_source_error
|
8
|
-
assert_equal({ error: "Only Ruby source files are allowed. (*.rb)" }, Instana::Util.get_rb_source('invalid.txt'))
|
9
|
-
end
|
10
|
-
end
|