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.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/instana/base.rb +4 -2
- data/lib/instana/instrumentation/action_cable.rb +8 -4
- data/lib/instana/instrumentation/action_controller.rb +2 -4
- data/lib/instana/instrumentation/action_mailer.rb +1 -1
- data/lib/instana/instrumentation/action_view.rb +4 -4
- data/lib/instana/instrumentation/active_job.rb +20 -5
- data/lib/instana/instrumentation/active_record.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_dynamodb.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_lambda.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_s3.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sns.rb +1 -1
- data/lib/instana/instrumentation/aws_sdk_sqs.rb +1 -1
- data/lib/instana/instrumentation/dalli.rb +1 -1
- data/lib/instana/instrumentation/excon.rb +2 -2
- data/lib/instana/instrumentation/graphql.rb +3 -3
- data/lib/instana/instrumentation/grpc.rb +14 -13
- data/lib/instana/instrumentation/mongo.rb +3 -3
- data/lib/instana/instrumentation/net-http.rb +5 -4
- data/lib/instana/instrumentation/rack.rb +36 -4
- data/lib/instana/instrumentation/redis.rb +1 -1
- data/lib/instana/instrumentation/resque.rb +10 -8
- data/lib/instana/instrumentation/rest-client.rb +4 -4
- data/lib/instana/instrumentation/sequel.rb +3 -3
- data/lib/instana/instrumentation/shoryuken.rb +4 -1
- data/lib/instana/instrumentation/sidekiq-client.rb +21 -19
- data/lib/instana/instrumentation/sidekiq-worker.rb +22 -21
- data/lib/instana/instrumented_logger.rb +1 -1
- data/lib/instana/samplers/result.rb +32 -0
- data/lib/instana/samplers/samplers.rb +76 -0
- data/lib/instana/serverless.rb +4 -2
- data/lib/instana/setup.rb +5 -5
- data/lib/instana/span_filtering/condition.rb +134 -0
- data/lib/instana/span_filtering/configuration.rb +262 -0
- data/lib/instana/span_filtering/filter_rule.rb +31 -0
- data/lib/instana/span_filtering.rb +62 -0
- data/lib/instana/trace/export.rb +36 -0
- data/lib/instana/{tracing → trace}/processor.rb +19 -15
- data/lib/instana/trace/span.rb +534 -0
- data/lib/instana/{tracing → trace}/span_context.rb +17 -8
- data/lib/instana/trace/span_kind.rb +51 -0
- data/lib/instana/trace/span_limits.rb +63 -0
- data/lib/instana/{tracer.rb → trace/tracer.rb} +106 -54
- data/lib/instana/trace/tracer_provider.rb +198 -0
- data/lib/instana/trace.rb +74 -0
- data/lib/instana/util.rb +11 -0
- data/lib/instana/version.rb +1 -1
- metadata +89 -267
- data/.circleci/config.yml +0 -485
- data/.codeclimate.yml +0 -23
- data/.editorconfig +0 -10
- data/.fasterer.yml +0 -23
- data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
- data/.github/ISSUE_TEMPLATE/config.yml +0 -8
- data/.github/workflows/pr_commits_signed_off.yml +0 -16
- data/.github/workflows/release-notification-on-slack.yml +0 -34
- data/.gitignore +0 -19
- data/.rubocop.yml +0 -34
- data/.rubocop_todo.yml +0 -1140
- data/.tekton/.currency/docs/report.md +0 -20
- data/.tekton/.currency/resources/requirements.txt +0 -4
- data/.tekton/.currency/resources/table.json +0 -100
- data/.tekton/.currency/scripts/generate_report.py +0 -136
- data/.tekton/README.md +0 -278
- data/.tekton/github-interceptor-secret.yaml +0 -8
- data/.tekton/github-pr-eventlistener.yaml +0 -104
- data/.tekton/github-pr-pipeline.yaml.part +0 -38
- data/.tekton/github-set-status-task.yaml +0 -43
- data/.tekton/github-webhook-ingress.yaml +0 -20
- data/.tekton/pipeline.yaml +0 -571
- data/.tekton/pipelinerun.yaml +0 -21
- data/.tekton/ruby-tracer-prepuller.yaml +0 -87
- data/.tekton/run_unittests.sh +0 -87
- data/.tekton/scheduled-eventlistener.yaml +0 -108
- data/.tekton/task.yaml +0 -449
- data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
- data/Appraisals +0 -124
- data/CONTRIBUTING.md +0 -86
- data/Gemfile +0 -17
- data/LICENSE +0 -22
- data/MAINTAINERS.md +0 -3
- data/Rakefile +0 -49
- data/bin/announce_release_on_slack.py +0 -103
- data/docker-compose.yml +0 -20
- data/download.sh +0 -85
- data/examples/opentracing.rb +0 -35
- data/examples/tracing.rb +0 -84
- data/extras/license_header.rb +0 -44
- data/gemfiles/.bundle/config +0 -2
- data/gemfiles/aws_30.gemfile +0 -21
- data/gemfiles/aws_60.gemfile +0 -16
- data/gemfiles/cuba_30.gemfile +0 -16
- data/gemfiles/cuba_40.gemfile +0 -13
- data/gemfiles/dalli_20.gemfile +0 -15
- data/gemfiles/dalli_30.gemfile +0 -12
- data/gemfiles/dalli_32.gemfile +0 -12
- data/gemfiles/excon_0100.gemfile +0 -14
- data/gemfiles/excon_021.gemfile +0 -17
- data/gemfiles/excon_079.gemfile +0 -17
- data/gemfiles/excon_100.gemfile +0 -14
- data/gemfiles/graphql_10.gemfile +0 -16
- data/gemfiles/graphql_20.gemfile +0 -15
- data/gemfiles/grpc_10.gemfile +0 -15
- data/gemfiles/mongo_216.gemfile +0 -15
- data/gemfiles/mongo_219.gemfile +0 -12
- data/gemfiles/net_http_01.gemfile +0 -17
- data/gemfiles/rack_16.gemfile +0 -15
- data/gemfiles/rack_20.gemfile +0 -15
- data/gemfiles/rack_30.gemfile +0 -13
- data/gemfiles/rails_42.gemfile +0 -18
- data/gemfiles/rails_50.gemfile +0 -19
- data/gemfiles/rails_52.gemfile +0 -19
- data/gemfiles/rails_60.gemfile +0 -19
- data/gemfiles/rails_61.gemfile +0 -20
- data/gemfiles/rails_70.gemfile +0 -17
- data/gemfiles/rails_71.gemfile +0 -17
- data/gemfiles/rails_80.gemfile +0 -17
- data/gemfiles/redis_40.gemfile +0 -15
- data/gemfiles/redis_50.gemfile +0 -13
- data/gemfiles/redis_51.gemfile +0 -13
- data/gemfiles/resque_122.gemfile +0 -16
- data/gemfiles/resque_1274_3scale.gemfile +0 -17
- data/gemfiles/resque_20.gemfile +0 -16
- data/gemfiles/rest_client_16.gemfile +0 -17
- data/gemfiles/rest_client_20.gemfile +0 -17
- data/gemfiles/roda_20.gemfile +0 -16
- data/gemfiles/roda_30.gemfile +0 -16
- data/gemfiles/rubocop_162.gemfile +0 -6
- data/gemfiles/sequel_56.gemfile +0 -16
- data/gemfiles/sequel_57.gemfile +0 -16
- data/gemfiles/sequel_58.gemfile +0 -16
- data/gemfiles/shoryuken_50.gemfile +0 -16
- data/gemfiles/shoryuken_60.gemfile +0 -13
- data/gemfiles/sidekiq_42.gemfile +0 -15
- data/gemfiles/sidekiq_50.gemfile +0 -15
- data/gemfiles/sidekiq_60.gemfile +0 -12
- data/gemfiles/sidekiq_65.gemfile +0 -12
- data/gemfiles/sidekiq_70.gemfile +0 -12
- data/gemfiles/sinatra_14.gemfile +0 -15
- data/gemfiles/sinatra_22.gemfile +0 -12
- data/gemfiles/sinatra_30.gemfile +0 -12
- data/gemfiles/sinatra_40.gemfile +0 -12
- data/instana.gemspec +0 -48
- data/lib/instana/open_tracing/carrier.rb +0 -7
- data/lib/instana/open_tracing/instana_tracer.rb +0 -99
- data/lib/instana/tracing/span.rb +0 -431
- data/lib/opentracing.rb +0 -32
- data/log/.keep +0 -0
- data/sonar-project.properties +0 -9
- data/test/activator_test.rb +0 -50
- data/test/backend/agent_test.rb +0 -80
- data/test/backend/gc_snapshot_test.rb +0 -11
- data/test/backend/host_agent_activation_observer_test.rb +0 -73
- data/test/backend/host_agent_lookup_test.rb +0 -78
- data/test/backend/host_agent_reporting_observer_test.rb +0 -276
- data/test/backend/host_agent_test.rb +0 -89
- data/test/backend/process_info_test.rb +0 -83
- data/test/backend/request_client_test.rb +0 -39
- data/test/backend/serverless_agent_test.rb +0 -83
- data/test/benchmarks/bench_id_generation.rb +0 -15
- data/test/benchmarks/bench_opentracing.rb +0 -16
- data/test/config_test.rb +0 -34
- data/test/frameworks/cuba_test.rb +0 -61
- data/test/frameworks/roda_test.rb +0 -60
- data/test/frameworks/sinatra_test.rb +0 -71
- data/test/instana_test.rb +0 -37
- data/test/instrumentation/aws_test.rb +0 -241
- data/test/instrumentation/dalli_test.rb +0 -325
- data/test/instrumentation/excon_test.rb +0 -204
- data/test/instrumentation/graphql_test.rb +0 -289
- data/test/instrumentation/grpc_test.rb +0 -420
- data/test/instrumentation/mongo_test.rb +0 -68
- data/test/instrumentation/net_http_test.rb +0 -220
- data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
- data/test/instrumentation/rack_test.rb +0 -415
- data/test/instrumentation/rails_action_cable_test.rb +0 -135
- data/test/instrumentation/rails_action_controller_test.rb +0 -218
- data/test/instrumentation/rails_action_mailer_test.rb +0 -66
- data/test/instrumentation/rails_action_view_test.rb +0 -154
- data/test/instrumentation/rails_active_job_test.rb +0 -65
- data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -45
- data/test/instrumentation/rails_active_record_test.rb +0 -115
- data/test/instrumentation/redis_test.rb +0 -152
- data/test/instrumentation/resque_test.rb +0 -188
- data/test/instrumentation/rest_client_test.rb +0 -107
- data/test/instrumentation/sequel_test.rb +0 -105
- data/test/instrumentation/shoryuken_test.rb +0 -47
- data/test/instrumentation/sidekiq-client_test.rb +0 -169
- data/test/instrumentation/sidekiq-worker_test.rb +0 -180
- data/test/secrets_test.rb +0 -112
- data/test/serverless_test.rb +0 -369
- data/test/snapshot/deltable_test.rb +0 -17
- data/test/snapshot/docker_container_test.rb +0 -82
- data/test/snapshot/fargate_container_test.rb +0 -82
- data/test/snapshot/fargate_process_test.rb +0 -35
- data/test/snapshot/fargate_task_test.rb +0 -49
- data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
- data/test/snapshot/google_cloud_run_process_test.rb +0 -33
- data/test/snapshot/lambda_function_test.rb +0 -37
- data/test/snapshot/ruby_process_test.rb +0 -32
- data/test/support/apps/active_record/active_record.rb +0 -24
- data/test/support/apps/grpc/boot.rb +0 -23
- data/test/support/apps/grpc/grpc_server.rb +0 -84
- data/test/support/apps/http_endpoint/boot.rb +0 -28
- data/test/support/apps/rails/boot.rb +0 -219
- data/test/support/apps/rails/models/block.rb +0 -21
- data/test/support/apps/rails/models/block6.rb +0 -21
- data/test/support/apps/resque/boot.rb +0 -5
- data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
- data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
- data/test/support/apps/sidekiq/boot.rb +0 -25
- data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
- data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
- data/test/support/apps/sidekiq/worker.rb +0 -37
- data/test/support/helpers.rb +0 -85
- data/test/support/mock_timer.rb +0 -20
- data/test/test_helper.rb +0 -69
- data/test/tracing/custom_test.rb +0 -226
- data/test/tracing/id_management_test.rb +0 -80
- data/test/tracing/instrumented_logger_test.rb +0 -39
- data/test/tracing/opentracing_test.rb +0 -382
- data/test/tracing/processor_test.rb +0 -58
- data/test/tracing/span_context_test.rb +0 -22
- data/test/tracing/span_test.rb +0 -179
- data/test/tracing/tracer_async_test.rb +0 -230
- data/test/tracing/tracer_test.rb +0 -352
- data/test/util_test.rb +0 -10
@@ -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
|
data/test/support/helpers.rb
DELETED
@@ -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
|
data/test/support/mock_timer.rb
DELETED
@@ -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)
|
data/test/tracing/custom_test.rb
DELETED
@@ -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
|