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,68 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class MongoTest < Minitest::Test
7
- def setup
8
- clear_all!
9
- end
10
-
11
- def teardown
12
- ::Instana.config[:allow_exit_as_root] = false
13
- end
14
-
15
- def test_mongo
16
- Instana.tracer.start_or_continue_trace(:'mongo-test') do
17
- client = Mongo::Client.new('mongodb://127.0.0.1:27017/instana')
18
- client[:people].delete_many({ name: /$S*/ })
19
- client[:people].insert_many([{ _id: 1, name: "Stan" }])
20
- end
21
-
22
- spans = ::Instana.processor.queued_spans
23
- delete_span, insert_span, = spans
24
-
25
- delete_data = delete_span[:data][:mongo]
26
- insert_data = insert_span[:data][:mongo]
27
-
28
- assert_equal delete_span[:n], :mongo
29
- assert_equal insert_span[:n], :mongo
30
-
31
- assert_equal delete_data[:namespace], "instana"
32
- assert_equal delete_data[:command], "delete"
33
- assert_equal delete_data[:peer], {hostname: "127.0.0.1", port: 27017}
34
- assert delete_data[:json].include?("delete")
35
-
36
- assert_equal insert_data[:namespace], "instana"
37
- assert_equal insert_data[:command], "insert"
38
- assert_equal insert_data[:peer], {hostname: "127.0.0.1", port: 27017}
39
- assert insert_data[:json].include?("insert")
40
- end
41
-
42
- def test_mongo_as_root_exit_span
43
- ::Instana.config[:allow_exit_as_root] = true
44
-
45
- client = Mongo::Client.new('mongodb://127.0.0.1:27017/instana')
46
- client[:people].delete_many({ name: /$S*/ })
47
- client[:people].insert_many([{ _id: 1, name: "Stan" }])
48
-
49
- spans = ::Instana.processor.queued_spans
50
- delete_span, insert_span, = spans
51
-
52
- delete_data = delete_span[:data][:mongo]
53
- insert_data = insert_span[:data][:mongo]
54
-
55
- assert_equal delete_span[:n], :mongo
56
- assert_equal insert_span[:n], :mongo
57
-
58
- assert_equal delete_data[:namespace], "instana"
59
- assert_equal delete_data[:command], "delete"
60
- assert_equal delete_data[:peer], {hostname: "127.0.0.1", port: 27017}
61
- assert delete_data[:json].include?("delete")
62
-
63
- assert_equal insert_data[:namespace], "instana"
64
- assert_equal insert_data[:command], "insert"
65
- assert_equal insert_data[:peer], {hostname: "127.0.0.1", port: 27017}
66
- assert insert_data[:json].include?("insert")
67
- end
68
- end
@@ -1,220 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- require 'test_helper'
5
- require 'support/apps/http_endpoint/boot'
6
-
7
- class NetHTTPTest < Minitest::Test
8
- def teardown
9
- ::Instana.config[:allow_exit_as_root] = false
10
- end
11
-
12
- def test_config_defaults
13
- assert ::Instana.config[:nethttp].is_a?(Hash)
14
- assert ::Instana.config[:nethttp].key?(:enabled)
15
- assert_equal true, ::Instana.config[:nethttp][:enabled]
16
- end
17
-
18
- def test_get_with_query
19
- clear_all!
20
- WebMock.allow_net_connect!
21
-
22
- Instana.tracer.start_or_continue_trace(:"net-http-test") do
23
- Net::HTTP.get(URI('http://127.0.0.1:6511/?query_value=true'))
24
- end
25
-
26
- spans = ::Instana.processor.queued_spans
27
- assert_equal 3, spans.length
28
-
29
- http_span = find_first_span_by_name(spans, :'net-http')
30
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
31
- assert_equal "query_value=true", http_span[:data][:http][:params]
32
-
33
- WebMock.disable_net_connect!
34
- end
35
-
36
- def test_get_without_query
37
- clear_all!
38
- WebMock.allow_net_connect!
39
-
40
- Instana.tracer.start_or_continue_trace(:"net-http-test") do
41
- Net::HTTP.get(URI('http://127.0.0.1:6511/'))
42
- end
43
-
44
- spans = ::Instana.processor.queued_spans
45
- assert_equal 3, spans.length
46
-
47
- http_span = find_first_span_by_name(spans, :'net-http')
48
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
49
- assert_equal "200", http_span[:data][:http][:status]
50
-
51
- WebMock.disable_net_connect!
52
- end
53
-
54
- def test_get_without_query_as_root_exit_span
55
- clear_all!
56
- ::Instana.config[:allow_exit_as_root] = true
57
- WebMock.allow_net_connect!
58
- Net::HTTP.get(URI('http://127.0.0.1:6511/'))
59
-
60
- spans = ::Instana.processor.queued_spans
61
- assert_equal 2, spans.length # 1 rack span from the endpoint is generated extra
62
-
63
- http_span = find_first_span_by_name(spans, :'net-http')
64
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
65
- assert_equal "200", http_span[:data][:http][:status]
66
-
67
- WebMock.disable_net_connect!
68
- end
69
-
70
- def test_block_request
71
- clear_all!
72
- WebMock.allow_net_connect!
73
- url = "http://127.0.0.1:6511/"
74
-
75
- uri = URI.parse(url)
76
- req = Net::HTTP::Get.new(uri)
77
-
78
- response = nil
79
- Instana.tracer.start_or_continue_trace('net-http-test') do
80
- Net::HTTP.start(req.uri.hostname, req.uri.port, :open_timeout => 1, :read_timeout => 1) do |http|
81
- response = http.request(req)
82
- end
83
- end
84
-
85
- spans = ::Instana.processor.queued_spans
86
- assert_equal 3, spans.length
87
-
88
- rs_span = find_first_span_by_name(spans, :rack)
89
- first_span = find_first_span_by_name(spans, :'net-http-test')
90
- second_span = find_first_span_by_name(spans, :'net-http')
91
-
92
- # Span name validation
93
- assert_equal :sdk, first_span[:n]
94
- assert_equal :'net-http', second_span[:n]
95
-
96
- # first_span is the parent of second_span
97
- assert_equal first_span[:s], second_span[:p]
98
-
99
- # data keys/values
100
- refute_nil second_span.key?(:data)
101
- refute_nil second_span[:data].key?(:http)
102
- assert_equal "http://127.0.0.1:6511/", second_span[:data][:http][:url]
103
- assert_equal "200", second_span[:data][:http][:status]
104
- assert !second_span.key?(:stack)
105
-
106
- # Rack server trace should have the same trace ID
107
- assert_equal rs_span[:t], first_span[:t]
108
- assert_equal first_span[:t], second_span[:t]
109
-
110
- # Rack server trace should have net-http has parent span
111
- assert_equal second_span[:s], rs_span[:p]
112
-
113
- WebMock.disable_net_connect!
114
- end
115
-
116
- def test_basic_post_without_uri
117
- clear_all!
118
- WebMock.allow_net_connect!
119
-
120
- response = nil
121
- Instana.tracer.start_or_continue_trace('net-http-test') do
122
- http = Net::HTTP.new("127.0.0.1", 6511)
123
- response = http.request(Net::HTTP::Post.new("/"))
124
- end
125
-
126
- spans = ::Instana.processor.queued_spans
127
- assert_equal 3, spans.length
128
-
129
- rack_span = find_first_span_by_name(spans, :rack)
130
- sdk_span = find_first_span_by_name(spans, :'net-http-test')
131
- http_span = find_first_span_by_name(spans, :'net-http')
132
-
133
- # Span name validation
134
- assert_equal :sdk, sdk_span[:n]
135
- assert_equal :'net-http', http_span[:n]
136
-
137
- # first_span is the parent of second_span
138
- assert_equal sdk_span[:s], http_span[:p]
139
-
140
- # data keys/values
141
- refute_nil http_span.key?(:data)
142
- refute_nil http_span[:data].key?(:http)
143
- assert_equal "http://127.0.0.1:6511/", http_span[:data][:http][:url]
144
- assert_equal "200", http_span[:data][:http][:status]
145
- assert !http_span.key?(:stack)
146
-
147
- # Rack server trace should have the same trace ID
148
- assert_equal rack_span[:t], sdk_span[:t]
149
- assert_equal sdk_span[:t], http_span[:t]
150
-
151
- # Rack server trace should have net-http has parent span
152
- assert_equal http_span[:s], rack_span[:p]
153
-
154
- WebMock.disable_net_connect!
155
- end
156
-
157
- def test_request_with_dns_error
158
- clear_all!
159
- WebMock.allow_net_connect!
160
-
161
- begin
162
- Instana.tracer.start_or_continue_trace('net-http-error-test') do
163
- http = Net::HTTP.new("asdfasdf.asdfsadf", 80)
164
- http.request(Net::HTTP::Get.new("/blah"))
165
- end
166
- rescue Exception
167
- nil
168
- end
169
-
170
- spans = ::Instana.processor.queued_spans
171
- assert_equal 1, spans.length
172
-
173
- first_span = spans.first
174
-
175
- assert_equal :sdk, first_span[:n]
176
- assert_equal :'net-http-error-test', first_span[:data][:sdk][:name]
177
- assert_equal true, first_span[:error]
178
- assert_equal 1, first_span[:ec]
179
- ts_key = first_span[:data][:sdk][:custom][:logs].keys.first
180
- assert first_span[:data][:sdk][:custom][:logs].key?(ts_key)
181
- assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:event)
182
- assert first_span[:data][:sdk][:custom][:logs][ts_key].key?(:parameters)
183
-
184
- WebMock.disable_net_connect!
185
- end
186
-
187
- def test_request_with_5xx_response
188
- clear_all!
189
- WebMock.allow_net_connect!
190
-
191
- response = nil
192
- Instana.tracer.start_or_continue_trace('net-http-error-test') do
193
- http = Net::HTTP.new("127.0.0.1", 6511)
194
- response = http.request(Net::HTTP::Get.new("/error"))
195
- end
196
-
197
- spans = ::Instana.processor.queued_spans
198
- assert_equal 3, spans.length
199
-
200
- rack_span = find_first_span_by_name(spans, :rack)
201
- sdk_span = find_first_span_by_name(spans, :'net-http-error-test')
202
- http_span = find_first_span_by_name(spans, :'net-http')
203
-
204
- assert_equal :sdk, sdk_span[:n]
205
- assert_equal :'net-http-error-test', sdk_span[:data][:sdk][:name]
206
- assert_nil sdk_span[:error]
207
- assert_nil sdk_span[:ec]
208
-
209
- refute_nil http_span.key?(:data)
210
- refute_nil http_span[:data].key?(:http)
211
- assert_equal "http://127.0.0.1:6511/error", http_span[:data][:http][:url]
212
- assert_equal "500", http_span[:data][:http][:status]
213
- assert_equal :'net-http', http_span[:n]
214
- assert !http_span.key?(:stack)
215
- assert_equal true, http_span[:error]
216
- assert_equal 1, http_span[:ec]
217
-
218
- WebMock.disable_net_connect!
219
- end
220
- end
@@ -1,211 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class RackInstrumentedRequestTest < Minitest::Test
7
- def test_suppression_via_x_instana_l
8
- req = Instana::InstrumentedRequest.new(
9
- 'HTTP_X_INSTANA_L' => '0'
10
- )
11
-
12
- assert req.skip_trace?
13
- end
14
-
15
- def test_suppression_via_x_instana_l_with_trailing_content
16
- req = Instana::InstrumentedRequest.new(
17
- 'HTTP_X_INSTANA_L' => '0;sample-data'
18
- )
19
-
20
- assert req.skip_trace?
21
- end
22
-
23
- def test_no_suppression_assume_level_1_as_default
24
- req = Instana::InstrumentedRequest.new({})
25
-
26
- assert !req.skip_trace?
27
- end
28
-
29
- def test_no_suppression_when_x_instana_l_is_provided_explicitly
30
- req = Instana::InstrumentedRequest.new(
31
- 'HTTP_X_INSTANA_L' => '1'
32
- )
33
-
34
- assert !req.skip_trace?
35
- end
36
-
37
- def test_skip_trace_without_header
38
- req = Instana::InstrumentedRequest.new({})
39
-
40
- refute req.skip_trace?
41
- end
42
-
43
- def test_incoming_context
44
- id = Instana::Util.generate_id
45
- req = Instana::InstrumentedRequest.new(
46
- 'HTTP_X_INSTANA_L' => '1',
47
- 'HTTP_X_INSTANA_T' => id,
48
- 'HTTP_X_INSTANA_S' => id
49
- )
50
-
51
- expected = {
52
- trace_id: id,
53
- span_id: id,
54
- from_w3c: false,
55
- level: '1'
56
- }
57
-
58
- assert_equal expected, req.incoming_context
59
- refute req.continuing_from_trace_parent?
60
- end
61
-
62
- def test_incoming_w3c_context
63
- req = Instana::InstrumentedRequest.new(
64
- 'HTTP_TRACEPARENT' => '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
65
- )
66
-
67
- expected = {
68
- external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
69
- external_state: nil,
70
- trace_id: 'a3ce929d0e0e4736',
71
- span_id: '00f067aa0ba902b7',
72
- from_w3c: true
73
- }
74
-
75
- assert_equal expected, req.incoming_context
76
- assert req.continuing_from_trace_parent?
77
- end
78
-
79
- def test_incoming_w3c_context_newer_version_additional_fields
80
- req = Instana::InstrumentedRequest.new(
81
- 'HTTP_TRACEPARENT' => 'fe-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-abcdefg'
82
- )
83
-
84
- expected = {
85
- external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
86
- external_state: nil,
87
- trace_id: 'a3ce929d0e0e4736',
88
- span_id: '00f067aa0ba902b7',
89
- from_w3c: true
90
- }
91
-
92
- assert_equal expected, req.incoming_context
93
- assert req.continuing_from_trace_parent?
94
- end
95
-
96
- def test_incoming_w3c_context_unknown_flags
97
- req = Instana::InstrumentedRequest.new(
98
- 'HTTP_TRACEPARENT' => '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-ff'
99
- )
100
-
101
- expected = {
102
- external_trace_id: '4bf92f3577b34da6a3ce929d0e0e4736',
103
- external_state: nil,
104
- trace_id: 'a3ce929d0e0e4736',
105
- span_id: '00f067aa0ba902b7',
106
- from_w3c: true
107
- }
108
-
109
- assert_equal expected, req.incoming_context
110
- assert req.continuing_from_trace_parent?
111
- end
112
-
113
- def test_incoming_w3c_context_invalid_version
114
- req = Instana::InstrumentedRequest.new(
115
- 'HTTP_TRACEPARENT' => 'ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
116
- )
117
-
118
- expected = {}
119
-
120
- assert_equal expected, req.incoming_context
121
- refute req.continuing_from_trace_parent?
122
- end
123
-
124
- def test_incoming_w3c_context_invalid_id
125
- req = Instana::InstrumentedRequest.new(
126
- 'HTTP_TRACEPARENT' => '00-00000000000000000000000000000000-0000000000000000-01'
127
- )
128
-
129
- expected = {}
130
-
131
- assert_equal expected, req.incoming_context
132
- refute req.continuing_from_trace_parent?
133
- end
134
-
135
- def test_incoming_invalid_w3c_context
136
- req = Instana::InstrumentedRequest.new(
137
- 'HTTP_TRACEPARENT' => '00-XXa3ce929d0e0e4736-00f67aa0ba902b7-01'
138
- )
139
-
140
- expected = {}
141
-
142
- assert_equal expected, req.incoming_context
143
- refute req.continuing_from_trace_parent?
144
- end
145
-
146
- def test_incoming_w3c_state
147
- req = Instana::InstrumentedRequest.new(
148
- 'HTTP_TRACESTATE' => 'a=12345,in=123;abe,c=[+]'
149
- )
150
-
151
- expected = {
152
- t: '123',
153
- p: 'abe'
154
- }
155
-
156
- assert_equal expected, req.instana_ancestor
157
- end
158
-
159
- def test_request_tags
160
- ::Instana.agent.define_singleton_method(:extra_headers) { %w[X-Capture-This] }
161
-
162
- req = Instana::InstrumentedRequest.new(
163
- 'HTTP_HOST' => 'example.com',
164
- 'REQUEST_METHOD' => 'GET',
165
- 'HTTP_X_CAPTURE_THIS' => 'that',
166
- 'PATH_INFO' => '/',
167
- 'QUERY_STRING' => 'test=true'
168
- )
169
-
170
- expected = {
171
- method: 'GET',
172
- url: '/',
173
- host: 'example.com',
174
- header: {
175
- "X-Capture-This": 'that'
176
- },
177
- params: 'test=true'
178
- }
179
-
180
- assert_equal expected, req.request_tags
181
- ::Instana.agent.singleton_class.send(:remove_method, :extra_headers)
182
- end
183
-
184
- def test_correlation_data_valid
185
- req = Instana::InstrumentedRequest.new(
186
- 'HTTP_X_INSTANA_L' => '1,correlationType=web ;correlationId=1234567890abcdef'
187
- )
188
- expected = {
189
- type: 'web',
190
- id: '1234567890abcdef'
191
- }
192
-
193
- assert_equal expected, req.correlation_data
194
- end
195
-
196
- def test_correlation_data_invalid
197
- req = Instana::InstrumentedRequest.new(
198
- 'HTTP_X_INSTANA_L' => '0;sample-data'
199
- )
200
-
201
- assert_equal({}, req.correlation_data)
202
- end
203
-
204
- def test_correlation_data_legacy
205
- req = Instana::InstrumentedRequest.new(
206
- 'HTTP_X_INSTANA_L' => '1'
207
- )
208
-
209
- assert_equal({}, req.correlation_data)
210
- end
211
- end