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.
Files changed (228) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/lib/instana/base.rb +4 -2
  4. data/lib/instana/instrumentation/action_cable.rb +8 -4
  5. data/lib/instana/instrumentation/action_controller.rb +2 -4
  6. data/lib/instana/instrumentation/action_mailer.rb +1 -1
  7. data/lib/instana/instrumentation/action_view.rb +4 -4
  8. data/lib/instana/instrumentation/active_job.rb +20 -5
  9. data/lib/instana/instrumentation/active_record.rb +1 -1
  10. data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +1 -1
  11. data/lib/instana/instrumentation/aws_sdk_lambda.rb +1 -1
  12. data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
  13. data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
  14. data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
  15. data/lib/instana/instrumentation/dalli.rb +1 -1
  16. data/lib/instana/instrumentation/excon.rb +2 -2
  17. data/lib/instana/instrumentation/graphql.rb +3 -3
  18. data/lib/instana/instrumentation/grpc.rb +14 -13
  19. data/lib/instana/instrumentation/mongo.rb +3 -3
  20. data/lib/instana/instrumentation/net-http.rb +5 -4
  21. data/lib/instana/instrumentation/rack.rb +36 -4
  22. data/lib/instana/instrumentation/redis.rb +1 -1
  23. data/lib/instana/instrumentation/resque.rb +10 -8
  24. data/lib/instana/instrumentation/rest-client.rb +4 -4
  25. data/lib/instana/instrumentation/sequel.rb +3 -3
  26. data/lib/instana/instrumentation/shoryuken.rb +4 -1
  27. data/lib/instana/instrumentation/sidekiq-client.rb +21 -19
  28. data/lib/instana/instrumentation/sidekiq-worker.rb +22 -21
  29. data/lib/instana/instrumented_logger.rb +1 -1
  30. data/lib/instana/samplers/result.rb +32 -0
  31. data/lib/instana/samplers/samplers.rb +76 -0
  32. data/lib/instana/serverless.rb +4 -2
  33. data/lib/instana/setup.rb +5 -5
  34. data/lib/instana/span_filtering/condition.rb +134 -0
  35. data/lib/instana/span_filtering/configuration.rb +262 -0
  36. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  37. data/lib/instana/span_filtering.rb +62 -0
  38. data/lib/instana/trace/export.rb +36 -0
  39. data/lib/instana/{tracing → trace}/processor.rb +19 -15
  40. data/lib/instana/trace/span.rb +534 -0
  41. data/lib/instana/{tracing → trace}/span_context.rb +17 -8
  42. data/lib/instana/trace/span_kind.rb +51 -0
  43. data/lib/instana/trace/span_limits.rb +63 -0
  44. data/lib/instana/{tracer.rb → trace/tracer.rb} +106 -54
  45. data/lib/instana/trace/tracer_provider.rb +198 -0
  46. data/lib/instana/trace.rb +74 -0
  47. data/lib/instana/util.rb +11 -0
  48. data/lib/instana/version.rb +1 -1
  49. metadata +89 -267
  50. data/.circleci/config.yml +0 -485
  51. data/.codeclimate.yml +0 -23
  52. data/.editorconfig +0 -10
  53. data/.fasterer.yml +0 -23
  54. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  55. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  56. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  57. data/.github/workflows/release-notification-on-slack.yml +0 -34
  58. data/.gitignore +0 -19
  59. data/.rubocop.yml +0 -34
  60. data/.rubocop_todo.yml +0 -1140
  61. data/.tekton/.currency/docs/report.md +0 -20
  62. data/.tekton/.currency/resources/requirements.txt +0 -4
  63. data/.tekton/.currency/resources/table.json +0 -100
  64. data/.tekton/.currency/scripts/generate_report.py +0 -136
  65. data/.tekton/README.md +0 -278
  66. data/.tekton/github-interceptor-secret.yaml +0 -8
  67. data/.tekton/github-pr-eventlistener.yaml +0 -104
  68. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  69. data/.tekton/github-set-status-task.yaml +0 -43
  70. data/.tekton/github-webhook-ingress.yaml +0 -20
  71. data/.tekton/pipeline.yaml +0 -571
  72. data/.tekton/pipelinerun.yaml +0 -21
  73. data/.tekton/ruby-tracer-prepuller.yaml +0 -87
  74. data/.tekton/run_unittests.sh +0 -87
  75. data/.tekton/scheduled-eventlistener.yaml +0 -108
  76. data/.tekton/task.yaml +0 -449
  77. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  78. data/Appraisals +0 -124
  79. data/CONTRIBUTING.md +0 -86
  80. data/Gemfile +0 -17
  81. data/LICENSE +0 -22
  82. data/MAINTAINERS.md +0 -3
  83. data/Rakefile +0 -49
  84. data/bin/announce_release_on_slack.py +0 -103
  85. data/docker-compose.yml +0 -20
  86. data/download.sh +0 -85
  87. data/examples/opentracing.rb +0 -35
  88. data/examples/tracing.rb +0 -84
  89. data/extras/license_header.rb +0 -44
  90. data/gemfiles/.bundle/config +0 -2
  91. data/gemfiles/aws_30.gemfile +0 -21
  92. data/gemfiles/aws_60.gemfile +0 -16
  93. data/gemfiles/cuba_30.gemfile +0 -16
  94. data/gemfiles/cuba_40.gemfile +0 -13
  95. data/gemfiles/dalli_20.gemfile +0 -15
  96. data/gemfiles/dalli_30.gemfile +0 -12
  97. data/gemfiles/dalli_32.gemfile +0 -12
  98. data/gemfiles/excon_0100.gemfile +0 -14
  99. data/gemfiles/excon_021.gemfile +0 -17
  100. data/gemfiles/excon_079.gemfile +0 -17
  101. data/gemfiles/excon_100.gemfile +0 -14
  102. data/gemfiles/graphql_10.gemfile +0 -16
  103. data/gemfiles/graphql_20.gemfile +0 -15
  104. data/gemfiles/grpc_10.gemfile +0 -15
  105. data/gemfiles/mongo_216.gemfile +0 -15
  106. data/gemfiles/mongo_219.gemfile +0 -12
  107. data/gemfiles/net_http_01.gemfile +0 -17
  108. data/gemfiles/rack_16.gemfile +0 -15
  109. data/gemfiles/rack_20.gemfile +0 -15
  110. data/gemfiles/rack_30.gemfile +0 -13
  111. data/gemfiles/rails_42.gemfile +0 -18
  112. data/gemfiles/rails_50.gemfile +0 -19
  113. data/gemfiles/rails_52.gemfile +0 -19
  114. data/gemfiles/rails_60.gemfile +0 -19
  115. data/gemfiles/rails_61.gemfile +0 -20
  116. data/gemfiles/rails_70.gemfile +0 -17
  117. data/gemfiles/rails_71.gemfile +0 -17
  118. data/gemfiles/rails_80.gemfile +0 -17
  119. data/gemfiles/redis_40.gemfile +0 -15
  120. data/gemfiles/redis_50.gemfile +0 -13
  121. data/gemfiles/redis_51.gemfile +0 -13
  122. data/gemfiles/resque_122.gemfile +0 -16
  123. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  124. data/gemfiles/resque_20.gemfile +0 -16
  125. data/gemfiles/rest_client_16.gemfile +0 -17
  126. data/gemfiles/rest_client_20.gemfile +0 -17
  127. data/gemfiles/roda_20.gemfile +0 -16
  128. data/gemfiles/roda_30.gemfile +0 -16
  129. data/gemfiles/rubocop_162.gemfile +0 -6
  130. data/gemfiles/sequel_56.gemfile +0 -16
  131. data/gemfiles/sequel_57.gemfile +0 -16
  132. data/gemfiles/sequel_58.gemfile +0 -16
  133. data/gemfiles/shoryuken_50.gemfile +0 -16
  134. data/gemfiles/shoryuken_60.gemfile +0 -13
  135. data/gemfiles/sidekiq_42.gemfile +0 -15
  136. data/gemfiles/sidekiq_50.gemfile +0 -15
  137. data/gemfiles/sidekiq_60.gemfile +0 -12
  138. data/gemfiles/sidekiq_65.gemfile +0 -12
  139. data/gemfiles/sidekiq_70.gemfile +0 -12
  140. data/gemfiles/sinatra_14.gemfile +0 -15
  141. data/gemfiles/sinatra_22.gemfile +0 -12
  142. data/gemfiles/sinatra_30.gemfile +0 -12
  143. data/gemfiles/sinatra_40.gemfile +0 -12
  144. data/instana.gemspec +0 -48
  145. data/lib/instana/open_tracing/carrier.rb +0 -7
  146. data/lib/instana/open_tracing/instana_tracer.rb +0 -99
  147. data/lib/instana/tracing/span.rb +0 -431
  148. data/lib/opentracing.rb +0 -32
  149. data/log/.keep +0 -0
  150. data/sonar-project.properties +0 -9
  151. data/test/activator_test.rb +0 -50
  152. data/test/backend/agent_test.rb +0 -80
  153. data/test/backend/gc_snapshot_test.rb +0 -11
  154. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  155. data/test/backend/host_agent_lookup_test.rb +0 -78
  156. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  157. data/test/backend/host_agent_test.rb +0 -89
  158. data/test/backend/process_info_test.rb +0 -83
  159. data/test/backend/request_client_test.rb +0 -39
  160. data/test/backend/serverless_agent_test.rb +0 -83
  161. data/test/benchmarks/bench_id_generation.rb +0 -15
  162. data/test/benchmarks/bench_opentracing.rb +0 -16
  163. data/test/config_test.rb +0 -34
  164. data/test/frameworks/cuba_test.rb +0 -61
  165. data/test/frameworks/roda_test.rb +0 -60
  166. data/test/frameworks/sinatra_test.rb +0 -71
  167. data/test/instana_test.rb +0 -37
  168. data/test/instrumentation/aws_test.rb +0 -241
  169. data/test/instrumentation/dalli_test.rb +0 -325
  170. data/test/instrumentation/excon_test.rb +0 -204
  171. data/test/instrumentation/graphql_test.rb +0 -289
  172. data/test/instrumentation/grpc_test.rb +0 -420
  173. data/test/instrumentation/mongo_test.rb +0 -68
  174. data/test/instrumentation/net_http_test.rb +0 -220
  175. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  176. data/test/instrumentation/rack_test.rb +0 -415
  177. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  178. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  179. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  180. data/test/instrumentation/rails_action_view_test.rb +0 -154
  181. data/test/instrumentation/rails_active_job_test.rb +0 -65
  182. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -45
  183. data/test/instrumentation/rails_active_record_test.rb +0 -115
  184. data/test/instrumentation/redis_test.rb +0 -152
  185. data/test/instrumentation/resque_test.rb +0 -188
  186. data/test/instrumentation/rest_client_test.rb +0 -107
  187. data/test/instrumentation/sequel_test.rb +0 -105
  188. data/test/instrumentation/shoryuken_test.rb +0 -47
  189. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  190. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  191. data/test/secrets_test.rb +0 -112
  192. data/test/serverless_test.rb +0 -369
  193. data/test/snapshot/deltable_test.rb +0 -17
  194. data/test/snapshot/docker_container_test.rb +0 -82
  195. data/test/snapshot/fargate_container_test.rb +0 -82
  196. data/test/snapshot/fargate_process_test.rb +0 -35
  197. data/test/snapshot/fargate_task_test.rb +0 -49
  198. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  199. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  200. data/test/snapshot/lambda_function_test.rb +0 -37
  201. data/test/snapshot/ruby_process_test.rb +0 -32
  202. data/test/support/apps/active_record/active_record.rb +0 -24
  203. data/test/support/apps/grpc/boot.rb +0 -23
  204. data/test/support/apps/grpc/grpc_server.rb +0 -84
  205. data/test/support/apps/http_endpoint/boot.rb +0 -28
  206. data/test/support/apps/rails/boot.rb +0 -219
  207. data/test/support/apps/rails/models/block.rb +0 -21
  208. data/test/support/apps/rails/models/block6.rb +0 -21
  209. data/test/support/apps/resque/boot.rb +0 -5
  210. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  211. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  212. data/test/support/apps/sidekiq/boot.rb +0 -25
  213. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  214. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  215. data/test/support/apps/sidekiq/worker.rb +0 -37
  216. data/test/support/helpers.rb +0 -85
  217. data/test/support/mock_timer.rb +0 -20
  218. data/test/test_helper.rb +0 -69
  219. data/test/tracing/custom_test.rb +0 -226
  220. data/test/tracing/id_management_test.rb +0 -80
  221. data/test/tracing/instrumented_logger_test.rb +0 -39
  222. data/test/tracing/opentracing_test.rb +0 -382
  223. data/test/tracing/processor_test.rb +0 -58
  224. data/test/tracing/span_context_test.rb +0 -22
  225. data/test/tracing/span_test.rb +0 -179
  226. data/test/tracing/tracer_async_test.rb +0 -230
  227. data/test/tracing/tracer_test.rb +0 -352
  228. 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
@@ -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