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,152 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require 'test_helper'
5
-
6
- class RedisTest < Minitest::Test
7
- def setup
8
- if ENV.key?('REDIS_URL')
9
- @redis_url = ENV['REDIS_URL']
10
- else
11
- @redis_url = "redis://localhost:6379"
12
- end
13
- @redis_client = Redis.new(url: @redis_url)
14
- end
15
-
16
- def test_normal_call
17
- clear_all!
18
-
19
- Instana.tracer.start_or_continue_trace(:redis_test) do
20
- @redis_client.set('hello', 'world')
21
- end
22
-
23
- assert_redis_trace('SET')
24
- end
25
-
26
- def test_normal_call_as_root_exit_span
27
- clear_all!
28
-
29
- ::Instana.config[:allow_exit_as_root] = true
30
-
31
- @redis_client.set('hello', 'world')
32
-
33
- spans = ::Instana.processor.queued_spans
34
- assert_equal 1, spans.length
35
- redis_span = spans[0]
36
-
37
- # first_span is the parent of second_span
38
- assert_equal :redis, redis_span[:n]
39
-
40
- data = redis_span[:data]
41
-
42
- uri = URI.parse(@redis_url)
43
- assert_equal "#{uri.host}:#{uri.port}", data[:redis][:connection]
44
-
45
- assert_equal "0", data[:redis][:db]
46
- assert_equal "SET", data[:redis][:command]
47
- end
48
-
49
- def test_georadius
50
- clear_all!
51
-
52
- Instana.tracer.start_or_continue_trace(:redis_test) do
53
- @redis_client.georadius('Sicily', '15', '37', '200', 'km', 'WITHCOORD', 'WITHDIST')
54
- end
55
-
56
- assert_redis_trace('GEORADIUS')
57
- end
58
-
59
- def test_normal_call_with_error
60
- clear_all!
61
-
62
- Instana.tracer.start_or_continue_trace(:redis_test) do
63
- begin
64
- @redis_client.zadd('hello', 'invalid', 'value')
65
- rescue; end
66
- end
67
-
68
- assert_redis_trace('ZADD', with_error: 'ERR value is not a valid float')
69
- end
70
-
71
- def test_pipeline_call
72
- clear_all!
73
-
74
- Instana.tracer.start_or_continue_trace(:redis_test) do
75
- @redis_client.pipelined do |pipeline|
76
- pipeline.set('hello', 'world')
77
- pipeline.set('other', 'world')
78
- end
79
- end
80
-
81
- assert_redis_trace('PIPELINE')
82
- end
83
-
84
- def test_pipeline_call_with_error
85
- clear_all!
86
-
87
- Instana.tracer.start_or_continue_trace(:redis_test) do
88
- begin
89
- @redis_client.pipelined do |pipeline|
90
- pipeline.set('other', 'world')
91
- pipeline.call('invalid')
92
- end
93
- rescue; end
94
- end
95
-
96
- assert_redis_trace('PIPELINE', with_error: "ERR unknown command 'invalid'")
97
- end
98
-
99
- def test_multi_call
100
- clear_all!
101
-
102
- Instana.tracer.start_or_continue_trace(:redis_test) do
103
- @redis_client.multi do |multi|
104
- multi.set('hello', 'world')
105
- multi.set('other', 'world')
106
- end
107
- end
108
-
109
- assert_redis_trace('MULTI')
110
- end
111
-
112
- def test_multi_call_with_error
113
- clear_all!
114
-
115
- Instana.tracer.start_or_continue_trace(:redis_test) do
116
- begin
117
- @redis_client.multi do |multi|
118
- multi.set('other', 'world')
119
- multi.call('invalid')
120
- end
121
- rescue; end
122
- end
123
-
124
- assert_redis_trace('MULTI', with_error: "ERR unknown command 'invalid'")
125
- end
126
-
127
- private
128
-
129
- def assert_redis_trace(command, with_error: nil)
130
- spans = ::Instana.processor.queued_spans
131
- assert_equal 2, spans.length
132
- first_span, second_span = spans.to_a.reverse
133
-
134
- # first_span is the parent of second_span
135
- assert_equal first_span[:s], second_span[:p]
136
- assert_equal :sdk, first_span[:n]
137
- assert_equal :redis, second_span[:n]
138
-
139
- data = second_span[:data]
140
-
141
- uri = URI.parse(@redis_url)
142
- assert_equal "#{uri.host}:#{uri.port}", data[:redis][:connection]
143
-
144
- assert_equal "0", data[:redis][:db]
145
- assert_equal command, data[:redis][:command]
146
-
147
- if with_error
148
- assert_equal true, data[:redis][:error]
149
- assert data[:log].key?(:message)
150
- end
151
- end
152
- end
@@ -1,188 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2018
3
-
4
- require 'test_helper'
5
- require 'support/apps/resque/boot'
6
-
7
- ::Resque.redis = ENV['REDIS_URL']
8
-
9
- class ResqueClientTest < Minitest::Test
10
- def setup
11
- clear_all!
12
- ENV['FORK_PER_JOB'] = 'false'
13
- Resque.redis.redis.flushall
14
- @worker = Resque::Worker.new(:critical)
15
- end
16
-
17
- def teardown
18
- ::Instana.config[:allow_exit_as_root] = false
19
- end
20
-
21
- def test_enqueue
22
- ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
23
- ::Resque.enqueue(FastJob)
24
- end
25
-
26
- resque_job = Resque.reserve('critical')
27
- spans = ::Instana.processor.queued_spans
28
- assert_equal 2, spans.length
29
-
30
- sdk_span = find_first_span_by_name(spans, :'resque-client_test')
31
- resque_span = find_first_span_by_name(spans, :'resque-client')
32
-
33
- assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
34
-
35
- assert_equal :"resque-client", resque_span[:n]
36
- assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
37
- assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
38
- assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
39
-
40
- assert_equal resque_job.args.first['trace_id'], resque_span[:t]
41
- assert_equal resque_job.args.first['span_id'], resque_span[:s]
42
- end
43
-
44
- def test_enqueue_as_root_exit_span
45
- ::Instana.config[:allow_exit_as_root] = true
46
- ::Resque.enqueue(FastJob)
47
- ::Instana.config[:allow_exit_as_root] = false
48
-
49
- resque_job = Resque.reserve('critical')
50
- spans = ::Instana.processor.queued_spans
51
- assert_equal 1, spans.length
52
-
53
- resque_span = spans[0]
54
-
55
- assert_equal :"resque-client", resque_span[:n]
56
- assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
57
- assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
58
- assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
59
-
60
- assert_equal resque_job.args.first['trace_id'], resque_span[:t]
61
- assert_equal resque_job.args.first['span_id'], resque_span[:s]
62
- end
63
-
64
- def test_enqueue_to
65
- ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
66
- ::Resque.enqueue_to(:critical, FastJob)
67
- end
68
-
69
- resque_job = Resque.reserve('critical')
70
- spans = ::Instana.processor.queued_spans
71
- assert_equal 2, spans.length
72
-
73
- sdk_span = find_first_span_by_name(spans, :'resque-client_test')
74
- resque_span = find_first_span_by_name(spans, :'resque-client')
75
-
76
- assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
77
- assert_equal :"resque-client", resque_span[:n]
78
- assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
79
- assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
80
- assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
81
-
82
- assert_equal resque_job.args.first['trace_id'], resque_span[:t]
83
- assert_equal resque_job.args.first['span_id'], resque_span[:s]
84
- end
85
-
86
- def test_dequeue
87
- ::Instana.tracer.start_or_continue_trace(:'resque-client_test', '', {}) do
88
- ::Resque.dequeue(FastJob, { :generate => :farfalla })
89
- end
90
-
91
- spans = ::Instana.processor.queued_spans
92
- assert_equal 2, spans.length
93
-
94
- sdk_span = find_first_span_by_name(spans, :'resque-client_test')
95
- resque_span = find_first_span_by_name(spans, :'resque-client')
96
-
97
- assert_equal :'resque-client_test', sdk_span[:data][:sdk][:name]
98
- assert_equal :"resque-client", resque_span[:n]
99
- assert_equal "FastJob", resque_span[:data][:'resque-client'][:job]
100
- assert_equal :critical, resque_span[:data][:'resque-client'][:queue]
101
- assert_equal false, resque_span[:data][:'resque-client'].key?(:error)
102
- end
103
-
104
- def test_worker_job
105
- ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
106
- ::Resque.enqueue_to(:critical, FastJob)
107
- end
108
-
109
- resque_job = Resque.reserve('critical')
110
- @worker.work_one_job(resque_job)
111
-
112
- spans = ::Instana.processor.queued_spans
113
- assert_equal 5, spans.length
114
-
115
- client_span = spans[0]
116
- resque_span = spans[4]
117
- redis1_span = spans[3]
118
- redis2_span = spans[2]
119
-
120
- assert_equal :'resque-client', client_span[:n]
121
-
122
- assert_equal :'resque-worker', resque_span[:n]
123
- assert_equal client_span[:s], resque_span[:p]
124
- assert_equal false, resque_span.key?(:error)
125
- assert_equal false, resque_span.key?(:ec)
126
- assert_equal "FastJob", resque_span[:data][:'resque-worker'][:job]
127
- assert_equal "critical", resque_span[:data][:'resque-worker'][:queue]
128
- assert_equal false, resque_span[:data][:'resque-worker'].key?(:error)
129
-
130
- assert_equal :redis, redis1_span[:n]
131
- assert_equal "SET", redis1_span[:data][:redis][:command]
132
- assert_equal :redis, redis2_span[:n]
133
- assert_equal "SET", redis2_span[:data][:redis][:command]
134
- end
135
-
136
- def test_worker_job_no_propagate
137
- ::Instana.config[:'resque-client'][:propagate] = false
138
- ::Instana.tracer.start_or_continue_trace(:'resque-client_test') do
139
- ::Resque.enqueue_to(:critical, FastJob)
140
- end
141
-
142
- resque_job = Resque.reserve('critical')
143
- @worker.work_one_job(resque_job)
144
-
145
- spans = ::Instana.processor.queued_spans
146
- assert_equal 5, spans.length
147
-
148
- client_span = spans[0]
149
- resque_span = spans[4]
150
- redis1_span = spans[3]
151
- redis2_span = spans[2]
152
-
153
- assert_equal :'resque-client', client_span[:n]
154
-
155
- assert_equal :'resque-worker', resque_span[:n]
156
- refute_equal client_span[:s], resque_span[:p]
157
- assert_equal false, resque_span.key?(:error)
158
- assert_equal false, resque_span.key?(:ec)
159
- assert_equal "FastJob", resque_span[:data][:'resque-worker'][:job]
160
- assert_equal "critical", resque_span[:data][:'resque-worker'][:queue]
161
- assert_equal false, resque_span[:data][:'resque-worker'].key?(:error)
162
-
163
- assert_equal :redis, redis1_span[:n]
164
- assert_equal "SET", redis1_span[:data][:redis][:command]
165
- assert_equal :redis, redis2_span[:n]
166
- assert_equal "SET", redis2_span[:data][:redis][:command]
167
- ensure
168
- ::Instana.config[:'resque-client'][:propagate] = true
169
- end
170
-
171
- def test_worker_error_job
172
- Resque::Job.create(:critical, ErrorJob)
173
- @worker.work(0)
174
-
175
- spans = ::Instana.processor.queued_spans
176
- assert_equal 5, spans.length
177
-
178
- resque_span = find_first_span_by_name(spans, :'resque-worker')
179
-
180
- assert_equal :'resque-worker', resque_span[:n]
181
- assert_equal true, resque_span.key?(:error)
182
- assert_equal 1, resque_span[:ec]
183
- assert_equal "ErrorJob", resque_span[:data][:'resque-worker'][:job]
184
- assert_equal "critical", resque_span[:data][:'resque-worker'][:queue]
185
- assert_equal "Exception: Silly Rabbit, Trix are for kids.", resque_span[:data][:'resque-worker'][:error]
186
- assert_equal Array, resque_span[:stack].class
187
- end
188
- end
@@ -1,107 +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 RestClientTest < Minitest::Test
8
- def setup
9
- # See https://github.com/rest-client/rest-client/issues/612
10
- OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:ciphers] = OpenSSL::SSL::SSLContext.new.ciphers
11
- end
12
-
13
- def teardown
14
- ::Instana.config[:allow_exit_as_root] = false
15
- end
16
-
17
- def test_config_defaults
18
- assert ::Instana.config[:'rest-client'].is_a?(Hash)
19
- assert ::Instana.config[:'rest-client'].key?(:enabled)
20
- assert_equal true, ::Instana.config[:'rest-client'][:enabled]
21
- end
22
-
23
- def test_basic_get
24
- clear_all!
25
- WebMock.allow_net_connect!
26
-
27
- url = "http://127.0.0.1:6511/"
28
-
29
- Instana.tracer.start_or_continue_trace('restclient-test') do
30
- RestClient.get url
31
- end
32
-
33
- spans = ::Instana.processor.queued_spans
34
- assert_equal 4, spans.length
35
-
36
- rack_span = find_first_span_by_name(spans, :rack)
37
- sdk_span = find_first_span_by_name(spans, :'restclient-test')
38
- rest_span = find_first_span_by_name(spans, :'rest-client')
39
- net_span = find_first_span_by_name(spans, :'net-http')
40
-
41
- validate_sdk_span(sdk_span, {:name => :'restclient-test', :type => :entry})
42
- validate_sdk_span(rest_span, {:name => :'rest-client', :type => :intermediate})
43
-
44
- # Span name validation
45
- assert_equal :rack, rack_span[:n]
46
- assert_equal :sdk, sdk_span[:n]
47
- assert_equal :sdk, rest_span[:n]
48
- assert_equal :"net-http", net_span[:n]
49
-
50
- # Trace IDs and relationships
51
- trace_id = sdk_span[:t]
52
- assert_equal trace_id, rest_span[:t]
53
- assert_equal trace_id, net_span[:t]
54
- assert_equal trace_id, rack_span[:t]
55
-
56
- assert_equal sdk_span[:s], rest_span[:p]
57
- assert_equal rest_span[:s], net_span[:p]
58
- assert_equal net_span[:s], rack_span[:p]
59
-
60
- # data keys/values
61
- refute_nil net_span.key?(:data)
62
- refute_nil net_span[:data].key?(:http)
63
- assert_equal "http://127.0.0.1:6511/", net_span[:data][:http][:url]
64
- assert_equal "200", net_span[:data][:http][:status]
65
-
66
- WebMock.disable_net_connect!
67
- end
68
-
69
- def test_basic_get_as_root_exit_span
70
- clear_all!
71
- ::Instana.config[:allow_exit_as_root] = true
72
- WebMock.allow_net_connect!
73
-
74
- url = "http://127.0.0.1:6511/"
75
-
76
- RestClient.get url
77
-
78
- spans = ::Instana.processor.queued_spans
79
- assert_equal 3, spans.length
80
-
81
- rack_span = find_first_span_by_name(spans, :rack)
82
- rest_span = find_first_span_by_name(spans, :'rest-client')
83
- net_span = find_first_span_by_name(spans, :'net-http')
84
-
85
- # Span name validation
86
- assert_equal :rack, rack_span[:n]
87
- assert_equal :sdk, rest_span[:n]
88
- assert_equal :"net-http", net_span[:n]
89
-
90
- # Trace IDs and relationships
91
- trace_id = net_span[:t]
92
- assert_equal trace_id, rest_span[:t]
93
- assert_equal trace_id, rack_span[:t]
94
-
95
- assert_nil rest_span[:p]
96
- assert_equal rest_span[:s], net_span[:p]
97
- assert_equal net_span[:s], rack_span[:p]
98
-
99
- # data keys/values
100
- refute_nil net_span.key?(:data)
101
- refute_nil net_span[:data].key?(:http)
102
- assert_equal "http://127.0.0.1:6511/", net_span[:data][:http][:url]
103
- assert_equal "200", net_span[:data][:http][:status]
104
-
105
- WebMock.disable_net_connect!
106
- end
107
- end
@@ -1,105 +0,0 @@
1
- # (c) Copyright IBM Corp. 2024
2
-
3
- require 'test_helper'
4
- require 'sequel'
5
-
6
- class SequelTest < Minitest::Test
7
- def setup
8
- skip unless ENV['DATABASE_URL']
9
- db_url = ENV['DATABASE_URL'].sub("sqlite3", "sqlite")
10
- @db = Sequel.connect(db_url)
11
- @db.create_table!(:blocks) do
12
- String :name
13
- String :color
14
- end
15
- @model = @db[:blocks]
16
- end
17
-
18
- def teardown
19
- @db.drop_table(:blocks)
20
- @db.disconnect
21
- end
22
-
23
- def test_config_defaults
24
- assert ::Instana.config[:sanitize_sql] == true
25
- assert ::Instana.config[:sequel].is_a?(Hash)
26
- assert ::Instana.config[:sequel].key?(:enabled)
27
- assert_equal true, ::Instana.config[:sequel][:enabled]
28
- end
29
-
30
- def test_create
31
- Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
32
- @model.insert(name: 'core', color: 'blue')
33
- end
34
- spans = ::Instana.processor.queued_spans
35
- assert_equal 2, spans.length
36
- span = find_first_span_by_name(spans, :sequel)
37
- data = span[:data][:sequel]
38
- assert data[:sql].start_with?('INSERT INTO')
39
- end
40
-
41
- def test_read
42
- @model.insert(name: 'core', color: 'blue')
43
- Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
44
- @model.where(name: 'core').first
45
- end
46
- spans = ::Instana.processor.queued_spans
47
- assert_equal 2, spans.length
48
- span = find_first_span_by_name(spans, :sequel)
49
- data = span[:data][:sequel]
50
- assert data[:sql].start_with?('SELECT')
51
- assert_nil span[:ec]
52
- end
53
-
54
- def test_update
55
- @model.insert(name: 'core', color: 'blue')
56
- Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
57
- @model.where(name: 'core').update(color: 'red')
58
- end
59
- spans = ::Instana.processor.queued_spans
60
- assert_equal 2, spans.length
61
- span = find_first_span_by_name(spans, :sequel)
62
- data = span[:data][:sequel]
63
- assert data[:sql].start_with?('UPDATE')
64
- assert_nil span[:ec]
65
- assert_equal 'red', @model.where(name: 'core').first[:color]
66
- end
67
-
68
- def test_delete
69
- @model.insert(name: 'core', color: 'blue')
70
- Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
71
- @model.where(name: 'core').delete
72
- end
73
- spans = ::Instana.processor.queued_spans
74
- assert_equal 2, spans.length
75
- span = find_first_span_by_name(spans, :sequel)
76
- data = span[:data][:sequel]
77
- assert data[:sql].start_with?('DELETE')
78
- assert_nil span[:ec]
79
- assert_nil @model.where(name: 'core').first
80
- end
81
-
82
- def test_raw
83
- Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
84
- @db.run('SELECT 1')
85
- end
86
- spans = ::Instana.processor.queued_spans
87
- assert_equal 2, spans.length
88
- span = find_first_span_by_name(spans, :sequel)
89
- data = span[:data][:sequel]
90
- assert 'SELECT 1', data[:sql]
91
- assert_nil span[:ec]
92
- end
93
-
94
- def test_raw_error
95
- assert_raises Sequel::DatabaseError do
96
- Instana::Tracer.start_or_continue_trace(:sequel_test, {}) do
97
- @db.run('INVALID')
98
- end
99
- end
100
- spans = ::Instana.processor.queued_spans
101
- assert_equal 2, spans.length
102
- span = find_first_span_by_name(spans, :sequel)
103
- assert_equal 1, span[:ec]
104
- end
105
- end
@@ -1,47 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
- require 'ostruct'
6
-
7
- class ShoryukenTest < Minitest::Test
8
- def setup
9
- clear_all!
10
- @middleware = Instana::Instrumentation::Shoryuken.new
11
- end
12
-
13
- def test_start_trace_with_context
14
- id = Instana::Util.generate_id
15
- message = OpenStruct.new(
16
- queue_url: 'http://example.com',
17
- message_attributes: {
18
- "X_INSTANA_T" => OpenStruct.new(string_value: id),
19
- "X_INSTANA_S" => OpenStruct.new(string_value: id),
20
- "X_INSTANA_L" => OpenStruct.new(string_value: '1')
21
- }
22
- )
23
-
24
- @middleware.call(nil, nil, message, nil) {}
25
-
26
- span = ::Instana.processor.queued_spans.first
27
-
28
- assert_equal id, span[:t]
29
- assert_equal id, span[:p]
30
- assert_equal 'entry', span[:data][:sqs][:sort]
31
- assert_equal 'http://example.com', span[:data][:sqs][:queue]
32
- end
33
-
34
- def test_start_trace
35
- message = OpenStruct.new(
36
- queue_url: 'http://example.com'
37
- )
38
-
39
- @middleware.call(nil, nil, message, nil) {}
40
-
41
- span = ::Instana.processor.queued_spans.first
42
-
43
- assert_nil span[:p]
44
- assert_equal 'entry', span[:data][:sqs][:sort]
45
- assert_equal 'http://example.com', span[:data][:sqs][:queue]
46
- end
47
- end