instana 2.0.0 → 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.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/setup.rb +1 -0
  3. data/lib/instana/span_filtering/condition.rb +134 -0
  4. data/lib/instana/span_filtering/configuration.rb +262 -0
  5. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  6. data/lib/instana/span_filtering.rb +62 -0
  7. data/lib/instana/trace/span.rb +5 -3
  8. data/lib/instana/version.rb +1 -1
  9. metadata +7 -258
  10. data/.circleci/config.yml +0 -361
  11. data/.codeclimate.yml +0 -23
  12. data/.editorconfig +0 -10
  13. data/.fasterer.yml +0 -23
  14. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  15. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  16. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  17. data/.github/workflows/release-notification-on-slack.yml +0 -34
  18. data/.gitignore +0 -19
  19. data/.rubocop.yml +0 -34
  20. data/.rubocop_todo.yml +0 -1140
  21. data/.tekton/.currency/docs/report.md +0 -20
  22. data/.tekton/.currency/resources/requirements.txt +0 -4
  23. data/.tekton/.currency/resources/table.json +0 -100
  24. data/.tekton/.currency/scripts/generate_report.py +0 -308
  25. data/.tekton/README.md +0 -278
  26. data/.tekton/github-interceptor-secret.yaml +0 -8
  27. data/.tekton/github-pr-eventlistener.yaml +0 -104
  28. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  29. data/.tekton/github-set-status-task.yaml +0 -43
  30. data/.tekton/github-webhook-ingress.yaml +0 -20
  31. data/.tekton/pipeline.yaml +0 -484
  32. data/.tekton/pipelinerun.yaml +0 -21
  33. data/.tekton/prepuller-restart-service-account.yaml +0 -31
  34. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
  35. data/.tekton/ruby-tracer-prepuller.yaml +0 -88
  36. data/.tekton/run_unittests.sh +0 -87
  37. data/.tekton/scheduled-eventlistener.yaml +0 -108
  38. data/.tekton/task.yaml +0 -453
  39. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  40. data/Appraisals +0 -124
  41. data/CONTRIBUTING.md +0 -86
  42. data/Gemfile +0 -22
  43. data/LICENSE +0 -22
  44. data/MAINTAINERS.md +0 -3
  45. data/Rakefile +0 -49
  46. data/bin/announce_release_on_slack.py +0 -103
  47. data/docker-compose.yml +0 -20
  48. data/download.sh +0 -85
  49. data/examples/otel.rb +0 -98
  50. data/examples/tracing.rb +0 -85
  51. data/extras/license_header.rb +0 -44
  52. data/gemfiles/.bundle/config +0 -2
  53. data/gemfiles/aws_30.gemfile +0 -21
  54. data/gemfiles/aws_60.gemfile +0 -16
  55. data/gemfiles/cuba_30.gemfile +0 -16
  56. data/gemfiles/cuba_40.gemfile +0 -13
  57. data/gemfiles/dalli_20.gemfile +0 -15
  58. data/gemfiles/dalli_30.gemfile +0 -12
  59. data/gemfiles/dalli_32.gemfile +0 -12
  60. data/gemfiles/excon_0100.gemfile +0 -14
  61. data/gemfiles/excon_021.gemfile +0 -17
  62. data/gemfiles/excon_079.gemfile +0 -17
  63. data/gemfiles/excon_100.gemfile +0 -14
  64. data/gemfiles/graphql_10.gemfile +0 -16
  65. data/gemfiles/graphql_20.gemfile +0 -15
  66. data/gemfiles/grpc_10.gemfile +0 -15
  67. data/gemfiles/mongo_216.gemfile +0 -15
  68. data/gemfiles/mongo_219.gemfile +0 -12
  69. data/gemfiles/net_http_01.gemfile +0 -17
  70. data/gemfiles/rack_16.gemfile +0 -15
  71. data/gemfiles/rack_20.gemfile +0 -15
  72. data/gemfiles/rack_30.gemfile +0 -13
  73. data/gemfiles/rails_42.gemfile +0 -18
  74. data/gemfiles/rails_50.gemfile +0 -19
  75. data/gemfiles/rails_52.gemfile +0 -19
  76. data/gemfiles/rails_60.gemfile +0 -19
  77. data/gemfiles/rails_61.gemfile +0 -21
  78. data/gemfiles/rails_70.gemfile +0 -18
  79. data/gemfiles/rails_71.gemfile +0 -17
  80. data/gemfiles/rails_80.gemfile +0 -17
  81. data/gemfiles/redis_40.gemfile +0 -15
  82. data/gemfiles/redis_50.gemfile +0 -13
  83. data/gemfiles/redis_51.gemfile +0 -13
  84. data/gemfiles/resque_122.gemfile +0 -16
  85. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  86. data/gemfiles/resque_20.gemfile +0 -16
  87. data/gemfiles/rest_client_16.gemfile +0 -17
  88. data/gemfiles/rest_client_20.gemfile +0 -17
  89. data/gemfiles/roda_20.gemfile +0 -16
  90. data/gemfiles/roda_30.gemfile +0 -16
  91. data/gemfiles/rubocop_162.gemfile +0 -6
  92. data/gemfiles/sequel_56.gemfile +0 -16
  93. data/gemfiles/sequel_57.gemfile +0 -16
  94. data/gemfiles/sequel_58.gemfile +0 -16
  95. data/gemfiles/shoryuken_50.gemfile +0 -16
  96. data/gemfiles/shoryuken_60.gemfile +0 -13
  97. data/gemfiles/sidekiq_42.gemfile +0 -15
  98. data/gemfiles/sidekiq_50.gemfile +0 -15
  99. data/gemfiles/sidekiq_60.gemfile +0 -12
  100. data/gemfiles/sidekiq_65.gemfile +0 -12
  101. data/gemfiles/sidekiq_70.gemfile +0 -12
  102. data/gemfiles/sinatra_14.gemfile +0 -15
  103. data/gemfiles/sinatra_22.gemfile +0 -12
  104. data/gemfiles/sinatra_30.gemfile +0 -12
  105. data/gemfiles/sinatra_40.gemfile +0 -12
  106. data/instana.gemspec +0 -53
  107. data/log/.keep +0 -0
  108. data/sonar-project.properties +0 -9
  109. data/test/activator_test.rb +0 -50
  110. data/test/backend/agent_test.rb +0 -80
  111. data/test/backend/gc_snapshot_test.rb +0 -11
  112. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  113. data/test/backend/host_agent_lookup_test.rb +0 -78
  114. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  115. data/test/backend/host_agent_test.rb +0 -89
  116. data/test/backend/process_info_test.rb +0 -83
  117. data/test/backend/request_client_test.rb +0 -39
  118. data/test/backend/serverless_agent_test.rb +0 -83
  119. data/test/benchmarks/bench_id_generation.rb +0 -15
  120. data/test/benchmarks/bench_opentracing.rb +0 -16
  121. data/test/config_test.rb +0 -34
  122. data/test/frameworks/cuba_test.rb +0 -61
  123. data/test/frameworks/roda_test.rb +0 -60
  124. data/test/frameworks/sinatra_test.rb +0 -71
  125. data/test/instana_test.rb +0 -37
  126. data/test/instrumentation/aws_test.rb +0 -241
  127. data/test/instrumentation/dalli_test.rb +0 -325
  128. data/test/instrumentation/excon_test.rb +0 -204
  129. data/test/instrumentation/graphql_test.rb +0 -289
  130. data/test/instrumentation/grpc_test.rb +0 -420
  131. data/test/instrumentation/mongo_test.rb +0 -68
  132. data/test/instrumentation/net_http_test.rb +0 -220
  133. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  134. data/test/instrumentation/rack_test.rb +0 -415
  135. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  136. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  137. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  138. data/test/instrumentation/rails_action_view_test.rb +0 -154
  139. data/test/instrumentation/rails_active_job_test.rb +0 -65
  140. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
  141. data/test/instrumentation/rails_active_record_test.rb +0 -116
  142. data/test/instrumentation/redis_test.rb +0 -152
  143. data/test/instrumentation/resque_test.rb +0 -188
  144. data/test/instrumentation/rest_client_test.rb +0 -106
  145. data/test/instrumentation/sequel_test.rb +0 -111
  146. data/test/instrumentation/shoryuken_test.rb +0 -47
  147. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  148. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  149. data/test/secrets_test.rb +0 -112
  150. data/test/serverless_test.rb +0 -369
  151. data/test/snapshot/deltable_test.rb +0 -17
  152. data/test/snapshot/docker_container_test.rb +0 -82
  153. data/test/snapshot/fargate_container_test.rb +0 -82
  154. data/test/snapshot/fargate_process_test.rb +0 -35
  155. data/test/snapshot/fargate_task_test.rb +0 -49
  156. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  157. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  158. data/test/snapshot/lambda_function_test.rb +0 -37
  159. data/test/snapshot/ruby_process_test.rb +0 -32
  160. data/test/support/apps/active_record/active_record.rb +0 -24
  161. data/test/support/apps/grpc/boot.rb +0 -23
  162. data/test/support/apps/grpc/grpc_server.rb +0 -84
  163. data/test/support/apps/http_endpoint/boot.rb +0 -28
  164. data/test/support/apps/rails/boot.rb +0 -219
  165. data/test/support/apps/rails/models/block.rb +0 -21
  166. data/test/support/apps/rails/models/block6.rb +0 -21
  167. data/test/support/apps/resque/boot.rb +0 -5
  168. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  169. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  170. data/test/support/apps/sidekiq/boot.rb +0 -25
  171. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  172. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  173. data/test/support/apps/sidekiq/worker.rb +0 -37
  174. data/test/support/helpers.rb +0 -85
  175. data/test/support/mock_timer.rb +0 -20
  176. data/test/test_helper.rb +0 -69
  177. data/test/trace/custom_test.rb +0 -233
  178. data/test/trace/id_management_test.rb +0 -78
  179. data/test/trace/instrumented_logger_test.rb +0 -39
  180. data/test/trace/processor_test.rb +0 -58
  181. data/test/trace/span_context_test.rb +0 -22
  182. data/test/trace/span_test.rb +0 -179
  183. data/test/trace/tracer_async_test.rb +0 -243
  184. data/test/trace/tracer_provider_test.rb +0 -148
  185. data/test/trace/tracer_test.rb +0 -363
  186. data/test/util_test.rb +0 -10
@@ -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(trace_id: 'test', span_id: 'test', level: 0)
43
- span = Instana::Span.new(:test, 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(trace_id: nil, span_id: nil, level: 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.record_exception(StandardError.new('Test1'))
97
- span.record_exception(StandardError.new('Test2'))
98
-
99
- assert_equal 2, span[:ec]
100
- assert_equal 'Test2', span[:data][:activerecord][:error]
101
- end
102
-
103
- def test_record_exception_nil
104
- span = Instana::Span.new(:activerecord)
105
- span.record_exception(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
@@ -1,243 +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.start_span(:rack, attributes: {: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
- span = ::Instana.tracer.start_span(:rack, attributes: {: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
- span1 = ::Instana::Trace.with_span(OpenTelemetry::Trace.non_recording_span(t_context)) do
65
- ::Instana.tracer.start_span(:async_thread, attributes: { :async_start => 1 })
66
- end
67
- span2 = ::Instana::Trace.with_span(span1) do
68
- ::Instana.tracer.start_span(:sleepy_time, attributes: { :tired => 1 })
69
- end
70
-
71
- # Sleep beyond the end of this root trace
72
- sleep 0.5
73
- span2.set_tags({ :wake_up => 1})
74
- span2.finish
75
- span1.set_tags({:async_end => 1})
76
- span1.finish
77
- end
78
- # Current span should still be rack
79
- assert_equal :rack, ::Instana.tracer.current_span.name
80
- span.set_tags({:rack_end_kv => 1})
81
- span.finish
82
- # End tracing
83
- # ::Instana.tracer.log_end(:rack, {:rack_end_kv => 1})
84
-
85
- assert_equal false, ::Instana.tracer.tracing?
86
-
87
- # Sleep for 1 seconds to wait for the async thread to finish
88
- sleep 1
89
-
90
- spans = ::Instana.processor.queued_spans
91
- assert_equal 3, spans.length
92
-
93
- rack_span = find_first_span_by_name(spans, :rack)
94
- async_span1 = find_first_span_by_name(spans, :async_thread)
95
- async_span2 = find_first_span_by_name(spans, :sleepy_time)
96
-
97
- # Validate the first original thread span
98
- assert_equal :rack, rack_span[:n]
99
- assert rack_span[:d]
100
- assert_equal 1, rack_span[:data][:rack_start_kv]
101
- assert_equal 1, rack_span[:data][:rack_end_kv]
102
-
103
- # first span in second trace
104
- assert_equal :sdk, async_span1[:n]
105
- assert_equal :async_thread, async_span1[:data][:sdk][:name]
106
- assert async_span1[:d]
107
- assert_equal 1, async_span1[:data][:sdk][:custom][:tags][:async_start]
108
- assert_equal 1, async_span1[:data][:sdk][:custom][:tags][:async_end]
109
-
110
- # second span in second trace
111
- assert_equal :sdk, async_span2[:n]
112
- assert_equal :sleepy_time, async_span2[:data][:sdk][:name]
113
- assert async_span2[:d]
114
- assert_equal 1, async_span2[:data][:sdk][:custom][:tags][:tired]
115
- assert_equal 1, async_span2[:data][:sdk][:custom][:tags][:wake_up]
116
- # Validate linkage
117
- # All spans have the same trace ID
118
- assert rack_span[:t] == async_span1[:t] && async_span1[:t] == async_span2[:t]
119
-
120
- assert_equal async_span2[:p], async_span1[:s]
121
- assert_equal async_span1[:p], rack_span[:s]
122
-
123
- assert rack_span[:t] == rack_span[:s]
124
- assert async_span1[:t] != async_span1[:s]
125
- assert async_span2[:t] != async_span2[:s]
126
- end
127
-
128
- def test_out_of_order_async_tracing
129
- clear_all!
130
-
131
- # Start tracing
132
- span = ::Instana.tracer.start_span(:rack, attributes: {:rack_start_kv => 1})
133
-
134
- # Start three asynchronous spans
135
- span1, span2, span3 = ::Instana::Trace.with_span(span) do
136
- span1 = ::Instana.tracer.start_span(:my_async_op1, attributes: { :entry_kv => 1})
137
- span2 = ::Instana.tracer.start_span(:my_async_op2, attributes: { :entry_kv => 2})
138
- span3 = ::Instana.tracer.start_span(:my_async_op3, attributes: { :entry_kv => 3})
139
- return span1, span2, span3
140
- end
141
-
142
- # Context awareness when using Opentelemetry is done through Opentelemetry::Context so the below test is invalid
143
- # Current span should still be rack
144
- # assert_equal :rack, ::Instana.tracer.current_span.name
145
-
146
- # Log info to the async spans (out of order)
147
- span2.set_tags({ :info_kv => 2 })
148
- span1.set_tags({ :info_kv => 1 })
149
- span3.set_tags({ :info_kv => 3 })
150
-
151
- # Log out of order errors to the async spans
152
- span3.record_exception(Exception.new("Async span 3"))
153
- span2.record_exception(Exception.new("Async span 3"))
154
-
155
- # End two out of order asynchronous spans
156
- span3.set_tags({ :exit_kv => 3 })
157
- span3.close
158
- span2.set_tags({ :exit_kv => 2 })
159
- span2.close
160
-
161
- # Context awareness when using Opentelemetry is done through Opentelemetry::Context so the below test is invalid
162
- # Current span should still be rack
163
- # assert_equal :rack, ::Instana.tracer.current_span.name
164
-
165
- # End tracing
166
- span.set_tags({:rack_end_kv => 1})
167
- span.finish
168
-
169
- # Log an error to and close out the remaining async span after the parent trace has finished
170
- span1.record_exception(Exception.new("Async span 1"))
171
- span1.set_tags({ :exit_kv => 1 })
172
- span1.close
173
-
174
- spans = ::Instana.processor.queued_spans
175
- assert_equal 4, spans.length
176
-
177
- first_span = find_first_span_by_name(spans, :rack)
178
- second_span = find_first_span_by_name(spans, :my_async_op1)
179
- third_span = find_first_span_by_name(spans, :my_async_op2)
180
- fourth_span = find_first_span_by_name(spans, :my_async_op3)
181
-
182
- # Assure all spans have completed
183
- assert first_span.key?(:d)
184
- assert second_span.key?(:d)
185
- assert third_span.key?(:d)
186
- assert fourth_span.key?(:d)
187
-
188
- # Linkage
189
- assert_equal first_span[:s], second_span[:p]
190
- assert_equal first_span[:s], third_span[:p]
191
- assert_equal first_span[:s], fourth_span[:p]
192
-
193
- # same trace id
194
- assert_equal first_span[:t], second_span[:t]
195
- assert_equal first_span[:t], third_span[:t]
196
- assert_equal first_span[:t], fourth_span[:t]
197
-
198
- assert first_span[:n] != :sdk
199
- assert second_span[:n] == :sdk
200
- assert third_span[:n] == :sdk
201
- assert fourth_span[:n] == :sdk
202
-
203
- # KV checks
204
- assert_equal 1, first_span[:data][:rack_start_kv]
205
- assert_equal 1, first_span[:data][:rack_end_kv]
206
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:entry_kv]
207
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:exit_kv]
208
- assert_equal 2, third_span[:data][:sdk][:custom][:tags][:entry_kv]
209
- assert_equal 2, third_span[:data][:sdk][:custom][:tags][:exit_kv]
210
- assert_equal 3, fourth_span[:data][:sdk][:custom][:tags][:entry_kv]
211
- assert_equal 3, fourth_span[:data][:sdk][:custom][:tags][:exit_kv]
212
- end
213
-
214
- def test_async_helpers
215
- clear_all!
216
- ::Instana.tracer.start_span(:rack)
217
-
218
- span1 = ::Instana.tracer.start_span(:async, attributes: {})
219
- span1.set_tags({a: 1})
220
- span1.record_exception(StandardError.new('Error'))
221
- span1.finish
222
-
223
- spans = ::Instana.processor.queued_spans
224
- span, = spans
225
-
226
- assert_equal({a: 1}, span[:data][:sdk][:custom][:tags])
227
- assert_equal(1, span[:ec])
228
- end
229
-
230
- def test_async_helpers_tag_exit
231
- clear_all!
232
- ::Instana.tracer.start_span(:rack)
233
-
234
- span1 = ::Instana.tracer.start_span(:async, attributes: {})
235
- span1.set_tags({a: 1})
236
- span1.finish
237
-
238
- spans = ::Instana.processor.queued_spans
239
- span, = spans
240
-
241
- assert_equal({a: 1}, span[:data][:sdk][:custom][:tags])
242
- end
243
- end
@@ -1,148 +0,0 @@
1
- # (c) Copyright IBM Corp. 2025
2
- # (c) Copyright Instana Inc. 2025
3
-
4
- require 'test_helper'
5
- require 'instana/trace/tracer_provider'
6
- require 'instana/trace/export'
7
-
8
- class TracerProviderTest < Minitest::Test
9
- def setup
10
- @tracer_provider = Instana.tracer_provider
11
- end
12
-
13
- def test_tracer
14
- # This tests the global tracer is the same as tracer from tracer_provider
15
- assert_equal Instana.tracer, @tracer_provider.tracer("instana_tracer")
16
- end
17
-
18
- def test_shutdown_with_timeout
19
- @tracer_provider = ::Instana::Trace::TracerProvider.new
20
- @tracer_provider.add_span_processor(DummyProcessor.new)
21
- timeout = 10
22
- result = @tracer_provider.shutdown(timeout: timeout)
23
- assert_equal Instana::Trace::Export::SUCCESS, result
24
- @span_processors = @tracer_provider.instance_variable_get(:@span_processors)
25
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
26
- assert_equal [Instana::Trace::Export::SUCCESS], @tracer_provider.instance_variable_get(:@span_processors).map(&:shutdown)
27
- assert @tracer_provider.instance_variable_get(:@stopped)
28
- end
29
-
30
- def test_shutdown_without_timeout
31
- @tracer_provider = ::Instana::Trace::TracerProvider.new
32
- @tracer_provider.add_span_processor(DummyProcessor.new)
33
- # @tracer = @tracer_provider.tracer('test_shutdown_without_timeout')
34
- result = @tracer_provider.shutdown
35
- assert_equal Instana::Trace::Export::SUCCESS, result
36
-
37
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
38
- assert_equal [Instana::Trace::Export::SUCCESS], @tracer_provider.instance_variable_get(:@span_processors).map(&:shutdown)
39
- assert @tracer_provider.instance_variable_get(:@stopped)
40
- end
41
-
42
- def test_shutdown_called_multiple_times
43
- @tracer_provider = ::Instana::Trace::TracerProvider.new
44
- @tracer_provider.add_span_processor(DummyProcessor.new)
45
- # @tracer = @tracer_provider.tracer('test_shutdown_called_multiple_times')
46
-
47
- result1 = @tracer_provider.shutdown
48
- result2 = @tracer_provider.shutdown
49
-
50
- assert_equal Instana::Trace::Export::SUCCESS, result1
51
- assert_equal Instana::Trace::Export::FAILURE, result2
52
-
53
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
54
- assert_equal [Instana::Trace::Export::SUCCESS], @tracer_provider.instance_variable_get(:@span_processors).map(&:shutdown)
55
- assert @tracer_provider.instance_variable_get(:@stopped)
56
- end
57
-
58
- def test_shutdown_with_zero_timeout
59
- @tracer_provider = ::Instana::Trace::TracerProvider.new
60
- @tracer_provider.add_span_processor(DummyProcessor.new)
61
- # @tracer = @tracer_provider.tracer('test_shutdown_with_zero_timeout')
62
- timeout = 0
63
- result = @tracer_provider.shutdown(timeout: timeout)
64
- assert_equal Instana::Trace::Export::TIMEOUT, result
65
-
66
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
67
- assert_equal [Instana::Trace::Export::SUCCESS], @tracer_provider.instance_variable_get(:@span_processors).map(&:shutdown)
68
- assert @tracer_provider.instance_variable_get(:@stopped)
69
- end
70
-
71
- def test_force_flush_with_timeout
72
- @tracer_provider = ::Instana::Trace::TracerProvider.new
73
- @tracer_provider.add_span_processor(DummyProcessor.new)
74
- timeout = 10
75
- result = @tracer_provider.force_flush(timeout: timeout)
76
- assert_equal Instana::Trace::Export::SUCCESS, result
77
- @span_processors = @tracer_provider.instance_variable_get(:@span_processors)
78
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
79
- assert_equal [Instana::Trace::Export::SUCCESS], @tracer_provider.instance_variable_get(:@span_processors).map(&:shutdown)
80
- end
81
-
82
- def test_force_flush_without_timeout
83
- @tracer_provider = ::Instana::Trace::TracerProvider.new
84
- @tracer_provider.add_span_processor(DummyProcessor.new)
85
- result = @tracer_provider.force_flush
86
- assert_equal Instana::Trace::Export::SUCCESS, result
87
-
88
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
89
- assert_equal [Instana::Trace::Export::SUCCESS], @tracer_provider.instance_variable_get(:@span_processors).map(&:shutdown)
90
- end
91
-
92
- def test_force_flush_with_zero_timeout
93
- @tracer_provider = ::Instana::Trace::TracerProvider.new
94
- @tracer_provider.add_span_processor(DummyProcessor.new)
95
- timeout = 0
96
- result = @tracer_provider.force_flush(timeout: timeout)
97
- assert_equal Instana::Trace::Export::TIMEOUT, result
98
-
99
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
100
- assert_equal [Instana::Trace::Export::SUCCESS], @tracer_provider.instance_variable_get(:@span_processors).map(&:shutdown)
101
- end
102
-
103
- def test_add_span_processor_after_shutdown
104
- @tracer_provider = ::Instana::Trace::TracerProvider.new
105
- @tracer_provider.add_span_processor(DummyProcessor.new)
106
- @tracer_provider.shutdown
107
- result = @tracer_provider.add_span_processor(DummyProcessor.new)
108
- assert_nil result
109
- # No new span processor was added as tracer_provider is stopped
110
- assert_equal 1, @tracer_provider.instance_variable_get(:@span_processors).length
111
- end
112
-
113
- def test_internal_start_span_untraced
114
- @tracer_provider = ::Instana::Trace::TracerProvider.new
115
- Minitest::Mock.new
116
- result = @tracer_provider.internal_start_span('test_span', 'kind', {}, [], Time.now, nil, @instrumentation_scope)
117
- assert_instance_of(Instana::Span, result)
118
- # Todo add proper testcase
119
- end
120
-
121
- def test_internal_start_span_traced
122
- @tracer_provider = ::Instana::Trace::TracerProvider.new
123
- Minitest::Mock.new
124
- result = @tracer_provider.internal_start_span('test_span', 'kind', {}, [], Time.now, nil, @instrumentation_scope)
125
- assert_instance_of(Instana::Span, result)
126
- # Todo add proper testcase
127
- end
128
-
129
- def test_internal_start_span_stopped
130
- @tracer_provider = ::Instana::Trace::TracerProvider.new
131
- Minitest::Mock.new
132
- result = @tracer_provider.internal_start_span('test_span', 'kind', {}, [], Time.now, nil, @instrumentation_scope)
133
- assert_instance_of(Instana::Span, result)
134
- # Todo add proper testcase
135
- end
136
- end
137
-
138
- class DummyProcessor
139
- def initialize; end
140
-
141
- def shutdown(timeout: nil) # rubocop:disable Lint/UnusedMethodArgument
142
- Instana::Trace::Export::SUCCESS
143
- end
144
-
145
- def force_flush(timeout: nil) # rubocop:disable Lint/UnusedMethodArgument
146
- Instana::Trace::Export::SUCCESS
147
- end
148
- end