instana 2.0.0 → 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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/setup.rb +1 -0
  3. data/lib/instana/span_filtering/condition.rb +134 -0
  4. data/lib/instana/span_filtering/configuration.rb +262 -0
  5. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  6. data/lib/instana/span_filtering.rb +62 -0
  7. data/lib/instana/trace/span.rb +5 -3
  8. data/lib/instana/version.rb +1 -1
  9. metadata +7 -258
  10. data/.circleci/config.yml +0 -361
  11. data/.codeclimate.yml +0 -23
  12. data/.editorconfig +0 -10
  13. data/.fasterer.yml +0 -23
  14. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  15. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  16. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  17. data/.github/workflows/release-notification-on-slack.yml +0 -34
  18. data/.gitignore +0 -19
  19. data/.rubocop.yml +0 -34
  20. data/.rubocop_todo.yml +0 -1140
  21. data/.tekton/.currency/docs/report.md +0 -20
  22. data/.tekton/.currency/resources/requirements.txt +0 -4
  23. data/.tekton/.currency/resources/table.json +0 -100
  24. data/.tekton/.currency/scripts/generate_report.py +0 -308
  25. data/.tekton/README.md +0 -278
  26. data/.tekton/github-interceptor-secret.yaml +0 -8
  27. data/.tekton/github-pr-eventlistener.yaml +0 -104
  28. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  29. data/.tekton/github-set-status-task.yaml +0 -43
  30. data/.tekton/github-webhook-ingress.yaml +0 -20
  31. data/.tekton/pipeline.yaml +0 -484
  32. data/.tekton/pipelinerun.yaml +0 -21
  33. data/.tekton/prepuller-restart-service-account.yaml +0 -31
  34. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
  35. data/.tekton/ruby-tracer-prepuller.yaml +0 -88
  36. data/.tekton/run_unittests.sh +0 -87
  37. data/.tekton/scheduled-eventlistener.yaml +0 -108
  38. data/.tekton/task.yaml +0 -453
  39. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  40. data/Appraisals +0 -124
  41. data/CONTRIBUTING.md +0 -86
  42. data/Gemfile +0 -22
  43. data/LICENSE +0 -22
  44. data/MAINTAINERS.md +0 -3
  45. data/Rakefile +0 -49
  46. data/bin/announce_release_on_slack.py +0 -103
  47. data/docker-compose.yml +0 -20
  48. data/download.sh +0 -85
  49. data/examples/otel.rb +0 -98
  50. data/examples/tracing.rb +0 -85
  51. data/extras/license_header.rb +0 -44
  52. data/gemfiles/.bundle/config +0 -2
  53. data/gemfiles/aws_30.gemfile +0 -21
  54. data/gemfiles/aws_60.gemfile +0 -16
  55. data/gemfiles/cuba_30.gemfile +0 -16
  56. data/gemfiles/cuba_40.gemfile +0 -13
  57. data/gemfiles/dalli_20.gemfile +0 -15
  58. data/gemfiles/dalli_30.gemfile +0 -12
  59. data/gemfiles/dalli_32.gemfile +0 -12
  60. data/gemfiles/excon_0100.gemfile +0 -14
  61. data/gemfiles/excon_021.gemfile +0 -17
  62. data/gemfiles/excon_079.gemfile +0 -17
  63. data/gemfiles/excon_100.gemfile +0 -14
  64. data/gemfiles/graphql_10.gemfile +0 -16
  65. data/gemfiles/graphql_20.gemfile +0 -15
  66. data/gemfiles/grpc_10.gemfile +0 -15
  67. data/gemfiles/mongo_216.gemfile +0 -15
  68. data/gemfiles/mongo_219.gemfile +0 -12
  69. data/gemfiles/net_http_01.gemfile +0 -17
  70. data/gemfiles/rack_16.gemfile +0 -15
  71. data/gemfiles/rack_20.gemfile +0 -15
  72. data/gemfiles/rack_30.gemfile +0 -13
  73. data/gemfiles/rails_42.gemfile +0 -18
  74. data/gemfiles/rails_50.gemfile +0 -19
  75. data/gemfiles/rails_52.gemfile +0 -19
  76. data/gemfiles/rails_60.gemfile +0 -19
  77. data/gemfiles/rails_61.gemfile +0 -21
  78. data/gemfiles/rails_70.gemfile +0 -18
  79. data/gemfiles/rails_71.gemfile +0 -17
  80. data/gemfiles/rails_80.gemfile +0 -17
  81. data/gemfiles/redis_40.gemfile +0 -15
  82. data/gemfiles/redis_50.gemfile +0 -13
  83. data/gemfiles/redis_51.gemfile +0 -13
  84. data/gemfiles/resque_122.gemfile +0 -16
  85. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  86. data/gemfiles/resque_20.gemfile +0 -16
  87. data/gemfiles/rest_client_16.gemfile +0 -17
  88. data/gemfiles/rest_client_20.gemfile +0 -17
  89. data/gemfiles/roda_20.gemfile +0 -16
  90. data/gemfiles/roda_30.gemfile +0 -16
  91. data/gemfiles/rubocop_162.gemfile +0 -6
  92. data/gemfiles/sequel_56.gemfile +0 -16
  93. data/gemfiles/sequel_57.gemfile +0 -16
  94. data/gemfiles/sequel_58.gemfile +0 -16
  95. data/gemfiles/shoryuken_50.gemfile +0 -16
  96. data/gemfiles/shoryuken_60.gemfile +0 -13
  97. data/gemfiles/sidekiq_42.gemfile +0 -15
  98. data/gemfiles/sidekiq_50.gemfile +0 -15
  99. data/gemfiles/sidekiq_60.gemfile +0 -12
  100. data/gemfiles/sidekiq_65.gemfile +0 -12
  101. data/gemfiles/sidekiq_70.gemfile +0 -12
  102. data/gemfiles/sinatra_14.gemfile +0 -15
  103. data/gemfiles/sinatra_22.gemfile +0 -12
  104. data/gemfiles/sinatra_30.gemfile +0 -12
  105. data/gemfiles/sinatra_40.gemfile +0 -12
  106. data/instana.gemspec +0 -53
  107. data/log/.keep +0 -0
  108. data/sonar-project.properties +0 -9
  109. data/test/activator_test.rb +0 -50
  110. data/test/backend/agent_test.rb +0 -80
  111. data/test/backend/gc_snapshot_test.rb +0 -11
  112. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  113. data/test/backend/host_agent_lookup_test.rb +0 -78
  114. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  115. data/test/backend/host_agent_test.rb +0 -89
  116. data/test/backend/process_info_test.rb +0 -83
  117. data/test/backend/request_client_test.rb +0 -39
  118. data/test/backend/serverless_agent_test.rb +0 -83
  119. data/test/benchmarks/bench_id_generation.rb +0 -15
  120. data/test/benchmarks/bench_opentracing.rb +0 -16
  121. data/test/config_test.rb +0 -34
  122. data/test/frameworks/cuba_test.rb +0 -61
  123. data/test/frameworks/roda_test.rb +0 -60
  124. data/test/frameworks/sinatra_test.rb +0 -71
  125. data/test/instana_test.rb +0 -37
  126. data/test/instrumentation/aws_test.rb +0 -241
  127. data/test/instrumentation/dalli_test.rb +0 -325
  128. data/test/instrumentation/excon_test.rb +0 -204
  129. data/test/instrumentation/graphql_test.rb +0 -289
  130. data/test/instrumentation/grpc_test.rb +0 -420
  131. data/test/instrumentation/mongo_test.rb +0 -68
  132. data/test/instrumentation/net_http_test.rb +0 -220
  133. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  134. data/test/instrumentation/rack_test.rb +0 -415
  135. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  136. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  137. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  138. data/test/instrumentation/rails_action_view_test.rb +0 -154
  139. data/test/instrumentation/rails_active_job_test.rb +0 -65
  140. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
  141. data/test/instrumentation/rails_active_record_test.rb +0 -116
  142. data/test/instrumentation/redis_test.rb +0 -152
  143. data/test/instrumentation/resque_test.rb +0 -188
  144. data/test/instrumentation/rest_client_test.rb +0 -106
  145. data/test/instrumentation/sequel_test.rb +0 -111
  146. data/test/instrumentation/shoryuken_test.rb +0 -47
  147. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  148. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  149. data/test/secrets_test.rb +0 -112
  150. data/test/serverless_test.rb +0 -369
  151. data/test/snapshot/deltable_test.rb +0 -17
  152. data/test/snapshot/docker_container_test.rb +0 -82
  153. data/test/snapshot/fargate_container_test.rb +0 -82
  154. data/test/snapshot/fargate_process_test.rb +0 -35
  155. data/test/snapshot/fargate_task_test.rb +0 -49
  156. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  157. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  158. data/test/snapshot/lambda_function_test.rb +0 -37
  159. data/test/snapshot/ruby_process_test.rb +0 -32
  160. data/test/support/apps/active_record/active_record.rb +0 -24
  161. data/test/support/apps/grpc/boot.rb +0 -23
  162. data/test/support/apps/grpc/grpc_server.rb +0 -84
  163. data/test/support/apps/http_endpoint/boot.rb +0 -28
  164. data/test/support/apps/rails/boot.rb +0 -219
  165. data/test/support/apps/rails/models/block.rb +0 -21
  166. data/test/support/apps/rails/models/block6.rb +0 -21
  167. data/test/support/apps/resque/boot.rb +0 -5
  168. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  169. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  170. data/test/support/apps/sidekiq/boot.rb +0 -25
  171. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  172. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  173. data/test/support/apps/sidekiq/worker.rb +0 -37
  174. data/test/support/helpers.rb +0 -85
  175. data/test/support/mock_timer.rb +0 -20
  176. data/test/test_helper.rb +0 -69
  177. data/test/trace/custom_test.rb +0 -233
  178. data/test/trace/id_management_test.rb +0 -78
  179. data/test/trace/instrumented_logger_test.rb +0 -39
  180. data/test/trace/processor_test.rb +0 -58
  181. data/test/trace/span_context_test.rb +0 -22
  182. data/test/trace/span_test.rb +0 -179
  183. data/test/trace/tracer_async_test.rb +0 -243
  184. data/test/trace/tracer_provider_test.rb +0 -148
  185. data/test/trace/tracer_test.rb +0 -363
  186. 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,233 +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
- span = ::Instana.tracer.start_span(:custom_trace, attributes: {:one => 1})
13
- assert_equal true, ::Instana.tracer.tracing?
14
- span.add_attributes({:info_logged => 1})
15
- # End tracing
16
- span.add_attributes({:close_one => 1})
17
- span.finish
18
- assert_equal false, ::Instana.tracer.tracing?
19
-
20
- spans = ::Instana.processor.queued_spans
21
- assert_equal 1, spans.length
22
-
23
- first_span = spans.first
24
- assert_equal :sdk, first_span[:n]
25
-
26
- assert first_span[:ts].is_a?(Integer)
27
- assert first_span[:ts].positive?
28
- assert first_span[:d].is_a?(Integer)
29
- assert first_span[:d].between?(0, 5)
30
-
31
- assert first_span.key?(:data)
32
- assert first_span[:data].key?(:sdk)
33
- assert first_span[:data][:sdk].key?(:custom)
34
- assert first_span[:data][:sdk][:custom].key?(:tags)
35
- assert_equal :custom_trace, first_span[:data][:sdk][:name]
36
- assert_equal 1, first_span[:data][:sdk][:custom][:tags][:one]
37
-
38
- # Custom tracing root spans should default to entry type
39
- assert_equal 1, first_span[:k]
40
- assert_equal :entry, first_span[:data][:sdk][:type]
41
-
42
- assert first_span.key?(:f)
43
- assert_equal ::Instana.agent.source, first_span[:f]
44
- end
45
-
46
- # automagic (TM) as seen in the docs:
47
- # https://www.ibm.com/docs/en/instana-observability/current?topic=ruby-tracing-sdk#the-instana-ruby-tracing-sdk
48
- def test_custom_tracing_with_nested_automagic
49
- clear_all!
50
- assert_equal false, ::Instana.tracer.tracing?
51
-
52
- kvs = {}
53
- kvs[:on_entry_kv] = 1
54
- kvs[:arguments] = [[1, 2, 3], "test_arg", :ok]
55
- kvs[:return] = true
56
-
57
- # Start tracing
58
- span = ::Instana.tracer.start_span(:rack, attributes: {:on_trace_start => 1})
59
- assert_equal true, ::Instana.tracer.tracing?
60
-
61
- # Now the automagic
62
- ::Instana.tracer.in_span(:custom_span, attributes: kvs) do
63
- answer = 42 * 1
64
- active_span = ::Instana.tracer.current_span
65
- active_span.set_tag(:answer, answer)
66
-
67
- # And now nested automagic
68
- ::Instana.tracer.in_span(:custom_span2, attributes: kvs) do
69
- was_here = 'stan'
70
- active_span = ::Instana.tracer.current_span
71
- active_span.set_tag(:was_here, was_here)
72
- end
73
- end
74
-
75
- # End tracing
76
- span.add_attributes({:on_trace_end => 1})
77
- span.finish
78
- assert_equal false, ::Instana.tracer.tracing?
79
-
80
- spans = ::Instana.processor.queued_spans
81
- assert_equal 3, spans.length
82
-
83
- second_span = find_first_span_by_name(spans, :custom_span)
84
- third_span = find_first_span_by_name(spans, :custom_span2)
85
-
86
- assert_equal :sdk, second_span[:n]
87
- assert second_span.key?(:data)
88
- assert second_span[:data].key?(:sdk)
89
- assert second_span[:data][:sdk].key?(:custom)
90
- assert second_span[:data][:sdk][:custom].key?(:tags)
91
- assert :custom_span, second_span[:data][:sdk][:name]
92
- assert :unknown, second_span[:data][:sdk][:type]
93
- assert [[1, 2, 3], "test_arg", :ok], second_span[:data][:sdk][:arguments]
94
- assert true, second_span[:data][:sdk][:return]
95
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_entry_kv]
96
- assert_equal 42, second_span[:data][:sdk][:custom][:tags][:answer]
97
-
98
- assert_equal :sdk, third_span[:n]
99
- assert third_span.key?(:data)
100
- assert third_span[:data].key?(:sdk)
101
- assert third_span[:data][:sdk].key?(:custom)
102
- assert third_span[:data][:sdk][:custom].key?(:tags)
103
- assert :custom_span, third_span[:data][:sdk][:name]
104
- assert :unknown, third_span[:data][:sdk][:type]
105
- assert [[1, 2, 3], "test_arg", :ok], third_span[:data][:sdk][:arguments]
106
- assert true, third_span[:data][:sdk][:return]
107
- assert_equal 1, third_span[:data][:sdk][:custom][:tags][:on_entry_kv]
108
- assert_equal 'stan', third_span[:data][:sdk][:custom][:tags][:was_here]
109
- end
110
-
111
- def test_custom_tracing_with_args
112
- clear_all!
113
- assert_equal false, ::Instana.tracer.tracing?
114
-
115
- # Start tracing
116
- span1 = ::Instana.tracer.start_span(:rack, attributes: {:on_trace_start => 1})
117
- assert_equal true, ::Instana.tracer.tracing?
118
-
119
- kvs = {}
120
- kvs[:on_entry_kv] = 1
121
- kvs[:arguments] = [[1, 2, 3], "test_arg", :ok]
122
- kvs[:return] = true
123
-
124
- span2 = ::Instana.tracer.start_span(:custom_span, attributes: kvs)
125
- span2.set_tags({:on_info_kv => 1})
126
- span2.set_tags({:on_exit_kv => 1})
127
- span2.finish
128
-
129
- # End tracing
130
- span1.set_tags({:on_trace_end => 1})
131
- span1.finish
132
-
133
- assert_equal false, ::Instana.tracer.tracing?
134
-
135
- spans = ::Instana.processor.queued_spans
136
- assert_equal 2, spans.length
137
-
138
- first_span = find_first_span_by_name(spans, :rack)
139
- second_span = find_first_span_by_name(spans, :custom_span)
140
-
141
- assert first_span[:ts].is_a?(Integer)
142
- assert first_span[:ts].positive?
143
- assert first_span[:d].is_a?(Integer)
144
- assert first_span[:d].between?(0, 5)
145
-
146
- assert_equal :rack, first_span[:n]
147
- assert first_span.key?(:data)
148
- assert first_span[:data].key?(:on_trace_start)
149
- assert_equal 1, first_span[:data][:on_trace_start]
150
- assert first_span[:data].key?(:on_trace_end)
151
- assert_equal 1, first_span[:data][:on_trace_end]
152
-
153
- assert_equal :sdk, second_span[:n]
154
- assert second_span.key?(:data)
155
- assert second_span[:data].key?(:sdk)
156
- assert second_span[:data][:sdk].key?(:custom)
157
- assert second_span[:data][:sdk][:custom].key?(:tags)
158
- assert :custom_span, second_span[:data][:sdk][:name]
159
- assert :unknown, second_span[:data][:sdk][:type]
160
- assert [[1, 2, 3], "test_arg", :ok], second_span[:data][:sdk][:arguments]
161
- assert true, second_span[:data][:sdk][:return]
162
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_entry_kv]
163
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_info_kv]
164
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_exit_kv]
165
- end
166
-
167
- def test_custom_tracing_with_error # rubocop:disable Metrics/MethodLength
168
- clear_all!
169
- assert_equal false, ::Instana.tracer.tracing?
170
-
171
- # Start tracing
172
- span1 = ::Instana.tracer.start_span(:rack, attributes: {:on_trace_start => 1})
173
- assert_equal true, ::Instana.tracer.tracing?
174
-
175
- begin
176
- kvs = {}
177
- kvs[:on_entry_kv] = 1
178
- kvs[:arguments] = [[1, 2, 3], "test_arg", :ok]
179
- kvs[:return] = true
180
-
181
- span2 = ::Instana.tracer.start_span(:custom_span, attributes: kvs)
182
- raise "custom tracing error. This is only a test"
183
- rescue => e
184
- span2.record_exception(e)
185
- ensure
186
- span2.set_tags(:on_exit_kv => 1)
187
- span2.finish
188
- end
189
- span1.set_tags(:on_trace_end => 1)
190
- span1.finish
191
- assert_equal false, ::Instana.tracer.tracing?
192
-
193
- spans = ::Instana.processor.queued_spans
194
- assert_equal 2, spans.length
195
-
196
- first_span = find_first_span_by_name(spans, :rack)
197
- second_span = find_first_span_by_name(spans, :custom_span)
198
-
199
- assert first_span[:ts].is_a?(Integer)
200
- assert first_span[:ts].positive?
201
- assert first_span[:d].is_a?(Integer)
202
- assert first_span[:d].between?(0, 5)
203
-
204
- assert_equal :rack, first_span[:n]
205
- assert first_span.key?(:data)
206
- assert first_span[:data].key?(:on_trace_start)
207
- assert_equal 1, first_span[:data][:on_trace_start]
208
- assert first_span[:data].key?(:on_trace_end)
209
- assert_equal 1, first_span[:data][:on_trace_end]
210
-
211
- assert second_span[:ts].is_a?(Integer)
212
- assert second_span[:ts].positive?
213
- assert second_span[:d].is_a?(Integer)
214
- assert second_span[:d].between?(0, 5)
215
-
216
- assert_equal :sdk, second_span[:n]
217
- assert second_span.key?(:data)
218
- assert second_span[:data].key?(:sdk)
219
- assert second_span[:data][:sdk].key?(:custom)
220
- assert second_span[:data][:sdk][:custom].key?(:tags)
221
- assert :custom_span, second_span[:data][:sdk][:name]
222
- assert :unknown, second_span[:data][:sdk][:type]
223
- assert [[1, 2, 3], "test_arg", :ok], second_span[:data][:sdk][:arguments]
224
- assert true, second_span[:data][:sdk][:return]
225
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_entry_kv]
226
- assert !second_span[:data][:sdk][:custom][:tags].key?(:on_info_kv)
227
- assert_equal 1, second_span[:data][:sdk][:custom][:tags][:on_exit_kv]
228
-
229
- # Check the error
230
- assert_equal true, second_span[:error]
231
- assert_equal 1, second_span[:ec]
232
- end
233
- end
@@ -1,78 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2016
3
-
4
- require 'test_helper'
5
-
6
- class TracerIDMgmtTest < Minitest::Test
7
- def test_id_to_header_conversion
8
- # Test passing a standard Integer ID
9
- original_id = ::Instana::Util.generate_id
10
- converted_id = Instana::Util.id_to_header(original_id)
11
-
12
- # Assert that it is a string and there are no non-hex characters
13
- assert converted_id.is_a?(String)
14
- assert !converted_id[/\H/]
15
-
16
- # Test passing a standard Integer ID as a String
17
- original_id = ::Instana::Util.generate_id
18
- converted_id = Instana::Util.id_to_header(original_id)
19
-
20
- # Assert that it is a string and there are no non-hex characters
21
- assert converted_id.is_a?(String)
22
- assert !converted_id[/\H/]
23
- end
24
-
25
- def test_id_to_header_conversion_with_bogus_id
26
- # Test passing an empty String
27
- converted_id = Instana::Util.id_to_header('')
28
-
29
- # Assert that it is a string and there are no non-hex characters
30
- assert converted_id.is_a?(String)
31
- assert converted_id == ''
32
-
33
- # Test passing a nil
34
- converted_id = Instana::Util.id_to_header(nil)
35
-
36
- # Assert that it is a string and there are no non-hex characters
37
- assert converted_id.is_a?(String)
38
- assert converted_id == ''
39
-
40
- # Test passing an Array
41
- converted_id = Instana::Util.id_to_header([])
42
-
43
- # Assert that it is a string and there are no non-hex characters
44
- assert converted_id.is_a?(String)
45
- assert converted_id == ''
46
- end
47
-
48
- def test_header_to_id_conversion
49
- # Get a hex string to test against & convert
50
- header_id = Instana::Util.id_to_header(::Instana::Util.generate_id)
51
- converted_id = Instana::Util.header_to_id(header_id)
52
-
53
- # Assert that it is an Integer
54
- assert converted_id.is_a?(String)
55
- end
56
-
57
- def test_header_to_id_conversion_with_bogus_header
58
- # Bogus nil arg
59
- bogus_result = Instana::Util.header_to_id(nil)
60
- assert_equal '', bogus_result
61
-
62
- # Bogus Integer arg
63
- bogus_result = Instana::Util.header_to_id(1234)
64
- assert_equal '', bogus_result
65
-
66
- # Bogus Array arg
67
- bogus_result = Instana::Util.header_to_id([1234])
68
- assert_equal '', bogus_result
69
-
70
- # Invalid characters/length
71
- bogus_result = Instana::Util.header_to_id('qwerty')
72
- assert_equal '', bogus_result
73
- end
74
-
75
- def test_long_id_trim
76
- assert_equal 16, Instana::Util.id_to_header(::Instana::Util.generate_id(2)).length
77
- end
78
- 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.in_span(: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
@@ -1,58 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class ProcessorTest < Minitest::Test
7
- def test_queued_spans_empty
8
- subject = Instana::Processor.new
9
- assert_equal [], subject.queued_spans
10
- end
11
-
12
- def test_queued_spans_valid_level
13
- clear_all!
14
- subject = Instana::Processor.new
15
-
16
- span_context = Instana::SpanContext.new(trace_id: '9', span_id: '8', level: 0)
17
- span = Instana::Span.new(:rack, span_context)
18
- span2 = Instana::Span.new(:"net-http")
19
-
20
- subject.on_finish(span)
21
- subject.on_finish(span2)
22
-
23
- spans = subject.queued_spans
24
- valid_span, = spans
25
-
26
- assert_equal 1, spans.length
27
- assert_equal :"net-http", valid_span[:n]
28
- end
29
-
30
- def test_queued_spans_invalid_type
31
- subject = Instana::Processor.new
32
- subject.on_finish(false)
33
-
34
- assert_equal [], subject.queued_spans
35
- end
36
-
37
- def test_send
38
- ENV['INSTANA_TEST'] = nil
39
-
40
- subject = Instana::Processor.new
41
- span = Instana::Span.new(:rack)
42
- subject.on_finish(span)
43
-
44
- was_invoked = false
45
-
46
- subject.send do |spans|
47
- was_invoked = true
48
- rack_span, = spans
49
-
50
- assert_equal 1, spans.length
51
- assert_equal :rack, rack_span[:n]
52
- end
53
-
54
- assert was_invoked
55
- ensure
56
- ENV['INSTANA_TEST'] = 'true'
57
- end
58
- end
@@ -1,22 +0,0 @@
1
- # (c) Copyright IBM Corp. 2021
2
- # (c) Copyright Instana Inc. 2021
3
-
4
- require 'test_helper'
5
-
6
- class SpanContextTest < Minitest::Test
7
- def test_to_hash
8
- subject = Instana::SpanContext.new(trace_id: 'trace', span_id: 'span')
9
- assert_equal({trace_id: 'trace', span_id: 'span'}, subject.to_hash)
10
- end
11
-
12
- def test_invalid
13
- subject = Instana::SpanContext.new(trace_id: nil, span_id: nil)
14
- refute subject.valid?
15
- end
16
-
17
- def test_flags_level_zero
18
- subject = Instana::SpanContext.new(trace_id: 'trace', span_id: 'span', level: 0, baggage: {external_state: 'cn=test'})
19
- assert_equal '00-000000000000000000000000000trace-000000000000span-00', subject.trace_parent_header
20
- assert_equal 'cn=test', subject.trace_state_header
21
- end
22
- end