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,230 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- require 'test_helper'
5
-
6
- class TracerAsyncTest < Minitest::Test
7
- def test_same_thread_async_tracing
8
- clear_all!
9
-
10
- # Start tracing
11
- ::Instana.tracer.log_start_or_continue(:rack, {:rack_start_kv => 1})
12
-
13
- # Start an asynchronous span
14
- span = ::Instana.tracer.log_async_entry(:my_async_op, { :entry_kv => 1})
15
-
16
- refute_nil span
17
- refute_nil span.context
18
-
19
- # Current span should still be rack
20
- assert_equal :rack, ::Instana.tracer.current_span.name
21
-
22
- # End an asynchronous span
23
- ::Instana.tracer.log_async_exit(:my_async_op, { :exit_kv => 1 }, span)
24
-
25
- # Current span should still be rack
26
- assert_equal :rack, ::Instana.tracer.current_span.name
27
-
28
- # End tracing
29
- ::Instana.tracer.log_end(:rack, {:rack_end_kv => 1})
30
-
31
- spans = ::Instana.processor.queued_spans
32
- assert_equal 2, spans.length
33
-
34
- rack_span = find_first_span_by_name(spans, :rack)
35
- async_span = find_first_span_by_name(spans, :my_async_op)
36
-
37
- # Both spans have a duration
38
- assert rack_span[:d]
39
- assert async_span[:d]
40
-
41
- # first_span is the parent of first_span
42
- assert_equal rack_span[:s], async_span[:p]
43
- # same trace id
44
- assert_equal rack_span[:t], async_span[:t]
45
-
46
- # KV checks
47
- assert_equal 1, rack_span[:data][:rack_start_kv]
48
- assert_equal 1, rack_span[:data][:rack_end_kv]
49
- assert_equal 1, async_span[:data][:sdk][:custom][:tags][:entry_kv]
50
- assert_equal 1, async_span[:data][:sdk][:custom][:tags][:exit_kv]
51
- end
52
-
53
- def test_diff_thread_async_tracing
54
- clear_all!
55
-
56
- # Start tracing
57
- ::Instana.tracer.log_start_or_continue(:rack, {:rack_start_kv => 1})
58
-
59
- t_context = ::Instana.tracer.context
60
- refute_nil t_context.trace_id
61
- refute_nil t_context.span_id
62
-
63
- Thread.new do
64
- ::Instana.tracer.log_start_or_continue(:async_thread, { :async_start => 1 }, t_context)
65
- ::Instana.tracer.log_entry(:sleepy_time, { :tired => 1 })
66
- # Sleep beyond the end of this root trace
67
- sleep 0.5
68
- ::Instana.tracer.log_exit(:sleepy_time, { :wake_up => 1})
69
- ::Instana.tracer.log_end(:async_thread, { :async_end => 1 })
70
- end
71
-
72
- # Current span should still be rack
73
- assert_equal :rack, ::Instana.tracer.current_span.name
74
-
75
- # End tracing
76
- ::Instana.tracer.log_end(:rack, {:rack_end_kv => 1})
77
-
78
- assert_equal false, ::Instana.tracer.tracing?
79
-
80
- # Sleep for 1 seconds to wait for the async thread to finish
81
- sleep 1
82
-
83
- spans = ::Instana.processor.queued_spans
84
- assert_equal 3, spans.length
85
-
86
- rack_span = find_first_span_by_name(spans, :rack)
87
- async_span1 = find_first_span_by_name(spans, :async_thread)
88
- async_span2 = find_first_span_by_name(spans, :sleepy_time)
89
-
90
- # Validate the first original thread span
91
- assert_equal :rack, rack_span[:n]
92
- assert rack_span[:d]
93
- assert_equal 1, rack_span[:data][:rack_start_kv]
94
- assert_equal 1, rack_span[:data][:rack_end_kv]
95
-
96
- # first span in second trace
97
- assert_equal :sdk, async_span1[:n]
98
- assert_equal :async_thread, async_span1[:data][:sdk][:name]
99
- assert async_span1[:d]
100
- assert_equal 1, async_span1[:data][:sdk][:custom][:tags][:async_start]
101
- assert_equal 1, async_span1[:data][:sdk][:custom][:tags][:async_end]
102
-
103
- # second span in second trace
104
- assert_equal :sdk, async_span2[:n]
105
- assert_equal :sleepy_time, async_span2[:data][:sdk][:name]
106
- assert async_span2[:d]
107
- assert_equal 1, async_span2[:data][:sdk][:custom][:tags][:tired]
108
- assert_equal 1, async_span2[:data][:sdk][:custom][:tags][:wake_up]
109
-
110
- # Validate linkage
111
- # All spans have the same trace ID
112
- assert rack_span[:t]==async_span1[:t] && async_span1[:t]==async_span2[:t]
113
-
114
- assert_equal async_span2[:p], async_span1[:s]
115
- assert_equal async_span1[:p], rack_span[:s]
116
-
117
- assert rack_span[:t] == rack_span[:s]
118
- assert async_span1[:t] != async_span1[:s]
119
- assert async_span2[:t] != async_span2[:s]
120
- end
121
-
122
- def test_out_of_order_async_tracing
123
- clear_all!
124
-
125
- # Start tracing
126
- ::Instana.tracer.log_start_or_continue(:rack, {:rack_start_kv => 1})
127
-
128
- # Start three asynchronous spans
129
- span1 = ::Instana.tracer.log_async_entry(:my_async_op1, { :entry_kv => 1})
130
- span2 = ::Instana.tracer.log_async_entry(:my_async_op2, { :entry_kv => 2})
131
- span3 = ::Instana.tracer.log_async_entry(:my_async_op3, { :entry_kv => 3})
132
-
133
- # Current span should still be rack
134
- assert_equal :rack, ::Instana.tracer.current_span.name
135
-
136
- # Log info to the async spans (out of order)
137
- span2.set_tags({ :info_kv => 2 })
138
- span1.set_tags({ :info_kv => 1 })
139
- span3.set_tags({ :info_kv => 3 })
140
-
141
- # Log out of order errors to the async spans
142
- span3.add_error(Exception.new("Async span 3"))
143
- span2.add_error(Exception.new("Async span 3"))
144
-
145
- # End two out of order asynchronous spans
146
- span3.set_tags({ :exit_kv => 3 })
147
- span3.close
148
- span2.set_tags({ :exit_kv => 2 })
149
- span2.close
150
-
151
- # Current span should still be rack
152
- assert_equal :rack, ::Instana.tracer.current_span.name
153
-
154
- # End tracing
155
- ::Instana.tracer.log_end(:rack, {:rack_end_kv => 1})
156
-
157
- # Log an error to and close out the remaining async span after the parent trace has finished
158
- span1.add_error(Exception.new("Async span 1"))
159
- span1.set_tags({ :exit_kv => 1 })
160
- span1.close
161
-
162
- spans = ::Instana.processor.queued_spans
163
- assert_equal 4, spans.length
164
-
165
- first_span = find_first_span_by_name(spans, :rack)
166
- second_span = find_first_span_by_name(spans, :my_async_op1)
167
- third_span = find_first_span_by_name(spans, :my_async_op2)
168
- fourth_span = find_first_span_by_name(spans, :my_async_op3)
169
-
170
- # Assure all spans have completed
171
- assert first_span.key?(:d)
172
- assert second_span.key?(:d)
173
- assert third_span.key?(:d)
174
- assert fourth_span.key?(:d)
175
-
176
- # Linkage
177
- assert_equal first_span[:s], second_span[:p]
178
- assert_equal first_span[:s], third_span[:p]
179
- assert_equal first_span[:s], fourth_span[:p]
180
-
181
- # same trace id
182
- assert_equal first_span[:t], second_span[:t]
183
- assert_equal first_span[:t], third_span[:t]
184
- assert_equal first_span[:t], fourth_span[:t]
185
-
186
- assert first_span[:n] != :sdk
187
- assert second_span[:n] == :sdk
188
- assert third_span[:n] == :sdk
189
- assert fourth_span[:n] == :sdk
190
-
191
- # KV checks
192
- assert_equal 1, first_span[:data][:rack_start_kv]
193
- assert_equal 1, first_span[:data][:rack_end_kv]
194
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:entry_kv]
195
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:exit_kv]
196
- assert_equal 2, third_span[:data][:sdk][:custom][:tags][:entry_kv]
197
- assert_equal 2, third_span[:data][:sdk][:custom][:tags][:exit_kv]
198
- assert_equal 3, fourth_span[:data][:sdk][:custom][:tags][:entry_kv]
199
- assert_equal 3, fourth_span[:data][:sdk][:custom][:tags][:exit_kv]
200
- end
201
-
202
- def test_async_helpers
203
- clear_all!
204
- ::Instana.tracer.log_start_or_continue(:rack)
205
-
206
- span = ::Instana.tracer.log_async_entry(:async, {})
207
- ::Instana.tracer.log_async_info({a: 1}, span)
208
- ::Instana.tracer.log_async_error(StandardError.new('Error'), span)
209
- ::Instana.tracer.log_async_exit(nil, {}, span)
210
-
211
- spans = ::Instana.processor.queued_spans
212
- span, = spans
213
-
214
- assert_equal({a: 1}, span[:data][:sdk][:custom][:tags])
215
- assert_equal(1, span[:ec])
216
- end
217
-
218
- def test_async_helpers_tag_exit
219
- clear_all!
220
- ::Instana.tracer.log_start_or_continue(:rack)
221
-
222
- span = ::Instana.tracer.log_async_entry(:async, {})
223
- ::Instana.tracer.log_async_exit(nil, {a: 1}, span)
224
-
225
- spans = ::Instana.processor.queued_spans
226
- span, = spans
227
-
228
- assert_equal({a: 1}, span[:data][:sdk][:custom][:tags])
229
- end
230
- end
@@ -1,352 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- require 'test_helper'
5
-
6
- class TracerTest < Minitest::Test
7
- def test_that_it_has_a_valid_tracer
8
- refute_nil ::Instana.tracer
9
- assert ::Instana.tracer.is_a?(::Instana::Tracer)
10
- end
11
-
12
- def test_obey_tracing_config
13
- clear_all!
14
-
15
- ::Instana.config[:tracing][:enabled] = false
16
- assert_equal false, ::Instana.tracer.tracing?
17
-
18
- ::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
19
- assert_equal false, ::Instana.tracer.tracing?
20
- end
21
-
22
- ::Instana.config[:tracing][:enabled] = true
23
- end
24
-
25
- def test_basic_trace_block
26
- clear_all!
27
-
28
- assert_equal false, ::Instana.tracer.tracing?
29
-
30
- ::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
31
- assert_equal true, ::Instana.tracer.tracing?
32
- sleep 0.1
33
- end
34
-
35
- spans = ::Instana.processor.queued_spans
36
- assert_equal 1, spans.length
37
-
38
- first_span = spans.first
39
- assert_equal :rack, first_span[:n]
40
- assert first_span[:ts].is_a?(Integer)
41
- assert first_span[:d].is_a?(Integer)
42
- assert first_span[:d].between?(100, 130)
43
- assert first_span.key?(:data)
44
- assert_equal 1, first_span[:data][:one]
45
- assert first_span.key?(:f)
46
- assert_equal ::Instana.agent.source, first_span[:f]
47
- end
48
-
49
- def test_exotic_tag_types
50
- clear_all!
51
-
52
- assert_equal false, ::Instana.tracer.tracing?
53
-
54
- ipv4 = '111.111.111.111'
55
-
56
- ::Instana.tracer.start_or_continue_trace(:rack, {:ipaddr => ipv4}) do
57
- assert_equal true, ::Instana.tracer.tracing?
58
- sleep 0.1
59
- end
60
-
61
- spans = ::Instana.processor.queued_spans
62
- assert_equal 1, spans.length
63
-
64
- first_span = spans.first
65
- assert_equal :rack, first_span[:n]
66
- assert first_span[:ts].is_a?(Integer)
67
- assert first_span[:d].is_a?(Integer)
68
- assert first_span[:d].between?(100, 130)
69
- assert first_span.key?(:data)
70
- assert first_span[:data].key?(:ipaddr)
71
- assert first_span[:data][:ipaddr].is_a?(String)
72
- assert first_span.key?(:f)
73
- assert_equal ::Instana.agent.source, first_span[:f]
74
- end
75
-
76
- def test_errors_are_properly_propagated
77
- clear_all!
78
- exception_raised = false
79
- begin
80
- ::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
81
- raise Exception.new('Error in block - this should continue to propogate outside of tracing')
82
- end
83
- rescue Exception
84
- exception_raised = true
85
- end
86
-
87
- assert exception_raised
88
-
89
- spans = ::Instana.processor.queued_spans
90
- assert_equal 1, spans.length
91
-
92
- first_span = spans.first
93
- assert_equal :rack, first_span[:n]
94
- assert first_span[:ts].is_a?(Integer)
95
- assert first_span[:ts] > 0
96
- assert first_span[:d].is_a?(Integer)
97
- assert first_span[:d].between?(0, 5)
98
- assert first_span.key?(:data)
99
- assert_equal 1, first_span[:data][:one]
100
- assert first_span.key?(:f)
101
- assert_equal ::Instana.agent.source, first_span[:f]
102
- assert_equal first_span[:error], true
103
- assert_equal first_span[:ec], 1
104
- end
105
-
106
- def test_complex_trace_block
107
- clear_all!
108
- ::Instana.tracer.start_or_continue_trace(:rack, {:one => 1}) do
109
- sleep 0.2
110
- ::Instana.tracer.trace(:sub_block, {:sub_two => 2}) do
111
- sleep 0.2
112
- end
113
- end
114
-
115
- spans = ::Instana.processor.queued_spans
116
- assert_equal 2, spans.length
117
-
118
- rack_span = find_first_span_by_name(spans, :rack)
119
- sdk_span = find_first_span_by_name(spans, :sub_block)
120
-
121
- assert_equal rack_span[:n], :rack
122
- assert_nil rack_span[:p]
123
- assert_equal rack_span[:t], rack_span[:s]
124
- assert_equal rack_span[:data][:one], 1
125
-
126
- assert_equal sdk_span[:n], :sdk
127
- assert_equal sdk_span[:data][:sdk][:name], :sub_block
128
- assert_equal sdk_span[:data][:sdk][:type], :intermediate
129
- assert_equal sdk_span[:k], 3
130
- assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_two], 2
131
- end
132
-
133
- def test_custom_complex_trace_block
134
- clear_all!
135
- ::Instana.tracer.start_or_continue_trace(:root_span, {:one => 1}) do
136
- sleep 0.2
137
- ::Instana.tracer.trace(:sub_span, {:sub_two => 2}) do
138
- sleep 0.2
139
- end
140
- end
141
-
142
- spans = ::Instana.processor.queued_spans
143
- assert_equal 2, spans.length
144
-
145
- root_span = find_first_span_by_name(spans, :root_span)
146
- sub_span = find_first_span_by_name(spans, :sub_span)
147
-
148
- assert_equal root_span[:n], :sdk
149
- assert_equal root_span[:data][:sdk][:name], :root_span
150
- assert_equal root_span[:data][:sdk][:type], :entry
151
- assert_equal root_span[:k], 1
152
- assert_nil root_span[:p]
153
- assert_equal root_span[:t], root_span[:s]
154
- assert_equal root_span[:data][:sdk][:custom][:tags][:one], 1
155
-
156
- assert_equal sub_span[:n], :sdk
157
- assert_equal sub_span[:data][:sdk][:name], :sub_span
158
- assert_equal sub_span[:data][:sdk][:type], :intermediate
159
- assert_equal sub_span[:k], 3
160
- assert_equal sub_span[:p], root_span[:s]
161
- assert_equal sub_span[:t], root_span[:t]
162
- assert_equal sub_span[:data][:sdk][:custom][:tags][:sub_two], 2
163
- end
164
-
165
- def test_basic_low_level_tracing
166
- clear_all!
167
-
168
- assert_equal false, ::Instana.tracer.tracing?
169
- # Start tracing
170
- ::Instana.tracer.log_start_or_continue(:rack, {:one => 1})
171
- assert_equal true, ::Instana.tracer.tracing?
172
- ::Instana.tracer.log_info({:info_logged => 1})
173
- # End tracing
174
- ::Instana.tracer.log_end(:rack, {:close_one => 1})
175
- assert_equal false, ::Instana.tracer.tracing?
176
-
177
- spans = ::Instana.processor.queued_spans
178
- assert_equal 1, spans.length
179
- end
180
-
181
- def test_complex_low_level_tracing
182
- clear_all!
183
-
184
- assert_equal false, ::Instana.tracer.tracing?
185
-
186
- # Start tracing
187
- ::Instana.tracer.log_start_or_continue(:rack, {:one => 1})
188
- assert_equal true, ::Instana.tracer.tracing?
189
- ::Instana.tracer.log_info({:info_logged => 1})
190
-
191
- # Start tracing a sub span
192
- ::Instana.tracer.log_entry(:sub_task)
193
- assert_equal true, ::Instana.tracer.tracing?
194
- ::Instana.tracer.log_info({:sub_task_info => 1})
195
- # Exit from the sub span
196
- ::Instana.tracer.log_exit(:sub_task, {:sub_task_exit_info => 1})
197
- assert_equal true, ::Instana.tracer.tracing?
198
-
199
- # End tracing
200
- ::Instana.tracer.log_end(:rack, {:close_one => 1})
201
- assert_equal false, ::Instana.tracer.tracing?
202
-
203
- spans = ::Instana.processor.queued_spans
204
- assert_equal 2, spans.length
205
-
206
- rack_span = find_first_span_by_name(spans, :rack)
207
- sdk_span = find_first_span_by_name(spans, :sub_task)
208
-
209
- assert_equal :rack, rack_span[:n]
210
- assert rack_span.key?(:data)
211
- assert_equal rack_span[:data][:one], 1
212
- assert_equal rack_span[:data][:info_logged], 1
213
- assert_equal rack_span[:data][:close_one], 1
214
-
215
- assert rack_span.key?(:f)
216
- assert_equal ::Instana.agent.source, rack_span[:f]
217
-
218
- assert_equal sdk_span[:n], :sdk
219
- assert_equal sdk_span[:data][:sdk][:name], :sub_task
220
- assert_equal sdk_span[:data][:sdk][:type], :intermediate
221
- assert_equal sdk_span[:k], 3
222
- assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_info], 1
223
- assert_equal sdk_span[:data][:sdk][:custom][:tags][:sub_task_exit_info], 1
224
- end
225
-
226
- def test_block_tracing_error_capture
227
- clear_all!
228
- exception_raised = false
229
- begin
230
- ::Instana.tracer.start_or_continue_trace(:test_trace, {:one => 1}) do
231
- ::Instana.tracer.trace(:test_trace_two) do
232
- raise Exception.new("Block exception test error")
233
- end
234
- end
235
- rescue Exception
236
- exception_raised = true
237
- end
238
-
239
- assert exception_raised
240
-
241
- spans = ::Instana.processor.queued_spans
242
- assert_equal 2, spans.length
243
-
244
- sdk_span = spans.last
245
-
246
- assert_equal sdk_span[:n], :sdk
247
- assert_equal sdk_span[:data][:sdk][:name], :test_trace
248
- assert_equal sdk_span[:data][:sdk][:type], :entry
249
- assert_equal sdk_span[:k], 1
250
- assert_equal sdk_span[:data][:sdk][:custom][:tags][:one], 1
251
- assert_equal sdk_span[:error], true
252
- assert_equal sdk_span[:ec], 1
253
- assert_equal sdk_span.key?(:stack), true
254
- end
255
-
256
- def test_low_level_error_logging
257
- clear_all!
258
- ::Instana.tracer.log_start_or_continue(:test_trace, {:one => 1})
259
- ::Instana.tracer.log_info({:info_logged => 1})
260
- ::Instana.tracer.log_error(Exception.new("Low level tracing api error"))
261
- ::Instana.tracer.log_end(:test_trace, {:close_one => 1})
262
-
263
- spans = ::Instana.processor.queued_spans
264
- assert_equal 1, spans.length
265
-
266
- sdk_span = spans[0]
267
-
268
- assert_equal sdk_span[:n], :sdk
269
- assert_equal sdk_span[:data][:sdk][:name], :test_trace
270
- assert_equal sdk_span[:data][:sdk][:type], :entry
271
- assert_equal sdk_span[:k], 1
272
- assert_equal sdk_span[:data][:sdk][:custom][:tags][:one], 1
273
- assert_equal sdk_span[:data][:sdk][:custom][:tags][:info_logged], 1
274
- assert_equal sdk_span[:data][:sdk][:custom][:tags][:close_one], 1
275
- assert_equal sdk_span[:error], true
276
- assert_equal sdk_span[:ec], 1
277
- assert_equal sdk_span.key?(:stack), false
278
- end
279
-
280
- def test_nil_returns
281
- clear_all!
282
-
283
- refute ::Instana.tracer.tracing?
284
- assert_nil ::Instana.tracer.log_entry(nil)
285
- assert_nil ::Instana.tracer.log_info(nil)
286
- assert_nil ::Instana.tracer.log_error(nil)
287
- assert_nil ::Instana.tracer.log_exit(nil)
288
- assert_nil ::Instana.tracer.log_end(nil)
289
- assert_nil ::Instana.tracer.log_async_entry(nil, nil)
290
- assert_nil ::Instana.tracer.context
291
- end
292
-
293
- def test_tracing_span
294
- clear_all!
295
-
296
- refute ::Instana.tracer.tracing_span?(:rack)
297
- ::Instana.tracer.log_start_or_continue(:rack)
298
- assert ::Instana.tracer.tracing_span?(:rack)
299
- end
300
-
301
- def test_log_exit_warn_span_name
302
- logger = Minitest::Mock.new
303
- logger.expect(:warn, true, [String])
304
- subject = Instana::Tracer.new(logger: logger)
305
-
306
- subject.log_start_or_continue(:sample)
307
- subject.log_exit(:roda)
308
-
309
- logger.verify
310
- end
311
-
312
- def test_log_end_warn_span_name
313
- clear_all!
314
-
315
- logger = Minitest::Mock.new
316
- logger.expect(:warn, true, [String])
317
- subject = Instana::Tracer.new(logger: logger)
318
-
319
- subject.log_start_or_continue(:sample)
320
- subject.log_end(:roda)
321
-
322
- logger.verify
323
- end
324
-
325
- def test_log_entry_span
326
- clear_all!
327
-
328
- subject = Instana::Tracer.new
329
- span = Instana::Span.new(:rack)
330
-
331
- subject.log_entry(:sample, {}, ::Instana::Util.now_in_ms, span)
332
- assert subject.tracing?
333
- assert subject.current_span.parent, span
334
- end
335
-
336
- def test_log_entry_span_context
337
- clear_all!
338
-
339
- subject = Instana::Tracer.new
340
- span_context = Instana::SpanContext.new('test', 'test')
341
-
342
- subject.log_entry(:sample, {}, ::Instana::Util.now_in_ms, span_context)
343
- assert subject.tracing?
344
- assert subject.current_span.context, span_context
345
- end
346
-
347
- def test_missing_class_super
348
- assert_raises NoMethodError do
349
- Instana::Tracer.invalid
350
- end
351
- end
352
- end
data/test/util_test.rb DELETED
@@ -1,10 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class UtilTest < Minitest::Test
7
- def test_get_rb_source_error
8
- assert_equal({ error: "Only Ruby source files are allowed. (*.rb)" }, Instana::Util.get_rb_source('invalid.txt'))
9
- end
10
- end