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,382 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2017
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
require 'rack/test'
|
6
|
-
|
7
|
-
if Rack.release >= '3.0.0'
|
8
|
-
require 'rackup/lobster'
|
9
|
-
else
|
10
|
-
require 'rack/lobster'
|
11
|
-
end
|
12
|
-
|
13
|
-
require "opentracing"
|
14
|
-
|
15
|
-
module Instana
|
16
|
-
class OTRack1
|
17
|
-
def initialize(app)
|
18
|
-
@app = app
|
19
|
-
end
|
20
|
-
|
21
|
-
def call(env)
|
22
|
-
otrack1_span = OpenTracing.start_span(:otrack1)
|
23
|
-
result = @app.call(env)
|
24
|
-
otrack1_span.finish
|
25
|
-
result
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class OTRack2
|
30
|
-
def initialize(app)
|
31
|
-
@app = app
|
32
|
-
end
|
33
|
-
|
34
|
-
def call(env)
|
35
|
-
otrack2_span = OpenTracing.start_span(:otrack2)
|
36
|
-
result = @app.call(env)
|
37
|
-
otrack2_span.finish
|
38
|
-
result
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class OpenTracerTest < Minitest::Test
|
44
|
-
include Rack::Test::Methods
|
45
|
-
|
46
|
-
def app
|
47
|
-
@app = Rack::Builder.new {
|
48
|
-
use Instana::Rack
|
49
|
-
use Instana::OTRack1
|
50
|
-
use Rack::CommonLogger
|
51
|
-
use Rack::ShowExceptions
|
52
|
-
use Instana::OTRack2
|
53
|
-
map "/mrlobster" do
|
54
|
-
if Rack.release >= '3.0.0'
|
55
|
-
run Rackup::Lobster.new
|
56
|
-
else
|
57
|
-
run Rack::Lobster.new
|
58
|
-
end
|
59
|
-
end
|
60
|
-
}
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_supplies_all_ot_interfaces
|
64
|
-
clear_all!
|
65
|
-
assert defined?(OpenTracing)
|
66
|
-
assert OpenTracing.respond_to?(:global_tracer)
|
67
|
-
assert OpenTracing.global_tracer.respond_to?(:start_span)
|
68
|
-
assert OpenTracing.global_tracer.respond_to?(:inject)
|
69
|
-
assert OpenTracing.global_tracer.respond_to?(:extract)
|
70
|
-
|
71
|
-
assert OpenTracing.respond_to?(:start_span)
|
72
|
-
|
73
|
-
assert defined?(OpenTracing::Carrier)
|
74
|
-
carrier = OpenTracing::Carrier.new
|
75
|
-
assert carrier.respond_to?(:[])
|
76
|
-
assert carrier.respond_to?(:[]=)
|
77
|
-
assert carrier.respond_to?(:each)
|
78
|
-
|
79
|
-
span = OpenTracing.start_span(:blah)
|
80
|
-
assert span.respond_to?(:finish)
|
81
|
-
assert span.respond_to?(:set_tag)
|
82
|
-
assert span.respond_to?(:tags)
|
83
|
-
assert span.respond_to?(:operation_name=)
|
84
|
-
assert span.respond_to?(:set_baggage_item)
|
85
|
-
assert span.respond_to?(:get_baggage_item)
|
86
|
-
assert span.respond_to?(:context)
|
87
|
-
assert span.respond_to?(:log)
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_basic_get_with_opentracing
|
91
|
-
clear_all!
|
92
|
-
get '/mrlobster'
|
93
|
-
assert last_response.ok?
|
94
|
-
|
95
|
-
spans = ::Instana.processor.queued_spans
|
96
|
-
assert_equal 3, spans.length
|
97
|
-
|
98
|
-
first_span = find_first_span_by_name(spans, :rack)
|
99
|
-
second_span = find_first_span_by_name(spans, :otrack1)
|
100
|
-
third_span = find_first_span_by_name(spans, :otrack2)
|
101
|
-
|
102
|
-
assert_equal :rack, first_span[:n]
|
103
|
-
assert first_span[:ts].is_a?(Integer)
|
104
|
-
assert first_span[:ts] > 0
|
105
|
-
assert first_span[:d].is_a?(Integer)
|
106
|
-
assert first_span[:d].between?(0, 5)
|
107
|
-
assert first_span.key?(:data)
|
108
|
-
assert first_span[:data].key?(:http)
|
109
|
-
assert_equal "GET", first_span[:data][:http][:method]
|
110
|
-
assert_equal "/mrlobster", first_span[:data][:http][:url]
|
111
|
-
assert_equal 200, first_span[:data][:http][:status]
|
112
|
-
assert_equal 'example.org', first_span[:data][:http][:host]
|
113
|
-
assert_equal :otrack1, second_span[:data][:sdk][:name]
|
114
|
-
assert second_span.key?(:data)
|
115
|
-
assert second_span[:data].key?(:sdk)
|
116
|
-
assert second_span[:data][:sdk].key?(:name)
|
117
|
-
assert_equal :otrack2, third_span[:data][:sdk][:name]
|
118
|
-
assert third_span.key?(:data)
|
119
|
-
assert third_span[:data].key?(:sdk)
|
120
|
-
assert third_span[:data][:sdk].key?(:name)
|
121
|
-
|
122
|
-
# ID Validation
|
123
|
-
refute_equal first_span[:t], second_span[:t]
|
124
|
-
refute_equal second_span[:t], third_span[:t]
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_get_with_inject_extract
|
128
|
-
clear_all!
|
129
|
-
|
130
|
-
trace_id = ::Instana::Util.generate_id
|
131
|
-
span_id = ::Instana::Util.generate_id
|
132
|
-
|
133
|
-
header 'X-Instana-T', ::Instana::Util.id_to_header(trace_id)
|
134
|
-
header 'X-Instana-S', ::Instana::Util.id_to_header(span_id)
|
135
|
-
|
136
|
-
get '/mrlobster'
|
137
|
-
assert last_response.ok?
|
138
|
-
|
139
|
-
spans = ::Instana.processor.queued_spans
|
140
|
-
|
141
|
-
assert_equal 3, spans.length
|
142
|
-
first_span = find_first_span_by_name(spans, :rack)
|
143
|
-
|
144
|
-
# Make sure context was picked up and continued in the resulting
|
145
|
-
# trace
|
146
|
-
assert_equal trace_id, first_span[:t]
|
147
|
-
assert_equal span_id, first_span[:p]
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_start_span_with_tags
|
151
|
-
clear_all!
|
152
|
-
span = OpenTracing.start_span('my_app_entry')
|
153
|
-
|
154
|
-
assert span.is_a?(::Instana::Span)
|
155
|
-
|
156
|
-
span.set_tag(:tag_integer, 1234)
|
157
|
-
span.set_tag(:tag_boolean, true)
|
158
|
-
span.set_tag(:tag_array, [1,2,3,4])
|
159
|
-
span.set_tag(:tag_string, "1234")
|
160
|
-
|
161
|
-
assert_equal 1234, span.tags(:tag_integer)
|
162
|
-
assert_equal true, span.tags(:tag_boolean)
|
163
|
-
assert_equal [1,2,3,4], span.tags(:tag_array)
|
164
|
-
assert_equal "1234", span.tags(:tag_string)
|
165
|
-
span.finish
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_start_span_with_custom_start_time
|
169
|
-
clear_all!
|
170
|
-
now = Time.now
|
171
|
-
now_in_ms = ::Instana::Util.time_to_ms(now)
|
172
|
-
|
173
|
-
span = OpenTracing.start_span('my_app_entry', :start_time => now)
|
174
|
-
|
175
|
-
assert span.is_a?(::Instana::Span)
|
176
|
-
|
177
|
-
span.set_tag(:tag_integer, 1234)
|
178
|
-
span.set_tag(:tag_boolean, true)
|
179
|
-
span.set_tag(:tag_array, [1,2,3,4])
|
180
|
-
span.set_tag(:tag_string, "1234")
|
181
|
-
|
182
|
-
assert_equal 1234, span.tags(:tag_integer)
|
183
|
-
assert_equal true, span.tags(:tag_boolean)
|
184
|
-
assert_equal [1,2,3,4], span.tags(:tag_array)
|
185
|
-
assert_equal "1234", span.tags(:tag_string)
|
186
|
-
span.finish
|
187
|
-
|
188
|
-
assert span[:ts].is_a?(Integer)
|
189
|
-
assert_equal now_in_ms, span[:ts]
|
190
|
-
assert span[:d].is_a?(Integer)
|
191
|
-
assert span[:d].between?(0, 5)
|
192
|
-
end
|
193
|
-
|
194
|
-
def test_span_kind_translation
|
195
|
-
clear_all!
|
196
|
-
span = OpenTracing.start_span('my_app_entry')
|
197
|
-
|
198
|
-
assert span.is_a?(::Instana::Span)
|
199
|
-
|
200
|
-
span.set_tag(:'span.kind', :server)
|
201
|
-
assert_equal :entry, span[:data][:sdk][:type]
|
202
|
-
assert_equal 1, span[:k]
|
203
|
-
|
204
|
-
span.set_tag(:'span.kind', :consumer)
|
205
|
-
assert_equal :entry, span[:data][:sdk][:type]
|
206
|
-
assert_equal 1, span[:k]
|
207
|
-
|
208
|
-
span.set_tag(:'span.kind', :client)
|
209
|
-
assert_equal :exit, span[:data][:sdk][:type]
|
210
|
-
assert_equal 2, span[:k]
|
211
|
-
|
212
|
-
span.set_tag(:'span.kind', :producer)
|
213
|
-
assert_equal :exit, span[:data][:sdk][:type]
|
214
|
-
assert_equal 2, span[:k]
|
215
|
-
|
216
|
-
span[:data][:sdk].delete(:type)
|
217
|
-
span.set_tag(:'span.kind', :blah)
|
218
|
-
assert_equal :intermediate, span[:data][:sdk][:type]
|
219
|
-
assert_equal 3, span[:k]
|
220
|
-
assert_equal :blah, span[:data][:sdk][:custom][:tags][:'span.kind']
|
221
|
-
|
222
|
-
span.finish
|
223
|
-
end
|
224
|
-
|
225
|
-
def test_start_span_with_baggage
|
226
|
-
clear_all!
|
227
|
-
span = OpenTracing.start_span('my_app_entry')
|
228
|
-
span.set_baggage_item(:baggage_integer, 1234)
|
229
|
-
span.set_baggage_item(:baggage_boolean, false)
|
230
|
-
span.set_baggage_item(:baggage_array, [1,2,3,4])
|
231
|
-
span.set_baggage_item(:baggage_string, '1234')
|
232
|
-
|
233
|
-
assert_equal 1234, span.get_baggage_item(:baggage_integer)
|
234
|
-
assert_equal false, span.get_baggage_item(:baggage_boolean)
|
235
|
-
assert_equal [1,2,3,4], span.get_baggage_item(:baggage_array)
|
236
|
-
assert_equal "1234", span.get_baggage_item(:baggage_string)
|
237
|
-
span.finish
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_start_span_with_timestamps
|
241
|
-
clear_all!
|
242
|
-
span_tags = {:start_tag => 1234, :another_tag => 'tag_value'}
|
243
|
-
|
244
|
-
ts_start = Time.now - 1 # Put start time a bit in the past
|
245
|
-
ts_start_ms = ::Instana::Util.time_to_ms(ts_start)
|
246
|
-
|
247
|
-
span = OpenTracing.start_span('my_app_entry', tags: span_tags, start_time: ts_start)
|
248
|
-
sleep 0.1
|
249
|
-
|
250
|
-
ts_finish = Time.now + 5 # Put end time in the future
|
251
|
-
ts_finish_ms = ::Instana::Util.time_to_ms(ts_finish)
|
252
|
-
|
253
|
-
span.finish(ts_finish)
|
254
|
-
|
255
|
-
assert_equal ts_start_ms, span[:ts]
|
256
|
-
assert_equal (ts_finish_ms - ts_start_ms), span[:d]
|
257
|
-
|
258
|
-
assert_equal 1234, span[:data][:sdk][:custom][:tags][:start_tag]
|
259
|
-
assert_equal 'tag_value', span[:data][:sdk][:custom][:tags][:another_tag]
|
260
|
-
end
|
261
|
-
|
262
|
-
def test_nested_spans_using_child_of
|
263
|
-
clear_all!
|
264
|
-
entry_span = OpenTracing.start_span(:rack)
|
265
|
-
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
266
|
-
av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
|
267
|
-
sleep 0.1
|
268
|
-
av_span.finish
|
269
|
-
ac_span.finish
|
270
|
-
entry_span.finish
|
271
|
-
|
272
|
-
spans = ::Instana.processor.queued_spans
|
273
|
-
assert_equal 3, spans.length
|
274
|
-
|
275
|
-
first_span = find_first_span_by_name(spans, :rack)
|
276
|
-
second_span = find_first_span_by_name(spans, :action_controller)
|
277
|
-
third_span = find_first_span_by_name(spans, :action_view)
|
278
|
-
|
279
|
-
# IDs
|
280
|
-
assert_equal first_span[:t], second_span[:t]
|
281
|
-
assert_equal second_span[:t], third_span[:t]
|
282
|
-
|
283
|
-
# Linkage
|
284
|
-
assert first_span[:p].nil?
|
285
|
-
assert_equal first_span[:s], second_span[:p]
|
286
|
-
assert_equal second_span[:s], third_span[:p]
|
287
|
-
end
|
288
|
-
|
289
|
-
def test_nested_spans_with_baggage
|
290
|
-
clear_all!
|
291
|
-
entry_span = OpenTracing.start_span(:rack)
|
292
|
-
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
293
|
-
ac_span.set_baggage_item(:my_bag, 1)
|
294
|
-
av_span = OpenTracing.start_span(:action_view, child_of: ac_span)
|
295
|
-
sleep 0.1
|
296
|
-
av_span.finish
|
297
|
-
ac_span.finish
|
298
|
-
entry_span.finish
|
299
|
-
|
300
|
-
spans = ::Instana.processor.queued_spans
|
301
|
-
assert_equal 3, spans.length
|
302
|
-
|
303
|
-
first_span = find_first_span_by_name(spans, :rack)
|
304
|
-
second_span = find_first_span_by_name(spans, :action_controller)
|
305
|
-
third_span = find_first_span_by_name(spans, :action_view)
|
306
|
-
|
307
|
-
# IDs
|
308
|
-
assert_equal first_span[:t], second_span[:t]
|
309
|
-
assert_equal second_span[:t], third_span[:t]
|
310
|
-
|
311
|
-
# Linkage
|
312
|
-
assert first_span[:p].nil?
|
313
|
-
assert_equal first_span[:s], second_span[:p]
|
314
|
-
assert_equal second_span[:s], third_span[:p]
|
315
|
-
|
316
|
-
# Every span should have baggage
|
317
|
-
assert_equal({}, entry_span.context.baggage)
|
318
|
-
assert_equal({:my_bag=>1}, ac_span.context.baggage)
|
319
|
-
assert_equal({:my_bag=>1}, av_span.context.baggage)
|
320
|
-
end
|
321
|
-
|
322
|
-
def test_context_should_carry_baggage
|
323
|
-
clear_all!
|
324
|
-
|
325
|
-
entry_span = OpenTracing.start_span(:rack)
|
326
|
-
entry_span_context = entry_span.context
|
327
|
-
|
328
|
-
ac_span = OpenTracing.start_span(:action_controller, child_of: entry_span)
|
329
|
-
ac_span.set_baggage_item(:my_bag, 1)
|
330
|
-
ac_span_context = ac_span.context
|
331
|
-
|
332
|
-
av_span = OpenTracing.start_span(:action_view, child_of: entry_span)
|
333
|
-
av_span_context = av_span.context
|
334
|
-
|
335
|
-
sleep 0.1
|
336
|
-
|
337
|
-
av_span.finish
|
338
|
-
ac_span.finish
|
339
|
-
entry_span.finish
|
340
|
-
|
341
|
-
spans = ::Instana.processor.queued_spans
|
342
|
-
assert_equal 3, spans.length
|
343
|
-
|
344
|
-
assert_equal({}, entry_span.context.baggage)
|
345
|
-
assert_equal({:my_bag=>1}, ac_span.context.baggage)
|
346
|
-
assert_equal({}, av_span.context.baggage)
|
347
|
-
end
|
348
|
-
|
349
|
-
def test_start_active_span
|
350
|
-
clear_all!
|
351
|
-
|
352
|
-
span = OpenTracing.start_active_span(:rack)
|
353
|
-
assert_equal ::Instana::Tracer.current_span, span
|
354
|
-
|
355
|
-
sleep 0.1
|
356
|
-
|
357
|
-
span.finish
|
358
|
-
|
359
|
-
spans = ::Instana.processor.queued_spans
|
360
|
-
assert_equal 1, spans.length
|
361
|
-
end
|
362
|
-
|
363
|
-
def test_active_span
|
364
|
-
clear_all!
|
365
|
-
|
366
|
-
span = OpenTracing.start_active_span(:rack)
|
367
|
-
assert_equal OpenTracing.active_span, span
|
368
|
-
end
|
369
|
-
|
370
|
-
def test_active_span_block
|
371
|
-
clear_all!
|
372
|
-
|
373
|
-
obj = OpenTracing.start_active_span(:rack) { 1 }
|
374
|
-
assert_equal 1, obj
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_span_rename
|
378
|
-
span = OpenTracing.start_active_span(:rack)
|
379
|
-
span.operation_name = 'test'
|
380
|
-
assert_equal 'test', span.name
|
381
|
-
end
|
382
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2021
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class ProcessorTest < Minitest::Test
|
7
|
-
def test_queued_spans_empty
|
8
|
-
subject = Instana::Processor.new
|
9
|
-
assert_equal [], subject.queued_spans
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_queued_spans_valid_level
|
13
|
-
clear_all!
|
14
|
-
subject = Instana::Processor.new
|
15
|
-
|
16
|
-
span_context = Instana::SpanContext.new('9', '8', 0)
|
17
|
-
span = Instana::Span.new(:rack, parent_ctx: span_context)
|
18
|
-
span2 = Instana::Span.new(:"net-http")
|
19
|
-
|
20
|
-
subject.add_span(span)
|
21
|
-
subject.add_span(span2)
|
22
|
-
|
23
|
-
spans = subject.queued_spans
|
24
|
-
valid_span, = spans
|
25
|
-
|
26
|
-
assert_equal 1, spans.length
|
27
|
-
assert_equal :"net-http", valid_span[:n]
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_queued_spans_invalid_type
|
31
|
-
subject = Instana::Processor.new
|
32
|
-
subject.add_span(false)
|
33
|
-
|
34
|
-
assert_equal [], subject.queued_spans
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_send
|
38
|
-
ENV['INSTANA_TEST'] = nil
|
39
|
-
|
40
|
-
subject = Instana::Processor.new
|
41
|
-
span = Instana::Span.new(:rack)
|
42
|
-
subject.add_span(span)
|
43
|
-
|
44
|
-
was_invoked = false
|
45
|
-
|
46
|
-
subject.send do |spans|
|
47
|
-
was_invoked = true
|
48
|
-
rack_span, = spans
|
49
|
-
|
50
|
-
assert_equal 1, spans.length
|
51
|
-
assert_equal :rack, rack_span[:n]
|
52
|
-
end
|
53
|
-
|
54
|
-
assert was_invoked
|
55
|
-
ensure
|
56
|
-
ENV['INSTANA_TEST'] = 'true'
|
57
|
-
end
|
58
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2021
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class SpanContextTest < Minitest::Test
|
7
|
-
def test_to_hash
|
8
|
-
subject = Instana::SpanContext.new('trace', 'span')
|
9
|
-
assert_equal({trace_id: 'trace', span_id: 'span'}, subject.to_hash)
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_invalid
|
13
|
-
subject = Instana::SpanContext.new(nil, nil)
|
14
|
-
refute subject.valid?
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_flags_level_zero
|
18
|
-
subject = Instana::SpanContext.new('trace', 'span', 0, {external_state: 'cn=test'})
|
19
|
-
assert_equal '00-000000000000000000000000000trace-000000000000span-00', subject.trace_parent_header
|
20
|
-
assert_equal 'cn=test', subject.trace_state_header
|
21
|
-
end
|
22
|
-
end
|
data/test/tracing/span_test.rb
DELETED
@@ -1,179 +0,0 @@
|
|
1
|
-
# (c) Copyright IBM Corp. 2021
|
2
|
-
# (c) Copyright Instana Inc. 2021
|
3
|
-
|
4
|
-
require 'test_helper'
|
5
|
-
|
6
|
-
class SpanTest < Minitest::Test
|
7
|
-
def test_getters_setters
|
8
|
-
span = Instana::Span.new(:test)
|
9
|
-
|
10
|
-
assert_equal span[:s], span.id
|
11
|
-
assert_equal span[:t], span.trace_id
|
12
|
-
assert_nil span[:p] # parent_id of a root span is nil
|
13
|
-
assert_nil span[:d] # duration of an open span is nil
|
14
|
-
|
15
|
-
span.parent_id = 'test'
|
16
|
-
assert_equal 'test', span.parent_id
|
17
|
-
|
18
|
-
span.name = 'test'
|
19
|
-
assert_equal 'test', span[:data][:sdk][:name]
|
20
|
-
|
21
|
-
span[:t] = 'test'
|
22
|
-
assert span.key?(:t)
|
23
|
-
assert_equal 'test', span[:t]
|
24
|
-
|
25
|
-
assert span.inspect
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_builtin_span_rename
|
29
|
-
span = Instana::Span.new(:"net-http")
|
30
|
-
assert_equal :"net-http", span.name
|
31
|
-
|
32
|
-
span.name = 'test'
|
33
|
-
assert_equal 'test', span.name
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_exit_span
|
37
|
-
span = Instana::Span.new(:"net-http")
|
38
|
-
assert span.exit_span?
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_span_from_contetx
|
42
|
-
context = Instana::SpanContext.new('test', 'test', 0)
|
43
|
-
span = Instana::Span.new(:test, parent_ctx: context)
|
44
|
-
|
45
|
-
assert_equal 'test', span.parent_id
|
46
|
-
assert_equal 'test', span.trace_id
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_span_from_contetx_invalid
|
50
|
-
context = Instana::SpanContext.new(nil, nil, 1)
|
51
|
-
span = Instana::Span.new(:test, parent_ctx: context)
|
52
|
-
|
53
|
-
assert_nil span.parent_id
|
54
|
-
refute_equal context.span_id, span.trace_id
|
55
|
-
assert_equal 1, span.context.level
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_span_collect_backtraces
|
59
|
-
Instana.config[:collect_backtraces] = true
|
60
|
-
span = Instana::Span.new(:excon)
|
61
|
-
assert span[:stack]
|
62
|
-
ensure
|
63
|
-
Instana.config[:collect_backtraces] = false
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_span_backtrace_cleaner
|
67
|
-
Instana.config[:collect_backtraces] = true
|
68
|
-
Instana.config[:backtrace_cleaner] =
|
69
|
-
->(trace) { trace.filter { |line| line.include?("lib/instana") } }
|
70
|
-
span = Instana::Span.new(:excon)
|
71
|
-
|
72
|
-
assert_equal 1, span[:stack].size
|
73
|
-
ensure
|
74
|
-
Instana.config[:backtrace_cleaner] = nil
|
75
|
-
Instana.config[:collect_backtraces] = false
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_span_stack_over_limit
|
79
|
-
def inner(depth = 50, &blk) # rubocop:disable Lint/NestedMethodDefinition
|
80
|
-
return blk.call if depth.zero?
|
81
|
-
|
82
|
-
inner(depth - 1, &blk)
|
83
|
-
end
|
84
|
-
|
85
|
-
inner do
|
86
|
-
span = Instana::Span.new(:excon)
|
87
|
-
span.add_stack(limit: 500)
|
88
|
-
assert_equal 40, span[:stack].length
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_multiple_errors
|
93
|
-
span = Instana::Span.new(:activerecord)
|
94
|
-
span.set_tag(:activerecord, {})
|
95
|
-
|
96
|
-
span.add_error(StandardError.new('Test1'))
|
97
|
-
span.add_error(StandardError.new('Test2'))
|
98
|
-
|
99
|
-
assert_equal 2, span[:ec]
|
100
|
-
assert_equal 'Test2', span[:data][:activerecord][:error]
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_add_error_nil
|
104
|
-
span = Instana::Span.new(:activerecord)
|
105
|
-
span.add_error(nil)
|
106
|
-
|
107
|
-
assert_equal 1, span[:ec]
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_set_tag_merge
|
111
|
-
span = Instana::Span.new(:excon)
|
112
|
-
span.set_tag(1024, {a: 1})
|
113
|
-
span.set_tag(1024, {b: 2})
|
114
|
-
|
115
|
-
assert_equal({'1024' => {a: 1, b: 2}}, span[:data])
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_set_tags_non_hash
|
119
|
-
span = Instana::Span.new(:excon)
|
120
|
-
assert_nil span.set_tags(0)
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_tags_standard
|
124
|
-
span = Instana::Span.new(:excon)
|
125
|
-
span.set_tag(:test, {a: 1})
|
126
|
-
|
127
|
-
assert_equal({test: {a: 1}}, span.tags)
|
128
|
-
assert_equal({a: 1}, span.tags(:test))
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_log_standard
|
132
|
-
span = Instana::Span.new(:excon)
|
133
|
-
span.log(:test, Time.now, a: 1)
|
134
|
-
|
135
|
-
assert_equal({log: {a: 1}}, span.tags)
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_log_error
|
139
|
-
time = Minitest::Mock.new
|
140
|
-
time.expect(:to_f, nil)
|
141
|
-
|
142
|
-
span = Instana::Span.new(:sdk)
|
143
|
-
span.log(:test, time, a: 1)
|
144
|
-
|
145
|
-
assert_equal({}, span.tags)
|
146
|
-
time.verify
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_inc_processed_counts
|
150
|
-
clear_all!
|
151
|
-
|
152
|
-
span = Instana::Span.new(:excon)
|
153
|
-
span.close
|
154
|
-
|
155
|
-
metrics = Instana.processor.span_metrics
|
156
|
-
|
157
|
-
assert_equal 1, metrics[:opened]
|
158
|
-
assert_equal 1, metrics[:closed]
|
159
|
-
|
160
|
-
metrics = Instana.processor.span_metrics
|
161
|
-
|
162
|
-
assert_equal 0, metrics[:opened]
|
163
|
-
assert_equal 0, metrics[:closed]
|
164
|
-
end
|
165
|
-
|
166
|
-
def test_custom_service_name_set
|
167
|
-
service_name = 'MyVeryCustomRubyServiceNameForInstanaTesting'
|
168
|
-
ENV['INSTANA_SERVICE_NAME'] = service_name
|
169
|
-
span = Instana::Span.new(:excon)
|
170
|
-
assert_equal(service_name, span[:data][:service])
|
171
|
-
ensure
|
172
|
-
ENV.delete('INSTANA_SERVICE_NAME')
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_no_custom_service_name_set
|
176
|
-
span = Instana::Span.new(:excon)
|
177
|
-
assert_nil(span[:data][:service])
|
178
|
-
end
|
179
|
-
end
|