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,169 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require 'test_helper'
5
- require 'support/apps/sidekiq/boot'
6
-
7
- class SidekiqClientTest < Minitest::Test
8
- def setup
9
- ::Sidekiq::Queue.new('some_random_queue').clear
10
- end
11
-
12
- def teardown
13
- ::Instana.config[:allow_exit_as_root] = false
14
- end
15
-
16
- def test_config_defaults
17
- assert ::Instana.config[:'sidekiq-client'].is_a?(Hash)
18
- assert ::Instana.config[:'sidekiq-client'].key?(:enabled)
19
- assert_equal true, ::Instana.config[:'sidekiq-client'][:enabled]
20
- end
21
-
22
- def test_enqueue
23
- clear_all!
24
- Instana.tracer.start_or_continue_trace(:sidekiqtests) do
25
- disable_redis_instrumentation
26
- ::Sidekiq::Client.push(
27
- 'queue' => 'some_random_queue',
28
- 'class' => ::SidekiqJobOne,
29
- 'args' => [1, 2, 3],
30
- 'retry' => false
31
- )
32
- enable_redis_instrumentation
33
- end
34
-
35
- queue = ::Sidekiq::Queue.new('some_random_queue')
36
- job = queue.first
37
-
38
- assert_job_enqueued(job)
39
- assert_normal_trace_recorded(job)
40
- end
41
-
42
- def test_enqueue_as_root_exit_span
43
- clear_all!
44
- ::Instana.config[:allow_exit_as_root] = true
45
- disable_redis_instrumentation
46
- ::Sidekiq::Client.push(
47
- 'queue' => 'some_random_queue',
48
- 'class' => ::SidekiqJobOne,
49
- 'args' => [1, 2, 3],
50
- 'retry' => false
51
- )
52
- ::Instana.config[:allow_exit_as_root] = false
53
- enable_redis_instrumentation
54
-
55
- queue = ::Sidekiq::Queue.new('some_random_queue')
56
- job = queue.first
57
-
58
- assert_job_enqueued(job)
59
- spans = ::Instana.processor.queued_spans
60
- assert_equal 1, spans.length
61
-
62
- first_span = spans[0]
63
-
64
- assert_equal :'sidekiq-client', first_span[:n]
65
- assert_equal 'some_random_queue', first_span[:data][:'sidekiq-client'][:queue]
66
- assert_equal 'SidekiqJobOne', first_span[:data][:'sidekiq-client'][:job]
67
- assert_equal "false", first_span[:data][:'sidekiq-client'][:retry]
68
- assert first_span[:data][:'sidekiq-client'][:'redis-url']
69
- assert_equal job['jid'], first_span[:data][:'sidekiq-client'][:job_id]
70
- end
71
-
72
- def test_enqueue_failure
73
- clear_all!
74
-
75
- Instana.tracer.start_or_continue_trace(:sidekiqtests) do
76
- disable_redis_instrumentation
77
- add_sidekiq_exception_middleware
78
- begin
79
- ::Sidekiq::Client.push(
80
- 'queue' => 'some_random_queue',
81
- 'class' => ::SidekiqJobTwo,
82
- 'args' => [1, 2, 3],
83
- 'retry' => false
84
- )
85
- rescue; end
86
- enable_redis_instrumentation
87
- remove_sidekiq_exception_middleware
88
- end
89
-
90
- queue = ::Sidekiq::Queue.new('some_random_queue')
91
- assert_equal 0, queue.size
92
-
93
- assert_failure_trace_recorded
94
- end
95
-
96
- private
97
-
98
- def assert_job_enqueued(job)
99
- job_message = JSON.parse(job.value)
100
-
101
- assert_equal 'some_random_queue', job_message['queue']
102
- assert_equal 'SidekiqJobOne', job_message['class']
103
- assert_equal [1, 2, 3], job_message['args']
104
- assert_equal false, job_message['retry']
105
- refute_nil job_message['X-Instana-T']
106
- refute_nil job_message['X-Instana-S']
107
- end
108
-
109
- def assert_normal_trace_recorded(job)
110
- spans = ::Instana.processor.queued_spans
111
- assert_equal 2, spans.length
112
-
113
- first_span = spans[1]
114
- second_span = spans[0]
115
-
116
- assert_equal first_span[:s], second_span[:p]
117
- validate_sdk_span(first_span, {:name => :sidekiqtests, :type => :entry})
118
-
119
- assert_equal :'sidekiq-client', second_span[:n]
120
- assert_equal 'some_random_queue', second_span[:data][:'sidekiq-client'][:queue]
121
- assert_equal 'SidekiqJobOne', second_span[:data][:'sidekiq-client'][:job]
122
- assert_equal "false", second_span[:data][:'sidekiq-client'][:retry]
123
- assert second_span[:data][:'sidekiq-client'][:'redis-url']
124
- assert_equal job['jid'], second_span[:data][:'sidekiq-client'][:job_id]
125
- end
126
-
127
- def assert_failure_trace_recorded
128
- spans = ::Instana.processor.queued_spans
129
- assert_equal 2, spans.length
130
-
131
- first_span = spans[1]
132
- second_span = spans[0]
133
-
134
- assert_equal first_span[:s], second_span[:p]
135
- validate_sdk_span(first_span, {:name => :sidekiqtests, :type => :entry})
136
-
137
- assert_equal :'sidekiq-client', second_span[:n]
138
- assert_equal true, second_span[:error]
139
- refute_nil second_span[:stack]
140
-
141
- assert_equal 'some_random_queue', second_span[:data][:'sidekiq-client'][:queue]
142
- assert_equal 'SidekiqJobTwo', second_span[:data][:'sidekiq-client'][:job]
143
- assert_equal "false", second_span[:data][:'sidekiq-client'][:retry]
144
- assert second_span[:data][:'sidekiq-client'][:'redis-url']
145
- assert_equal 'Fail to enqueue job', second_span[:data][:log][:message]
146
- end
147
-
148
- SidekiqMiddlewareException = Class.new do
149
- def call(*_args)
150
- raise 'Fail to enqueue job'
151
- end
152
- end
153
-
154
- def add_sidekiq_exception_middleware
155
- Sidekiq.configure_client do |config|
156
- config.client_middleware do |chain|
157
- chain.add SidekiqMiddlewareException
158
- end
159
- end
160
- end
161
-
162
- def remove_sidekiq_exception_middleware
163
- Sidekiq.configure_client do |config|
164
- config.client_middleware do |chain|
165
- chain.remove SidekiqMiddlewareException
166
- end
167
- end
168
- end
169
- end
@@ -1,180 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require 'test_helper'
5
- require 'support/apps/sidekiq/boot'
6
-
7
- class SidekiqServerTest < Minitest::Test
8
- def test_config_defaults
9
- assert ::Instana.config[:'sidekiq-worker'].is_a?(Hash)
10
- assert ::Instana.config[:'sidekiq-worker'].key?(:enabled)
11
- assert_equal true, ::Instana.config[:'sidekiq-worker'][:enabled]
12
- end
13
-
14
- def test_successful_worker_starts_new_trace
15
- clear_all!
16
- $sidekiq_mode = :server
17
- inject_instrumentation
18
-
19
- disable_redis_instrumentation
20
- ::Sidekiq.redis_pool.with do |redis|
21
- redis.sadd('queues'.freeze, 'important')
22
- redis.lpush(
23
- 'queue:important',
24
- <<-JSON
25
- {
26
- "class":"SidekiqJobOne",
27
- "args":[1,2,3],
28
- "queue":"important",
29
- "jid":"123456789"
30
- }
31
- JSON
32
- )
33
- end
34
- enable_redis_instrumentation
35
- sleep 1
36
-
37
- spans = Instana.processor.queued_spans
38
- worker_span = find_spans_by_name(spans, :'sidekiq-worker').first
39
- assert_successful_worker_span(worker_span)
40
-
41
- $sidekiq_mode = :client
42
- end
43
-
44
- def test_failed_worker_starts_new_trace
45
- clear_all!
46
- $sidekiq_mode = :server
47
- inject_instrumentation
48
-
49
- disable_redis_instrumentation
50
- ::Sidekiq.redis_pool.with do |redis|
51
- redis.sadd('queues'.freeze, 'important')
52
- redis.lpush(
53
- 'queue:important',
54
- <<-JSON
55
- {
56
- "class":"SidekiqJobTwo",
57
- "args":[1,2,3],
58
- "queue":"important",
59
- "jid":"123456789"
60
- }
61
- JSON
62
- )
63
- end
64
- enable_redis_instrumentation
65
-
66
- sleep 1
67
-
68
- spans = Instana.processor.queued_spans
69
- worker_span = find_spans_by_name(spans, :'sidekiq-worker').first
70
- assert_failed_worker_span(worker_span)
71
-
72
- $sidekiq_mode = :client
73
- end
74
-
75
- def test_successful_worker_continues_previous_trace
76
- clear_all!
77
- $sidekiq_mode = :server
78
- inject_instrumentation
79
-
80
- Instana.tracer.start_or_continue_trace(:sidekiqtests) do
81
- disable_redis_instrumentation
82
- ::Sidekiq::Client.push(
83
- 'queue' => 'important',
84
- 'class' => ::SidekiqJobOne,
85
- 'args' => [1, 2, 3]
86
- )
87
- enable_redis_instrumentation
88
- end
89
- sleep 1
90
- spans = Instana.processor.queued_spans
91
-
92
- sdk_span = find_spans_by_name(spans, :sidekiqtests).first
93
- validate_sdk_span(sdk_span)
94
-
95
- client_span = find_spans_by_name(spans, :'sidekiq-client').first
96
- assert_client_span(client_span, ::SidekiqJobOne)
97
-
98
- worker_span = find_spans_by_name(spans, :'sidekiq-worker').first
99
- assert_successful_worker_span(worker_span)
100
-
101
- # Worker trace and client trace are in the same trace
102
- assert_equal worker_span[:t], client_span[:t]
103
- assert_equal worker_span[:p], client_span[:s]
104
-
105
- $sidekiq_mode = :client
106
- end
107
-
108
- def test_failed_worker_continues_previous_trace
109
- clear_all!
110
- $sidekiq_mode = :server
111
- inject_instrumentation
112
-
113
- Instana.tracer.start_or_continue_trace(:sidekiqtests) do
114
- disable_redis_instrumentation
115
- ::Sidekiq::Client.push(
116
- 'queue' => 'important',
117
- 'class' => ::SidekiqJobTwo,
118
- 'args' => [1, 2, 3]
119
- )
120
- enable_redis_instrumentation
121
- end
122
- sleep 1
123
-
124
- spans = Instana.processor.queued_spans
125
-
126
- sdk_span = find_spans_by_name(spans, :sidekiqtests).first
127
- validate_sdk_span(sdk_span)
128
-
129
- client_span = find_spans_by_name(spans, :'sidekiq-client').first
130
- assert_client_span(client_span, ::SidekiqJobTwo)
131
-
132
- worker_span = find_spans_by_name(spans, :'sidekiq-worker').first
133
- assert_failed_worker_span(worker_span)
134
-
135
- # Worker trace and client trace are in the same trace
136
- assert_equal worker_span[:t], client_span[:t]
137
- assert_equal worker_span[:p], client_span[:s]
138
-
139
- $sidekiq_mode = :client
140
- end
141
-
142
- private
143
-
144
- def inject_instrumentation
145
- # Add the instrumentation again to ensure injection in server mode
146
- ::Sidekiq.configure_server do |cfg|
147
- cfg.server_middleware do |chain|
148
- chain.add ::Instana::Instrumentation::SidekiqWorker
149
- end
150
- end
151
- end
152
-
153
- def assert_successful_worker_span(worker_span)
154
- assert_equal :'sidekiq-worker', worker_span[:n]
155
-
156
- assert_equal 'important', worker_span[:data][:'sidekiq-worker'][:queue]
157
- assert_equal 'SidekiqJobOne', worker_span[:data][:'sidekiq-worker'][:job]
158
- assert worker_span[:data][:'sidekiq-worker'][:'redis-url']
159
- refute_nil worker_span[:data][:'sidekiq-worker'][:job_id]
160
- end
161
-
162
- def assert_failed_worker_span(worker_span)
163
- assert_equal :'sidekiq-worker', worker_span[:n]
164
-
165
- assert_equal 'important', worker_span[:data][:'sidekiq-worker'][:queue]
166
- assert_equal 'SidekiqJobTwo', worker_span[:data][:'sidekiq-worker'][:job]
167
- assert worker_span[:data][:'sidekiq-worker'][:'redis-url']
168
- refute_nil worker_span[:data][:'sidekiq-worker'][:job_id]
169
-
170
- assert_equal true, worker_span[:data][:'sidekiq-worker'][:error]
171
- assert_equal 'Fail to execute the job', worker_span[:data][:log][:message]
172
- end
173
-
174
- def assert_client_span(client_span, job)
175
- assert_equal :'sidekiq-client', client_span[:n]
176
- assert_equal 'important', client_span[:data][:'sidekiq-client'][:queue]
177
- assert client_span[:data][:'sidekiq-client'][:'redis-url']
178
- assert_equal job.name, client_span[:data][:'sidekiq-client'][:job]
179
- end
180
- end
data/test/secrets_test.rb DELETED
@@ -1,112 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class SecretsTest < Minitest::Test
7
- def setup
8
- @subject = Instana::Secrets.new(logger: Logger.new('/dev/null'))
9
- end
10
-
11
- def test_equals_ignore_case
12
- sample_config = {
13
- "matcher"=>"equals-ignore-case",
14
- "list"=>["key"]
15
- }
16
-
17
- url = url_for(%w(key Str kEy KEY))
18
- assert_redacted @subject.remove_from_query(url, sample_config), %w(key kEy KEY)
19
- end
20
-
21
- def test_equals
22
- sample_config = {
23
- "matcher"=>"equals",
24
- "list"=>["key", "kEy"]
25
- }
26
-
27
- url = url_for(%w(key Str kEy KEY))
28
- assert_redacted @subject.remove_from_query(url, sample_config), %w(key kEy)
29
- end
30
-
31
- def test_contains_ignore_case
32
- sample_config = {
33
- "matcher"=>"contains-ignore-case",
34
- "list"=>["stan"]
35
- }
36
-
37
- url = url_for(%w(instantiate conTESTant sample))
38
- assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate conTESTant)
39
- end
40
-
41
- def test_contains
42
- sample_config = {
43
- "matcher"=>"contains",
44
- "list"=>["stan"]
45
- }
46
-
47
- url = url_for(%w(instantiate conTESTant sample))
48
- assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate)
49
- end
50
-
51
- def test_regexp
52
- sample_config = {
53
- "matcher"=>"regex",
54
- "list"=>["l{2}"]
55
- }
56
-
57
- url = url_for(%w(ball foot move))
58
- assert_redacted @subject.remove_from_query(url, sample_config), %w(ball)
59
- end
60
-
61
- def test_invalid
62
- sample_config = {
63
- "matcher"=>"test_invalid",
64
- "list"=>["key"]
65
- }
66
-
67
- url = url_for(%w(key Str kEy KEY))
68
- assert_redacted @subject.remove_from_query(url, sample_config), []
69
- end
70
-
71
- def test_without_scheme
72
- sample_config = {
73
- "matcher"=>"contains",
74
- "list"=>["stan"]
75
- }
76
-
77
- url = 'example.com?instantiate=true'
78
- assert_redacted @subject.remove_from_query(url, sample_config), %w(instantiate)
79
- end
80
-
81
- def test_without_url
82
- sample_config = {
83
- "matcher"=>"contains",
84
- "list"=>["stan"]
85
- }
86
-
87
- url = 'filter[instantiate]=true'
88
- assert_redacted @subject.remove_from_query(url, sample_config), %w(filter[instantiate]), raw_str: true
89
- end
90
-
91
- def test_with_nil
92
- sample_config = {
93
- "matcher"=>"contains",
94
- "list"=>["stan"]
95
- }
96
-
97
- assert_nil @subject.remove_from_query(nil, sample_config)
98
- end
99
-
100
- private
101
-
102
- def url_for(keys)
103
- url = URI('http://example.com')
104
- url.query = URI.encode_www_form(keys.map { |k| [k, rand(1..100)]})
105
- url.to_s
106
- end
107
-
108
- def assert_redacted(str, keys, raw_str: false)
109
- params = raw_str ? CGI.parse(str) : CGI.parse(URI(str).query)
110
- assert_equal keys, params.select { |_, v| v == %w(<redacted>) }.keys, 'to be redacted'
111
- end
112
- end