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,415 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- require 'test_helper'
5
- require 'rack/test'
6
-
7
- framework_version = Gem::Specification.find_by_name('rack').version
8
- if framework_version < Gem::Version.new('3.0.0')
9
- require 'rack/lobster'
10
- else
11
- require 'rackup/lobster'
12
- end
13
-
14
- class RackTest < Minitest::Test
15
- include Rack::Test::Methods
16
-
17
- class PathTemplateApp
18
- def call(env)
19
- env['INSTANA_HTTP_PATH_TEMPLATE'] = 'sample_template'
20
- [200, {}, ['Ok']]
21
- end
22
- end
23
-
24
- class ErrorApp
25
- def call(_env)
26
- raise 'An Error'
27
- end
28
- end
29
-
30
- class FiveZeroOneApp
31
- def call(_env)
32
- [501, {}, ['No']]
33
- end
34
- end
35
-
36
- class NoHeadersApp
37
- def call(_env)
38
- [501, nil, ['No']]
39
- end
40
- end
41
-
42
- def app
43
- framework_version = Gem::Specification.find_by_name('rack').version
44
- @app = Rack::Builder.new do
45
- use Rack::CommonLogger
46
- use Rack::ShowExceptions
47
- use Instana::Rack
48
- if framework_version < Gem::Version.new('3.0.0')
49
- map("/mrlobster") { run Rack::Lobster.new }
50
- else
51
- map("/mrlobster") { run Rackup::Lobster.new }
52
- end
53
- map("/path_tpl") { run PathTemplateApp.new }
54
- map("/error") { run ErrorApp.new }
55
- map("/five_zero_one") { run FiveZeroOneApp.new }
56
- end
57
- end
58
-
59
- def test_basic_get
60
- clear_all!
61
- ::Instana.config[:collect_backtraces] = true
62
-
63
- get '/mrlobster'
64
- assert last_response.ok?
65
-
66
- spans = ::Instana.processor.queued_spans
67
-
68
- # Span validation
69
- assert_equal 1, spans.count
70
-
71
- rack_span = spans.first
72
- assert_equal :rack, rack_span[:n]
73
-
74
- assert last_response.headers.key?("X-Instana-T")
75
- assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
76
- assert last_response.headers.key?("X-Instana-S")
77
- assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
78
- assert last_response.headers.key?("X-Instana-L")
79
- assert last_response.headers["X-Instana-L"] == '1'
80
- assert last_response.headers.key?("Server-Timing")
81
- assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
82
-
83
- # W3C Trace Context
84
- assert_equal "00-#{rack_span[:t].rjust(32, '0')}-#{rack_span[:s]}-01", last_response.headers["Traceparent"]
85
- assert_equal "in=#{rack_span[:t]};#{rack_span[:s]}", last_response.headers["Tracestate"]
86
-
87
- assert rack_span.key?(:data)
88
- assert rack_span[:data].key?(:http)
89
- assert_equal "GET", rack_span[:data][:http][:method]
90
- assert_equal "/mrlobster", rack_span[:data][:http][:url]
91
- assert_equal 200, rack_span[:data][:http][:status]
92
- assert_equal 'example.org', rack_span[:data][:http][:host]
93
- assert rack_span.key?(:f)
94
- assert !rack_span.key?(:stack)
95
-
96
- # Restore to default
97
- ::Instana.config[:collect_backtraces] = false
98
- end
99
-
100
- def test_basic_get_with_custom_service_name
101
- ENV['INSTANA_SERVICE_NAME'] = 'WalterBishop'
102
-
103
- clear_all!
104
- get '/mrlobster'
105
- assert last_response.ok?
106
-
107
- spans = ::Instana.processor.queued_spans
108
-
109
- # Span validation
110
- assert_equal 1, spans.count
111
-
112
- rack_span = spans.first
113
- assert_equal 'WalterBishop', rack_span[:data][:service]
114
-
115
- ENV.delete('INSTANA_SERVICE_NAME')
116
- end
117
-
118
- def test_basic_post
119
- clear_all!
120
- post '/mrlobster'
121
- assert last_response.ok?
122
-
123
- spans = ::Instana.processor.queued_spans
124
-
125
- # Span validation
126
- assert_equal 1, spans.count
127
- rack_span = spans.first
128
- assert_equal :rack, rack_span[:n]
129
-
130
- assert last_response.headers.key?("X-Instana-T")
131
- assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
132
- assert last_response.headers.key?("X-Instana-S")
133
- assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
134
- assert last_response.headers.key?("X-Instana-L")
135
- assert last_response.headers["X-Instana-L"] == '1'
136
- assert last_response.headers.key?("Server-Timing")
137
- assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
138
-
139
- assert rack_span.key?(:data)
140
- assert rack_span[:data].key?(:http)
141
- assert_equal "POST", rack_span[:data][:http][:method]
142
- assert_equal "/mrlobster", rack_span[:data][:http][:url]
143
- assert_equal 200, rack_span[:data][:http][:status]
144
- assert rack_span.key?(:f)
145
- end
146
-
147
- def test_basic_put
148
- clear_all!
149
- put '/mrlobster'
150
- assert last_response.ok?
151
-
152
- spans = ::Instana.processor.queued_spans
153
-
154
- # Span validation
155
- assert_equal 1, spans.count
156
- rack_span = spans.first
157
- assert_equal :rack, rack_span[:n]
158
-
159
- assert last_response.headers.key?("X-Instana-T")
160
- assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
161
- assert last_response.headers.key?("X-Instana-S")
162
- assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
163
- assert last_response.headers.key?("X-Instana-L")
164
- assert last_response.headers["X-Instana-L"] == '1'
165
- assert last_response.headers.key?("Server-Timing")
166
- assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
167
-
168
- assert rack_span.key?(:data)
169
- assert rack_span[:data].key?(:http)
170
- assert_equal "PUT", rack_span[:data][:http][:method]
171
- assert_equal "/mrlobster", rack_span[:data][:http][:url]
172
- assert_equal 200, rack_span[:data][:http][:status]
173
- assert rack_span.key?(:f)
174
- end
175
-
176
- def test_context_continuation
177
- clear_all!
178
- continuation_id = Instana::Util.generate_id
179
- header 'X-INSTANA-T', continuation_id
180
- header 'X-INSTANA-S', continuation_id
181
-
182
- get '/mrlobster'
183
- assert last_response.ok?
184
-
185
- spans = ::Instana.processor.queued_spans
186
-
187
- # Span validation
188
- assert_equal 1, spans.count
189
- rack_span = spans.first
190
- assert_equal :rack, rack_span[:n]
191
-
192
- assert last_response.headers.key?("X-Instana-T")
193
- assert last_response.headers["X-Instana-T"] == ::Instana::Util.id_to_header(rack_span[:t])
194
- assert last_response.headers.key?("X-Instana-S")
195
- assert last_response.headers["X-Instana-S"] == ::Instana::Util.id_to_header(rack_span[:s])
196
- assert last_response.headers.key?("X-Instana-L")
197
- assert last_response.headers["X-Instana-L"] == '1'
198
- assert last_response.headers.key?("Server-Timing")
199
- assert last_response.headers["Server-Timing"] == "intid;desc=#{::Instana::Util.id_to_header(rack_span[:t])}"
200
-
201
- assert rack_span.key?(:data)
202
- assert rack_span[:data].key?(:http)
203
- assert_equal "GET", rack_span[:data][:http][:method]
204
- assert_equal "/mrlobster", rack_span[:data][:http][:url]
205
- assert_equal 200, rack_span[:data][:http][:status]
206
- assert rack_span.key?(:f)
207
-
208
- # Context validation
209
- # The first span should have the passed in trace ID
210
- # and specify the passed in span ID as it's parent.
211
- assert_equal continuation_id, rack_span[:t]
212
- assert_equal continuation_id, rack_span[:p]
213
- end
214
-
215
- def test_correlation_information
216
- clear_all!
217
-
218
- header 'X-INSTANA-L', '1,correlationType=test;correlationId=abcdefh123'
219
-
220
- get '/mrlobster'
221
- assert last_response.ok?
222
-
223
- spans = ::Instana.processor.queued_spans
224
-
225
- # Span validation
226
- assert_equal 1, spans.count
227
- rack_span = spans.first
228
- assert_equal :rack, rack_span[:n]
229
-
230
- assert_equal 'abcdefh123', rack_span[:crid]
231
- assert_equal 'test', rack_span[:crtp]
232
- end
233
-
234
-
235
- def test_instana_response_headers
236
- clear_all!
237
- get '/mrlobster'
238
- assert last_response.ok?
239
-
240
- refute_nil last_response.headers.key?("X-Instana-T")
241
- refute_nil last_response.headers.key?("X-Instana-S")
242
- end
243
-
244
- def test_that_url_params_not_logged
245
- clear_all!
246
- get '/mrlobster?blah=2&wilma=1&betty=2;fred=3'
247
-
248
- spans = ::Instana.processor.queued_spans
249
- assert_equal 1, spans.length
250
-
251
- refute_nil spans.first.key?(:data)
252
- refute_nil spans.first[:data].key?(:http)
253
- refute_nil spans.first[:data][:http].key?(:url)
254
- assert_equal '/mrlobster', spans.first[:data][:http][:url]
255
-
256
- assert last_response.ok?
257
- end
258
-
259
- def test_custom_headers_capture
260
- clear_all!
261
- ::Instana.config[:collect_backtraces] = true
262
- ::Instana.agent.define_singleton_method(:extra_headers) { %w(X-Capture-This X-Capture-That) }
263
-
264
- get '/mrlobster', {}, { "HTTP_X_CAPTURE_THIS" => "ThereYouGo" }
265
- assert last_response.ok?
266
- assert_equal "ThereYouGo", last_request.env["HTTP_X_CAPTURE_THIS"]
267
-
268
- spans = ::Instana.processor.queued_spans
269
-
270
- # Span validation
271
- assert_equal 1, spans.count
272
- rack_span = spans.first
273
-
274
- assert rack_span[:data][:http].key?(:header)
275
- assert rack_span[:data][:http][:header].key?(:"X-Capture-This")
276
- assert !rack_span[:data][:http][:header].key?(:"X-Capture-That")
277
- assert_equal "ThereYouGo", rack_span[:data][:http][:header][:"X-Capture-This"]
278
- assert !rack_span.key?(:stack)
279
-
280
- # Restore to default
281
- ::Instana.config[:collect_backtraces] = false
282
- ::Instana.agent.singleton_class.send(:remove_method, :extra_headers)
283
- end
284
-
285
- def test_capture_http_path_template
286
- clear_all!
287
-
288
- get '/path_tpl'
289
- assert last_response.ok?
290
-
291
- spans = ::Instana.processor.queued_spans
292
- assert_equal 1, spans.length
293
-
294
- rack_span = spans.first
295
- assert_equal :rack, rack_span[:n]
296
- assert_equal 'sample_template', rack_span[:data][:http][:path_tpl]
297
- end
298
-
299
- def test_basic_get_with_x_instana_synthetic
300
- header 'X-INSTANA-SYNTHETIC', '1'
301
-
302
- clear_all!
303
- get '/mrlobster'
304
- assert last_response.ok?
305
-
306
- spans = ::Instana.processor.queued_spans
307
-
308
- # Span validation
309
- assert_equal 1, spans.count
310
-
311
- first_span = spans.first
312
- assert_equal true, first_span[:sy]
313
- end
314
-
315
- def test_basic_get_with_w3c_trace
316
- clear_all!
317
-
318
- header 'TRACEPARENT', '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
319
-
320
- get '/mrlobster'
321
- assert last_response.ok?
322
-
323
- spans = ::Instana.processor.queued_spans
324
- assert_equal 1, spans.count
325
-
326
- first_span = spans.first
327
- assert_equal :rack, first_span[:n]
328
- assert_equal 'a3ce929d0e0e4736', first_span[:t]
329
- assert_equal '00f067aa0ba902b7', first_span[:p]
330
- assert_equal '4bf92f3577b34da6a3ce929d0e0e4736', first_span[:lt]
331
- assert_nil first_span[:ia]
332
- assert first_span[:tp]
333
- end
334
-
335
- def test_basic_get_with_w3c_disabled
336
- clear_all!
337
- ::Instana.config[:w3c_trace_correlation] = false
338
-
339
- header 'TRACEPARENT', '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01'
340
-
341
- get '/mrlobster'
342
- assert last_response.ok?
343
-
344
- spans = ::Instana.processor.queued_spans
345
- assert_equal 1, spans.count
346
-
347
- first_span = spans.first
348
- assert_equal :rack, first_span[:n]
349
- refute first_span[:tp]
350
- ::Instana.config[:w3c_trace_correlation] = true
351
- end
352
-
353
- def test_skip_trace
354
- clear_all!
355
- header 'X_INSTANA_L', '0;junk'
356
-
357
- get '/mrlobster'
358
- assert last_response.ok?
359
-
360
- spans = ::Instana.processor.queued_spans
361
- assert_equal 0, spans.count
362
- end
363
-
364
- def test_disable_trace
365
- clear_all!
366
- ::Instana.config[:tracing][:enabled] = false
367
-
368
- get '/mrlobster'
369
- assert last_response.ok?
370
-
371
- spans = ::Instana.processor.queued_spans
372
- assert_equal 0, spans.count
373
- ::Instana.config[:tracing][:enabled] = true
374
- end
375
-
376
- def test_error_trace
377
- clear_all!
378
-
379
- get '/error'
380
- refute last_response.ok?
381
-
382
- spans = ::Instana.processor.queued_spans
383
- assert_equal 1, spans.count
384
-
385
- first_span = spans.first
386
- assert_equal :rack, first_span[:n]
387
- assert_equal 1, first_span[:ec]
388
- end
389
-
390
- def test_disable_trace_with_error
391
- clear_all!
392
- ::Instana.config[:tracing][:enabled] = false
393
-
394
- get '/error'
395
- refute last_response.ok?
396
-
397
- spans = ::Instana.processor.queued_spans
398
- assert_equal 0, spans.count
399
- ::Instana.config[:tracing][:enabled] = true
400
- end
401
-
402
- def test_five_zero_x_trace
403
- clear_all!
404
-
405
- get '/five_zero_one'
406
- refute last_response.ok?
407
-
408
- spans = ::Instana.processor.queued_spans
409
- assert_equal 1, spans.count
410
-
411
- first_span = spans.first
412
- assert_equal :rack, first_span[:n]
413
- assert_equal 1, first_span[:ec]
414
- end
415
- end
@@ -1,135 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- require 'rails'
7
- require 'action_cable'
8
-
9
- require 'ostruct'
10
- require 'logger'
11
-
12
- class RailsActionCableTest < Minitest::Test
13
- def setup
14
- skip unless defined?(::ActionCable::Connection::Base)
15
- end
16
-
17
- def test_transmit_no_parent
18
- clear_all!
19
-
20
- connection = mock_connection
21
- channel_klass = Class.new(ActionCable::Channel::Base)
22
-
23
- channel_klass
24
- .new(connection, :test)
25
- .send(:transmit, 'Sample message', via: nil)
26
-
27
- span, rest = Instana.processor.queued_spans
28
- data = span[:data]
29
-
30
- assert_nil rest
31
- assert_equal :"rpc-server", span[:n]
32
- assert_equal "rake_test_loader.rb", data[:service]
33
- assert_equal :actioncable, data[:rpc][:flavor]
34
- assert_equal channel_klass.to_s, data[:rpc][:call]
35
- assert_equal :transmit, data[:rpc][:call_type]
36
- assert_equal Socket.gethostname, data[:rpc][:host]
37
- end
38
-
39
- def test_transmit_parent
40
- clear_all!
41
-
42
- connection = mock_connection
43
- connection.instance_variable_set(
44
- :@instana_trace_context,
45
- Instana::SpanContext.new('ABC', 'ABC')
46
- )
47
- channel_klass = Class.new(ActionCable::Channel::Base)
48
-
49
- channel_klass
50
- .new(connection, :test)
51
- .send(:transmit, 'Sample message', via: 'Important')
52
-
53
- span, rest = Instana.processor.queued_spans
54
- data = span[:data]
55
-
56
- assert_nil rest
57
- assert_equal 'ABC', span[:t]
58
- assert_equal :"rpc-server", span[:n]
59
- assert_equal "rake_test_loader.rb", data[:service]
60
- assert_equal :actioncable, data[:rpc][:flavor]
61
- assert_equal channel_klass.to_s, data[:rpc][:call]
62
- assert_equal :transmit, data[:rpc][:call_type]
63
- assert_equal Socket.gethostname, data[:rpc][:host]
64
- end
65
-
66
- def test_action_no_parent
67
- clear_all!
68
-
69
- connection = mock_connection
70
- channel_klass = Class.new(ActionCable::Channel::Base) do
71
- def sample
72
- raise unless Instana.tracer.tracing?
73
- end
74
- end
75
-
76
- channel_klass
77
- .new(connection, :test)
78
- .perform_action('action' => 'sample')
79
-
80
- span, rest = Instana.processor.queued_spans
81
- data = span[:data]
82
-
83
- assert_nil rest
84
- assert_equal :"rpc-server", span[:n]
85
- assert_equal "rake_test_loader.rb", data[:service]
86
- assert_equal :actioncable, data[:rpc][:flavor]
87
- assert_equal "#{channel_klass}#sample", data[:rpc][:call]
88
- assert_equal :action, data[:rpc][:call_type]
89
- assert_equal Socket.gethostname, data[:rpc][:host]
90
- end
91
-
92
- def test_action_parent
93
- clear_all!
94
-
95
- connection = mock_connection
96
- connection.instance_variable_set(
97
- :@instana_trace_context,
98
- Instana::SpanContext.new('ABC', 'ABC')
99
- )
100
- channel_klass = Class.new(ActionCable::Channel::Base) do
101
- def sample
102
- raise unless Instana.tracer.tracing?
103
- end
104
- end
105
-
106
- channel_klass
107
- .new(connection, :test)
108
- .perform_action('action' => 'sample')
109
-
110
- span, rest = Instana.processor.queued_spans
111
- data = span[:data]
112
-
113
- assert_nil rest
114
- assert_equal 'ABC', span[:t]
115
- assert_equal :"rpc-server", span[:n]
116
- assert_equal "rake_test_loader.rb", data[:service]
117
- assert_equal :actioncable, data[:rpc][:flavor]
118
- assert_equal "#{channel_klass}#sample", data[:rpc][:call]
119
- assert_equal :action, data[:rpc][:call_type]
120
- assert_equal Socket.gethostname, data[:rpc][:host]
121
- end
122
-
123
- private
124
-
125
- def mock_connection
126
- server = OpenStruct.new(
127
- logger: Logger.new('/dev/null'),
128
- worker_pool: nil,
129
- config: OpenStruct.new(log_tags: [])
130
- )
131
- connection = ActionCable::Connection::Base.new(server, {})
132
- connection.define_singleton_method(:transmit) { |*_args, **_kwargs| true }
133
- connection
134
- end
135
- end