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,9 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- class SidekiqJobOne
5
- include Sidekiq::Worker
6
-
7
- def perform(a, b, c)
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- class SidekiqJobTwo
5
- include Sidekiq::Worker
6
-
7
- def perform(a, b, c)
8
- raise 'Fail to execute the job'
9
- end
10
- end
@@ -1,37 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2017
3
-
4
- require 'sidekiq/launcher'
5
- require 'sidekiq/cli'
6
- require 'sidekiq/api'
7
- require 'sidekiq/processor'
8
-
9
- require_relative 'jobs/sidekiq_job_1'
10
- require_relative 'jobs/sidekiq_job_2'
11
-
12
- ::Instana.logger.info "Booting instrumented sidekiq worker for tests."
13
- ::Sidekiq.logger.level = ::Logger::FATAL
14
-
15
- sidekiq_version = Gem::Specification.find_by_name('sidekiq').version
16
- cli = ::Sidekiq::CLI.instance
17
- cli.parse(['sidekiq', '-r', __FILE__, '-C', "#{File.dirname(__FILE__)}/config.yaml"])
18
-
19
- config_or_options = if sidekiq_version >= Gem::Version.new('6.5.0')
20
- cli.config
21
- else
22
- cli.send :options
23
- end
24
-
25
- sidekiq_thread = Thread.new do
26
- launcher = ::Sidekiq::Launcher.new(
27
- config_or_options
28
- )
29
- launcher.run
30
- Thread.current[:worker] = launcher
31
- end
32
-
33
- Minitest.after_run do
34
- ::Instana.logger.info "Killing Sidekiq worker"
35
- sidekiq_thread[:worker].stop
36
- sleep 1
37
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # (c) Copyright IBM Corp. 2021
4
- # (c) Copyright Instana Inc. 2021
5
-
6
- module Instana
7
- module TestHelpers
8
- # Used to reset the gem to boot state. It clears out any queued and/or staged
9
- # traces and resets the tracer to no active trace.
10
- #
11
- def clear_all!
12
- ::Instana.processor.clear!
13
- ::Instana.tracer.clear!
14
- nil
15
- end
16
-
17
- def disable_redis_instrumentation
18
- ::Instana.config[:redis][:enabled] = false
19
- end
20
-
21
- def enable_redis_instrumentation
22
- ::Instana.config[:redis][:enabled] = true
23
- end
24
-
25
- def validate_sdk_span(json_span, sdk_hash = {}, errored = false, _ec = 1)
26
- assert_equal :sdk, json_span[:n]
27
- assert json_span.key?(:k)
28
- assert json_span.key?(:d)
29
- assert json_span.key?(:ts)
30
-
31
- sdk_hash.each do |k, v|
32
- assert_equal v, json_span[:data][:sdk][k]
33
- end
34
-
35
- return unless errored
36
-
37
- assert_equal true, json_span[:error]
38
- assert_equal 1, json_span[:ec]
39
- end
40
-
41
- def find_spans_by_name(spans, name)
42
- spans.select do |span|
43
- (span[:n] == :sdk && span[:data][:sdk][:name] == name) || span[:n] == name
44
- end.tap do |result|
45
- raise StandardError, "No SDK spans (#{name}) could be found" if result.empty?
46
- end
47
- end
48
-
49
- def find_first_span_by_name(spans, name)
50
- spans.each do |span|
51
- case span[:n]
52
- when :sdk
53
- return span if span[:data][:sdk][:name] == name
54
- when name
55
- return span
56
- end
57
- end
58
- raise StandardError, "Span (#{name}) not found"
59
- end
60
-
61
- def find_span_by_id(spans, id)
62
- spans.each do |span|
63
- return span if span[:s] == id
64
- end
65
- raise StandardError, "Span with id (#{id}) not found"
66
- end
67
-
68
- # Finds the first span in +spans+ for which +block+ returns true
69
- #
70
- # ar_span = find_first_span_by_qualifier(ar_spans) do |span|
71
- # span[:data][:activerecord][:sql] == sql
72
- # end
73
- #
74
- # This helper will raise an exception if no span evaluates to true against he provided block.
75
- #
76
- # +spans+: +Array+ of spans to search
77
- # +block+: The Ruby block to evaluate against each span
78
- def find_first_span_by_qualifier(spans, &block)
79
- spans.each do |span|
80
- return span if block.call(span)
81
- end
82
- raise StandardError, 'Span with qualifier not found'
83
- end
84
- end
85
- end
@@ -1,20 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- class MockTimer
5
- attr_reader :opts, :block, :running
6
-
7
- def initialize(*args, &blk)
8
- @opts = args.first
9
- @block = blk
10
- @running = false
11
- end
12
-
13
- def shutdown
14
- @running = false
15
- end
16
-
17
- def execute
18
- @running = true
19
- end
20
- end
data/test/test_helper.rb DELETED
@@ -1,69 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- ENV['INSTANA_TEST'] = 'true'
5
-
6
- begin
7
- require 'simplecov'
8
- require 'simplecov_json_formatter'
9
-
10
- SimpleCov.start do
11
- enable_coverage :branch
12
-
13
- add_filter %r{^/test/}
14
-
15
- if ENV['CIRCLE_BUILD_NUM']
16
- command_name "Job #{ENV['CIRCLE_BUILD_NUM']}"
17
- elsif ENV['COVERAGE_PATH']
18
- coverage_dir ENV['COVERAGE_PATH']
19
- end
20
- add_group(
21
- 'In Process Collector',
22
- [%r{lib/instana/(agent|backend|tracing|collectors|open_tracing|snapshot)}, %r{lib/instana/[^/]+\.rb}]
23
- )
24
-
25
- if ENV['APPRAISAL_INITIALIZED']
26
- add_group(
27
- 'Instrumentation',
28
- %r{lib/instana/(activators|frameworks|instrumentation)}
29
- )
30
- else
31
- add_filter %r{lib/instana/(activators|frameworks|instrumentation)}
32
- end
33
-
34
- formatter SimpleCov::Formatter::MultiFormatter.new(
35
- [
36
- SimpleCov::Formatter::HTMLFormatter,
37
- SimpleCov::Formatter::JSONFormatter
38
- ]
39
- )
40
- end
41
- rescue LoadError => _e
42
- nil
43
- end
44
-
45
- require 'bundler/setup'
46
- Bundler.require
47
-
48
- require "minitest/spec"
49
- require "minitest/autorun"
50
- require "minitest/reporters"
51
- require 'fakefs/safe'
52
-
53
- require 'webmock/minitest'
54
- # Webmock: Whitelist local IPs
55
- WebMock.disable_net_connect!(
56
- allow: ->(uri) { %w[localhost 127.0.0.1 172.17.0.1 172.0.12.100].include?(uri.host) && ENV.key?('APPRAISAL_INITIALIZED') }
57
- )
58
-
59
- Dir['test/support/*.rb'].each { |f| load(f) }
60
-
61
- minitest_reporters_to_use = []
62
- if ENV['CIRCLE_BUILD_NUM']
63
- minitest_reporters_to_use.append(Minitest::Reporters::JUnitReporter.new('_junit', false))
64
- elsif ENV['COVERAGE_PATH']
65
- minitest_reporters_to_use.append(Minitest::Reporters::JUnitReporter.new("#{ENV['COVERAGE_PATH']}/_junit", false))
66
- end
67
- minitest_reporters_to_use.append(Minitest::Reporters::SpecReporter.new)
68
- Minitest::Reporters.use!(minitest_reporters_to_use)
69
- Minitest::Test.include(Instana::TestHelpers)
@@ -1,226 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- require 'test_helper'
5
-
6
- class CustomTracingTest < Minitest::Test
7
- def test_custom_tracing
8
- clear_all!
9
-
10
- assert_equal false, ::Instana.tracer.tracing?
11
- # Start tracing
12
- ::Instana.tracer.log_start_or_continue(:custom_trace, {:one => 1})
13
- assert_equal true, ::Instana.tracer.tracing?
14
- ::Instana.tracer.log_info({:info_logged => 1})
15
- # End tracing
16
- ::Instana.tracer.log_end(:custom_trace, {:close_one => 1})
17
- assert_equal false, ::Instana.tracer.tracing?
18
-
19
- spans = ::Instana.processor.queued_spans
20
- assert_equal 1, spans.length
21
-
22
- first_span = spans.first
23
- assert_equal :sdk, first_span[:n]
24
-
25
- assert first_span[:ts].is_a?(Integer)
26
- assert first_span[:ts] > 0
27
- assert first_span[:d].is_a?(Integer)
28
- assert first_span[:d].between?(0, 5)
29
-
30
- assert first_span.key?(:data)
31
- assert first_span[:data].key?(:sdk)
32
- assert first_span[:data][:sdk].key?(:custom)
33
- assert first_span[:data][:sdk][:custom].key?(:tags)
34
- assert_equal :custom_trace, first_span[:data][:sdk][:name]
35
- assert_equal 1, first_span[:data][:sdk][:custom][:tags][:one]
36
-
37
- # Custom tracing root spans should default to entry type
38
- assert_equal 1, first_span[:k]
39
- assert_equal :entry, first_span[:data][:sdk][:type]
40
-
41
- assert first_span.key?(:f)
42
- assert_equal ::Instana.agent.source, first_span[:f]
43
- end
44
-
45
- # automagic (TM) as seen in the docs:
46
- # https://www.ibm.com/docs/en/instana-observability/current?topic=ruby-tracing-sdk#the-instana-ruby-tracing-sdk
47
- def test_custom_tracing_with_nested_automagic
48
- clear_all!
49
- assert_equal false, ::Instana.tracer.tracing?
50
-
51
- kvs = {}
52
- kvs[:on_entry_kv] = 1
53
- kvs[:arguments] = [[1,2,3], "test_arg", :ok]
54
- kvs[:return] = true
55
-
56
- # Start tracing
57
- ::Instana.tracer.log_start_or_continue(:rack, :on_trace_start => 1)
58
- assert_equal true, ::Instana.tracer.tracing?
59
-
60
- # Now the automagic
61
- ::Instana.tracer.trace(:custom_span, kvs) do
62
- answer = 42 * 1
63
- active_span = ::Instana.tracer.current_span
64
- active_span.set_tag(:answer, answer)
65
-
66
- # And now nested automagic
67
- ::Instana.tracer.trace(:custom_span2, kvs) do
68
- was_here = 'stan'
69
- active_span = ::Instana.tracer.current_span
70
- active_span.set_tag(:was_here, was_here)
71
- end
72
- end
73
-
74
- # End tracing
75
- ::Instana.tracer.log_end(:rack, {:on_trace_end => 1})
76
- assert_equal false, ::Instana.tracer.tracing?
77
-
78
- spans = ::Instana.processor.queued_spans
79
- assert_equal 3, spans.length
80
-
81
- second_span = find_first_span_by_name(spans, :custom_span)
82
- third_span = find_first_span_by_name(spans, :custom_span2)
83
-
84
- assert_equal :sdk, second_span[:n]
85
- assert second_span.key?(:data)
86
- assert second_span[:data].key?(:sdk)
87
- assert second_span[:data][:sdk].key?(:custom)
88
- assert second_span[:data][:sdk][:custom].key?(:tags)
89
- assert :custom_span, second_span[:data][:sdk][:name]
90
- assert :unknown, second_span[:data][:sdk][:type]
91
- assert [[1, 2, 3], "test_arg", :ok], second_span[:data][:sdk][:arguments]
92
- assert true, second_span[:data][:sdk][:return]
93
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_entry_kv]
94
- assert_equal 42, second_span[:data][:sdk][:custom][:tags][:answer]
95
-
96
- assert_equal :sdk, third_span[:n]
97
- assert third_span.key?(:data)
98
- assert third_span[:data].key?(:sdk)
99
- assert third_span[:data][:sdk].key?(:custom)
100
- assert third_span[:data][:sdk][:custom].key?(:tags)
101
- assert :custom_span, third_span[:data][:sdk][:name]
102
- assert :unknown, third_span[:data][:sdk][:type]
103
- assert [[1, 2, 3], "test_arg", :ok], third_span[:data][:sdk][:arguments]
104
- assert true, third_span[:data][:sdk][:return]
105
- assert_equal 1, third_span[:data][:sdk][:custom][:tags][:on_entry_kv]
106
- assert_equal 'stan', third_span[:data][:sdk][:custom][:tags][:was_here]
107
- end
108
-
109
- def test_custom_tracing_with_args
110
- clear_all!
111
- assert_equal false, ::Instana.tracer.tracing?
112
-
113
- # Start tracing
114
- ::Instana.tracer.log_start_or_continue(:rack, :on_trace_start => 1)
115
- assert_equal true, ::Instana.tracer.tracing?
116
-
117
- kvs = {}
118
- kvs[:on_entry_kv] = 1
119
- kvs[:arguments] = [[1,2,3], "test_arg", :ok]
120
- kvs[:return] = true
121
-
122
- ::Instana.tracer.log_entry(:custom_span, kvs)
123
- ::Instana.tracer.log_info({:on_info_kv => 1})
124
- ::Instana.tracer.log_exit(:custom_span, :on_exit_kv => 1)
125
-
126
- # End tracing
127
- ::Instana.tracer.log_end(:rack, {:on_trace_end => 1})
128
- assert_equal false, ::Instana.tracer.tracing?
129
-
130
- spans = ::Instana.processor.queued_spans
131
- assert_equal 2, spans.length
132
-
133
- first_span = find_first_span_by_name(spans, :rack)
134
- second_span = find_first_span_by_name(spans, :custom_span)
135
-
136
- assert first_span[:ts].is_a?(Integer)
137
- assert first_span[:ts] > 0
138
- assert first_span[:d].is_a?(Integer)
139
- assert first_span[:d].between?(0, 5)
140
-
141
- assert_equal :rack, first_span[:n]
142
- assert first_span.key?(:data)
143
- assert first_span[:data].key?(:on_trace_start)
144
- assert_equal 1, first_span[:data][:on_trace_start]
145
- assert first_span[:data].key?(:on_trace_end)
146
- assert_equal 1, first_span[:data][:on_trace_end]
147
-
148
- assert_equal :sdk, second_span[:n]
149
- assert second_span.key?(:data)
150
- assert second_span[:data].key?(:sdk)
151
- assert second_span[:data][:sdk].key?(:custom)
152
- assert second_span[:data][:sdk][:custom].key?(:tags)
153
- assert :custom_span, second_span[:data][:sdk][:name]
154
- assert :unknown, second_span[:data][:sdk][:type]
155
- assert [[1, 2, 3], "test_arg", :ok], second_span[:data][:sdk][:arguments]
156
- assert true, second_span[:data][:sdk][:return]
157
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_entry_kv]
158
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_info_kv]
159
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_exit_kv]
160
- end
161
-
162
- def test_custom_tracing_with_error
163
- clear_all!
164
- assert_equal false, ::Instana.tracer.tracing?
165
-
166
- # Start tracing
167
- ::Instana.tracer.log_start_or_continue(:rack, :on_trace_start => 1)
168
- assert_equal true, ::Instana.tracer.tracing?
169
-
170
- begin
171
- kvs = {}
172
- kvs[:on_entry_kv] = 1
173
- kvs[:arguments] = [[1,2,3], "test_arg", :ok]
174
- kvs[:return] = true
175
-
176
- ::Instana.tracer.log_entry(:custom_span, kvs)
177
- raise "custom tracing error. This is only a test"
178
- rescue => e
179
- ::Instana.tracer.log_error(e)
180
- ensure
181
- ::Instana.tracer.log_exit(:custom_span, :on_exit_kv => 1)
182
- end
183
- ::Instana.tracer.log_end(:rack, {:on_trace_end => 1})
184
- assert_equal false, ::Instana.tracer.tracing?
185
-
186
- spans = ::Instana.processor.queued_spans
187
- assert_equal 2, spans.length
188
-
189
- first_span = find_first_span_by_name(spans, :rack)
190
- second_span = find_first_span_by_name(spans, :custom_span)
191
-
192
- assert first_span[:ts].is_a?(Integer)
193
- assert first_span[:ts] > 0
194
- assert first_span[:d].is_a?(Integer)
195
- assert first_span[:d].between?(0, 5)
196
-
197
- assert_equal :rack, first_span[:n]
198
- assert first_span.key?(:data)
199
- assert first_span[:data].key?(:on_trace_start)
200
- assert_equal 1, first_span[:data][:on_trace_start]
201
- assert first_span[:data].key?(:on_trace_end)
202
- assert_equal 1, first_span[:data][:on_trace_end]
203
-
204
- assert second_span[:ts].is_a?(Integer)
205
- assert second_span[:ts] > 0
206
- assert second_span[:d].is_a?(Integer)
207
- assert second_span[:d].between?(0, 5)
208
-
209
- assert_equal :sdk, second_span[:n]
210
- assert second_span.key?(:data)
211
- assert second_span[:data].key?(:sdk)
212
- assert second_span[:data][:sdk].key?(:custom)
213
- assert second_span[:data][:sdk][:custom].key?(:tags)
214
- assert :custom_span, second_span[:data][:sdk][:name]
215
- assert :unknown, second_span[:data][:sdk][:type]
216
- assert [[1, 2, 3], "test_arg", :ok], second_span[:data][:sdk][:arguments]
217
- assert true, second_span[:data][:sdk][:return]
218
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_entry_kv]
219
- assert !second_span[:data][:sdk][:custom][:tags].key?(:on_info_kv)
220
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_exit_kv]
221
-
222
- # Check the error
223
- assert_equal true, second_span[:error]
224
- assert_equal 1, second_span[:ec]
225
- end
226
- end
@@ -1,80 +0,0 @@
1
-
2
-
3
- # (c) Copyright IBM Corp. 2021
4
- # (c) Copyright Instana Inc. 2016
5
-
6
- require 'test_helper'
7
-
8
- class TracerIDMgmtTest < Minitest::Test
9
- def test_id_to_header_conversion
10
- # Test passing a standard Integer ID
11
- original_id = ::Instana::Util.generate_id
12
- converted_id = Instana::Util.id_to_header(original_id)
13
-
14
- # Assert that it is a string and there are no non-hex characters
15
- assert converted_id.is_a?(String)
16
- assert !converted_id[/\H/]
17
-
18
- # Test passing a standard Integer ID as a String
19
- original_id = ::Instana::Util.generate_id
20
- converted_id = Instana::Util.id_to_header(original_id)
21
-
22
- # Assert that it is a string and there are no non-hex characters
23
- assert converted_id.is_a?(String)
24
- assert !converted_id[/\H/]
25
- end
26
-
27
- def test_id_to_header_conversion_with_bogus_id
28
- # Test passing an empty String
29
- converted_id = Instana::Util.id_to_header('')
30
-
31
- # Assert that it is a string and there are no non-hex characters
32
- assert converted_id.is_a?(String)
33
- assert converted_id == ''
34
-
35
- # Test passing a nil
36
- converted_id = Instana::Util.id_to_header(nil)
37
-
38
- # Assert that it is a string and there are no non-hex characters
39
- assert converted_id.is_a?(String)
40
- assert converted_id == ''
41
-
42
- # Test passing an Array
43
- converted_id = Instana::Util.id_to_header([])
44
-
45
- # Assert that it is a string and there are no non-hex characters
46
- assert converted_id.is_a?(String)
47
- assert converted_id == ''
48
- end
49
-
50
- def test_header_to_id_conversion
51
- # Get a hex string to test against & convert
52
- header_id = Instana::Util.id_to_header(::Instana::Util.generate_id)
53
- converted_id = Instana::Util.header_to_id(header_id)
54
-
55
- # Assert that it is an Integer
56
- assert converted_id.is_a?(String)
57
- end
58
-
59
- def test_header_to_id_conversion_with_bogus_header
60
- # Bogus nil arg
61
- bogus_result = Instana::Util.header_to_id(nil)
62
- assert_equal '', bogus_result
63
-
64
- # Bogus Integer arg
65
- bogus_result = Instana::Util.header_to_id(1234)
66
- assert_equal '', bogus_result
67
-
68
- # Bogus Array arg
69
- bogus_result = Instana::Util.header_to_id([1234])
70
- assert_equal '', bogus_result
71
-
72
- # Invalid characters/length
73
- bogus_result = Instana::Util.header_to_id('qwerty')
74
- assert_equal '', bogus_result
75
- end
76
-
77
- def test_long_id_trim
78
- assert_equal 16, Instana::Util.id_to_header(::Instana::Util.generate_id(2)).length
79
- end
80
- end
@@ -1,39 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class InstrumentedLoggerTest < Minitest::Test
7
- def setup
8
- clear_all!
9
- end
10
-
11
- def test_log_warn_error
12
- subject = Instana::InstrumentedLogger.new('/dev/null')
13
-
14
- Instana::Tracer.start_or_continue_trace(:test_logging) do
15
- subject.warn('warn')
16
- subject.debug('test')
17
- subject.error('error')
18
- end
19
-
20
- spans = ::Instana.processor.queued_spans
21
-
22
- warn_span, error_span, = *spans
23
-
24
- assert_equal :log, warn_span[:n]
25
- assert_equal 'warn', warn_span[:data][:log][:message]
26
- assert_equal 'Warn', warn_span[:data][:log][:level]
27
-
28
- assert_equal :log, error_span[:n]
29
- assert_equal 'error', error_span[:data][:log][:message]
30
- assert_equal 'Error', error_span[:data][:log][:level]
31
- end
32
-
33
- def test_no_trace
34
- subject = Instana::InstrumentedLogger.new('/dev/null')
35
- subject.warn('warn')
36
-
37
- assert_equal [], ::Instana.processor.queued_spans
38
- end
39
- end