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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca8072a81b44cce54a3a2db8ef236038fa4814226c714e88f12285ea952eede4
|
4
|
+
data.tar.gz: 6f3b666908eb9442c1a8e6d3d1b9a332576bb818810a2c588df4de2232c1b65a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84861f4a775983202c19731ce78302bf5e7cfd677591bf9b42014be4dee8b93efd1e6606910f756bbba495584a932ac860eb76cad5cf6539202d0588c3c01592
|
7
|
+
data.tar.gz: ab26f124f9e087501046f56645649aed9b077ee656120d99ac1c375f44552f92345e338c1d5495c28e4a1959a7c459bf652511e13031912812a1acef003ca3f3
|
data/README.md
CHANGED
@@ -8,7 +8,8 @@ Any and all feedback is welcome. Happy Ruby visibility.
|
|
8
8
|
|
9
9
|
[](https://badge.fury.io/rb/instana)
|
10
10
|
[](https://circleci.com/gh/instana/ruby-sensor)
|
11
|
-
[](http://opentracing.io)
|
12
|
+
[](http://opentelemetry.io)
|
12
13
|
|
13
14
|
## Installation
|
14
15
|
|
data/lib/instana/base.rb
CHANGED
@@ -14,6 +14,7 @@ module Instana
|
|
14
14
|
attr_accessor :pid
|
15
15
|
attr_reader :secrets
|
16
16
|
attr_reader :serverless
|
17
|
+
attr_accessor :tracer_provider
|
17
18
|
|
18
19
|
##
|
19
20
|
# setup
|
@@ -22,8 +23,9 @@ module Instana
|
|
22
23
|
# to run" state.
|
23
24
|
#
|
24
25
|
def setup
|
25
|
-
@agent
|
26
|
-
@
|
26
|
+
@agent = ::Instana::Backend::Agent.new
|
27
|
+
@tracer_provider = ::Instana::Trace::TracerProvider.new
|
28
|
+
@tracer = @tracer_provider.tracer('instana_tracer')
|
27
29
|
@processor = ::Instana::Processor.new
|
28
30
|
@secrets = ::Instana::Secrets.new
|
29
31
|
@serverless = ::Instana::Serverless.new
|
@@ -27,8 +27,10 @@ module Instana
|
|
27
27
|
}
|
28
28
|
|
29
29
|
context = connection.instana_trace_context
|
30
|
-
::
|
31
|
-
|
30
|
+
Trace.with_span(OpenTelemetry::Trace.non_recording_span(context)) do
|
31
|
+
::Instana.tracer.in_span(:'rpc-server', attributes: rpc_tags) do
|
32
|
+
super(data, via: via)
|
33
|
+
end
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -44,8 +46,10 @@ module Instana
|
|
44
46
|
}
|
45
47
|
|
46
48
|
context = connection.instana_trace_context
|
47
|
-
::
|
48
|
-
|
49
|
+
Trace.with_span(OpenTelemetry::Trace.non_recording_span(context)) do
|
50
|
+
::Instana.tracer.in_span(:'rpc-server', attributes: rpc_tags) do
|
51
|
+
super(action, data)
|
52
|
+
end
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
@@ -11,9 +11,8 @@ module Instana
|
|
11
11
|
action: action_name
|
12
12
|
}
|
13
13
|
}
|
14
|
-
|
15
14
|
request.env['INSTANA_HTTP_PATH_TEMPLATE'] = matched_path_template
|
16
|
-
::Instana
|
15
|
+
::Instana.tracer.in_span(:actioncontroller, attributes: call_payload) { super(*args) }
|
17
16
|
end
|
18
17
|
|
19
18
|
def render(*args, &block)
|
@@ -22,8 +21,7 @@ module Instana
|
|
22
21
|
name: describe_render_options(args.first) || 'Default'
|
23
22
|
}
|
24
23
|
}
|
25
|
-
|
26
|
-
::Instana::Tracer.trace(:actionview, call_payload) { super(*args, &block) }
|
24
|
+
::Instana.tracer.in_span(:actionview, attributes: call_payload) { super(*args, &block) }
|
27
25
|
end
|
28
26
|
|
29
27
|
private
|
@@ -13,7 +13,7 @@ module Instana
|
|
13
13
|
}
|
14
14
|
}
|
15
15
|
|
16
|
-
::Instana
|
16
|
+
::Instana.tracer.in_span(:render, attributes: call_payload) { super(*args) }
|
17
17
|
end
|
18
18
|
|
19
19
|
def render_collection(*args)
|
@@ -24,7 +24,7 @@ module Instana
|
|
24
24
|
}
|
25
25
|
}
|
26
26
|
|
27
|
-
::Instana
|
27
|
+
::Instana.tracer.in_span(:render, attributes: call_payload) { super(*args) }
|
28
28
|
end
|
29
29
|
|
30
30
|
def render_partial_template(*args)
|
@@ -35,7 +35,7 @@ module Instana
|
|
35
35
|
}
|
36
36
|
}
|
37
37
|
|
38
|
-
::Instana
|
38
|
+
::Instana.tracer.in_span(:render, attributes: call_payload) { super(*args) }
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -48,7 +48,7 @@ module Instana
|
|
48
48
|
}
|
49
49
|
}
|
50
50
|
|
51
|
-
::Instana
|
51
|
+
::Instana.tracer.in_span(:render, attributes: call_payload) { super(*args) }
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -1,5 +1,19 @@
|
|
1
1
|
# (c) Copyright IBM Corp. 2021
|
2
2
|
# (c) Copyright Instana Inc. 2021
|
3
|
+
module OpenTelemetry
|
4
|
+
module Trace
|
5
|
+
module Propagation
|
6
|
+
module TraceContext
|
7
|
+
# A TraceParent is an implementation of the W3C trace context specification
|
8
|
+
# https://www.w3.org/TR/trace-context/
|
9
|
+
# {Trace::SpanContext}
|
10
|
+
class TraceParent
|
11
|
+
REGEXP = /^(?<version>[A-Fa-f0-9]{2})-(?<trace_id>[A-Fa-f0-9]{32})-(?<span_id>[A-Fa-f0-9]{32})-(?<flags>[A-Fa-f0-9]{2})(?<ignored>-.*)?$/
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
3
17
|
|
4
18
|
module Instana
|
5
19
|
module Instrumentation
|
@@ -15,7 +29,7 @@ module Instana
|
|
15
29
|
}
|
16
30
|
}
|
17
31
|
|
18
|
-
::Instana
|
32
|
+
::Instana.tracer.in_span(:activejob, attributes: tags) do
|
19
33
|
context = ::Instana.tracer.context
|
20
34
|
job.arguments.append({
|
21
35
|
instana_context: context ? context.to_hash : nil
|
@@ -37,11 +51,12 @@ module Instana
|
|
37
51
|
incoming_context = if job.arguments.is_a?(Array) && job.arguments.last.is_a?(Hash) && job.arguments.last.key?(:instana_context)
|
38
52
|
instana_context = job.arguments.last[:instana_context]
|
39
53
|
job.arguments.pop
|
40
|
-
instana_context ? ::Instana::SpanContext.new(instana_context[:trace_id], instana_context[:span_id]) : nil
|
54
|
+
instana_context ? ::Instana::SpanContext.new(trace_id: instana_context[:trace_id], span_id: instana_context[:span_id]) : nil
|
41
55
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
56
|
+
Trace.with_span(OpenTelemetry::Trace.non_recording_span(incoming_context)) do
|
57
|
+
::Instana.tracer.in_span(:activejob, attributes: tags) do
|
58
|
+
block.call
|
59
|
+
end
|
45
60
|
end
|
46
61
|
end
|
47
62
|
end
|
@@ -35,7 +35,7 @@ module Instana
|
|
35
35
|
|
36
36
|
def maybe_trace(call_payload, name, &blk)
|
37
37
|
if ::Instana.tracer.tracing? && !ignored?(call_payload, name)
|
38
|
-
::Instana.tracer.
|
38
|
+
::Instana.tracer.in_span(:activerecord, attributes: call_payload, &blk)
|
39
39
|
else
|
40
40
|
yield
|
41
41
|
end
|
@@ -11,7 +11,7 @@ module Instana
|
|
11
11
|
table: table_name_from(context)
|
12
12
|
}
|
13
13
|
|
14
|
-
::Instana.tracer.
|
14
|
+
::Instana.tracer.in_span(:dynamodb, attributes: {dynamodb: dynamo_tags}) { @handler.call(context) }
|
15
15
|
end
|
16
16
|
|
17
17
|
private
|
@@ -25,7 +25,7 @@ module Instana
|
|
25
25
|
type: context.params[:invocation_type]
|
26
26
|
}.reject { |_, v| v.nil? }
|
27
27
|
|
28
|
-
::Instana.tracer.
|
28
|
+
::Instana.tracer.in_span(:"aws.lambda.invoke", attributes: {aws: {lambda: {invoke: tags}}}) do
|
29
29
|
response = @handler.call(context)
|
30
30
|
if response.respond_to? :status_code
|
31
31
|
::Instana.tracer.log_info(:http => {:status => response.status_code })
|
@@ -12,7 +12,7 @@ module Instana
|
|
12
12
|
key: key_from_context(context)
|
13
13
|
}.reject { |_, v| v.nil? }
|
14
14
|
|
15
|
-
::Instana.tracer.
|
15
|
+
::Instana.tracer.in_span(:s3, attributes: {s3: s3_tags}) { @handler.call(context) }
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
@@ -14,7 +14,7 @@ module Instana
|
|
14
14
|
}.reject { |_, v| v.nil? }
|
15
15
|
|
16
16
|
if context.operation_name == :publish
|
17
|
-
::Instana.tracer.
|
17
|
+
::Instana.tracer.in_span(:sns, attributes: {sns: sns_tags}) { @handler.call(context) }
|
18
18
|
else
|
19
19
|
@handler.call(context)
|
20
20
|
end
|
@@ -15,7 +15,7 @@ module Instana
|
|
15
15
|
|
16
16
|
span_tags = tags_for(context.operation_name, context.params).reject { |_, v| v.nil? }
|
17
17
|
|
18
|
-
::Instana.tracer.
|
18
|
+
::Instana.tracer.in_span(:sqs, attributes: {sqs: span_tags}) do |span|
|
19
19
|
case context.operation_name
|
20
20
|
when :send_message
|
21
21
|
inject_instana_headers(span, context.params)
|
@@ -17,7 +17,7 @@ module Instana
|
|
17
17
|
entry_payload[:memcache][:command] = op
|
18
18
|
entry_payload[:memcache][:key] = key
|
19
19
|
|
20
|
-
::Instana.tracer.
|
20
|
+
::Instana.tracer.start_span(:memcache, attributes: entry_payload)
|
21
21
|
exit_payload = { :memcache => {} }
|
22
22
|
|
23
23
|
result = super(*args, &blk)
|
@@ -16,10 +16,10 @@ module Instana
|
|
16
16
|
if datum[:pipeline] == true
|
17
17
|
# Pass the context along in the datum so we get back on response
|
18
18
|
# and can close out the async span
|
19
|
-
datum[:instana_span] = ::Instana.tracer.
|
19
|
+
datum[:instana_span] = ::Instana.tracer.start_span(:excon, attributes: payload)
|
20
20
|
t_context = datum[:instana_span].context
|
21
21
|
else
|
22
|
-
::Instana.tracer.
|
22
|
+
::Instana.tracer.start_span(:excon, attributes: payload)
|
23
23
|
t_context = ::Instana.tracer.context
|
24
24
|
end
|
25
25
|
|
@@ -35,13 +35,13 @@ module Instana
|
|
35
35
|
}
|
36
36
|
|
37
37
|
begin
|
38
|
-
::Instana.tracer.
|
38
|
+
span = ::Instana.tracer.start_span(:'graphql.server', attributes: {graphql: payload})
|
39
39
|
yield
|
40
40
|
rescue Exception => e
|
41
|
-
|
41
|
+
span.record_exception(e)
|
42
42
|
raise e
|
43
43
|
ensure
|
44
|
-
|
44
|
+
span.finish
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -22,7 +22,7 @@ module Instana
|
|
22
22
|
kvs[:rpc][:call] = method
|
23
23
|
kvs[:rpc][:call_type] = call_type
|
24
24
|
|
25
|
-
::Instana.tracer.
|
25
|
+
current_span = ::Instana.tracer.start_span(:'rpc-client', attributes: kvs)
|
26
26
|
|
27
27
|
context = ::Instana.tracer.context
|
28
28
|
if context
|
@@ -35,11 +35,11 @@ module Instana
|
|
35
35
|
super(method, *others, **options)
|
36
36
|
rescue => e
|
37
37
|
kvs[:rpc][:error] = true
|
38
|
-
|
39
|
-
|
38
|
+
current_span.set_tags(kvs)
|
39
|
+
current_span.record_exception(e)
|
40
40
|
raise
|
41
41
|
ensure
|
42
|
-
|
42
|
+
current_span.finish
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -60,9 +60,9 @@ module Instana
|
|
60
60
|
|
61
61
|
incoming_context = {}
|
62
62
|
if metadata.key?('x-instana-t')
|
63
|
-
incoming_context
|
64
|
-
|
65
|
-
|
63
|
+
incoming_context = SpanContext.new(trace_id: ::Instana::Util.header_to_id(metadata['x-instana-t']),
|
64
|
+
span_id: metadata.key?('x-instana-s') ? ::Instana::Util.header_to_id(metadata['x-instana-s']) : nil,
|
65
|
+
level: metadata.key?('x-instana-l') ? metadata['x-instana-l'] : nil)
|
66
66
|
end
|
67
67
|
|
68
68
|
kvs[:rpc][:flavor] = :grpc
|
@@ -71,18 +71,19 @@ module Instana
|
|
71
71
|
kvs[:rpc][:call_type] = call_type
|
72
72
|
kvs[:rpc][:peer] = { address: active_call.peer }
|
73
73
|
|
74
|
-
::
|
75
|
-
|
76
|
-
|
74
|
+
span = OpenTelemetry::Trace.non_recording_span(incoming_context) if incoming_context
|
75
|
+
parent_context = Trace.context_with_span(span) if incoming_context
|
76
|
+
|
77
|
+
current_span = ::Instana.tracer.start_span(:'rpc-server', attributes: kvs, with_parent: parent_context)
|
77
78
|
|
78
79
|
super(active_call, mth, *others)
|
79
80
|
rescue => e
|
80
81
|
kvs[:rpc][:error] = true
|
81
|
-
|
82
|
-
|
82
|
+
current_span.set_tags(kvs)
|
83
|
+
current_span.record_exception(e)
|
83
84
|
raise
|
84
85
|
ensure
|
85
|
-
|
86
|
+
current_span.finish if ::Instana.tracer.tracing?
|
86
87
|
end
|
87
88
|
end
|
88
89
|
end
|
@@ -20,19 +20,19 @@ module Instana
|
|
20
20
|
json: filter_statement(event.command)
|
21
21
|
}
|
22
22
|
|
23
|
-
@requests[event.request_id] = ::Instana.tracer.
|
23
|
+
@requests[event.request_id] = ::Instana.tracer.start_span(:mongo, attributes: {mongo: tags})
|
24
24
|
end
|
25
25
|
|
26
26
|
def failed(event)
|
27
27
|
span = @requests.delete(event.request_id)
|
28
28
|
span.add_error(Exception.new(event.message))
|
29
29
|
|
30
|
-
|
30
|
+
span.finish
|
31
31
|
end
|
32
32
|
|
33
33
|
def succeeded(event)
|
34
34
|
span = @requests.delete(event.request_id)
|
35
|
-
|
35
|
+
span.finish
|
36
36
|
end
|
37
37
|
|
38
38
|
private
|
@@ -12,7 +12,7 @@ module Instana
|
|
12
12
|
return super(*args, &block)
|
13
13
|
end
|
14
14
|
|
15
|
-
::Instana.tracer.
|
15
|
+
current_span = ::Instana.tracer.start_span(:'net-http')
|
16
16
|
|
17
17
|
# Send out the tracing context with the request
|
18
18
|
request = args[0]
|
@@ -54,15 +54,16 @@ module Instana
|
|
54
54
|
if response.code.to_i >= 500
|
55
55
|
# Because of the 5xx response, we flag this span as errored but
|
56
56
|
# without a backtrace (no exception)
|
57
|
-
|
57
|
+
current_span.record_exception(nil)
|
58
58
|
end
|
59
59
|
|
60
60
|
response
|
61
61
|
rescue => e
|
62
|
-
|
62
|
+
current_span&.record_exception(e)
|
63
63
|
raise
|
64
64
|
ensure
|
65
|
-
|
65
|
+
current_span&.set_tags(kv_payload)
|
66
|
+
current_span&.finish unless do_skip
|
66
67
|
end
|
67
68
|
|
68
69
|
def skip_instrumentation?
|
@@ -10,14 +10,20 @@ module Instana
|
|
10
10
|
@app = app
|
11
11
|
end
|
12
12
|
|
13
|
-
def call(env)
|
13
|
+
def call(env) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength
|
14
14
|
req = InstrumentedRequest.new(env)
|
15
15
|
kvs = {
|
16
16
|
http: req.request_tags
|
17
17
|
}.reject { |_, v| v.nil? }
|
18
18
|
|
19
|
-
|
19
|
+
parent_context = extract_trace_context(req.incoming_context)
|
20
20
|
|
21
|
+
span = OpenTelemetry::Trace.non_recording_span(parent_context) if parent_context
|
22
|
+
parent_context = Trace.context_with_span(span) if parent_context
|
23
|
+
|
24
|
+
current_span = ::Instana.tracer.start_span(:rack, attributes: {}, with_parent: parent_context)
|
25
|
+
trace_ctx = OpenTelemetry::Trace.context_with_span(current_span)
|
26
|
+
@trace_token = OpenTelemetry::Context.attach(trace_ctx)
|
21
27
|
status, headers, response = @app.call(env)
|
22
28
|
|
23
29
|
if ::Instana.tracer.tracing?
|
@@ -66,7 +72,7 @@ module Instana
|
|
66
72
|
|
67
73
|
[status, headers, response]
|
68
74
|
rescue Exception => e
|
69
|
-
|
75
|
+
current_span.record_exception(e) if ::Instana.tracer.tracing?
|
70
76
|
raise
|
71
77
|
ensure
|
72
78
|
if ::Instana.tracer.tracing?
|
@@ -85,9 +91,35 @@ module Instana
|
|
85
91
|
headers['Traceparent'] = trace_context.trace_parent_header
|
86
92
|
headers['Server-Timing'] = "intid;desc=#{trace_context.trace_id_header}"
|
87
93
|
end
|
94
|
+
current_span.set_tags(kvs)
|
95
|
+
OpenTelemetry::Context.detach(@trace_token) if @trace_token
|
96
|
+
current_span.finish
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
88
101
|
|
89
|
-
|
102
|
+
def extract_trace_context(incoming_context)
|
103
|
+
return nil unless incoming_context
|
104
|
+
|
105
|
+
parent_context = nil
|
106
|
+
|
107
|
+
if incoming_context.is_a?(Hash)
|
108
|
+
unless incoming_context.empty?
|
109
|
+
parent_context = SpanContext.new(
|
110
|
+
trace_id: incoming_context[:trace_id],
|
111
|
+
span_id: incoming_context[:span_id],
|
112
|
+
level: incoming_context[:level],
|
113
|
+
baggage: {
|
114
|
+
external_trace_id: incoming_context[:external_trace_id],
|
115
|
+
external_state: incoming_context[:external_state]
|
116
|
+
}
|
117
|
+
)
|
118
|
+
end
|
119
|
+
elsif incoming_context.is_a?(SpanContext)
|
120
|
+
parent_context = incoming_context
|
90
121
|
end
|
122
|
+
parent_context
|
91
123
|
end
|
92
124
|
end
|
93
125
|
end
|
@@ -27,7 +27,7 @@ module Instana
|
|
27
27
|
if Instana.tracer.tracing?
|
28
28
|
kvs = collect_kvs(:enqueue, klass, args)
|
29
29
|
|
30
|
-
Instana.tracer.
|
30
|
+
Instana.tracer.in_span(:'resque-client', attributes: kvs) do
|
31
31
|
args.push(::Instana.tracer.context.to_hash) if ::Instana.config[:'resque-client'][:propagate]
|
32
32
|
super(klass, *args)
|
33
33
|
end
|
@@ -41,7 +41,7 @@ module Instana
|
|
41
41
|
kvs = collect_kvs(:enqueue_to, klass, args)
|
42
42
|
kvs[:Queue] = queue.to_s if queue
|
43
43
|
|
44
|
-
Instana.tracer.
|
44
|
+
Instana.tracer.in_span(:'resque-client', attributes: kvs) do
|
45
45
|
args.push(::Instana.tracer.context.to_hash) if ::Instana.config[:'resque-client'][:propagate]
|
46
46
|
super(queue, klass, *args)
|
47
47
|
end
|
@@ -54,7 +54,7 @@ module Instana
|
|
54
54
|
if Instana.tracer.tracing?
|
55
55
|
kvs = collect_kvs(:dequeue, klass, args)
|
56
56
|
|
57
|
-
Instana.tracer.
|
57
|
+
Instana.tracer.in_span(:'resque-client', attributes: kvs) do
|
58
58
|
super(klass, *args)
|
59
59
|
end
|
60
60
|
else
|
@@ -78,13 +78,15 @@ module Instana
|
|
78
78
|
trace_context = if ::Instana.config[:'resque-client'][:propagate] && job.payload['args'][-1].is_a?(Hash) && job.payload['args'][-1].keys.include?('trace_id')
|
79
79
|
context_from_wire = job.payload['args'].pop
|
80
80
|
::Instana::SpanContext.new(
|
81
|
-
context_from_wire['trace_id'],
|
82
|
-
context_from_wire['span_id']
|
81
|
+
trace_id: context_from_wire['trace_id'],
|
82
|
+
span_id: context_from_wire['span_id']
|
83
83
|
)
|
84
84
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
span = OpenTelemetry::Trace.non_recording_span(trace_context) if trace_context
|
86
|
+
Trace.with_span(span) do
|
87
|
+
Instana.tracer.in_span(:'resque-worker', attributes: kvs) do |span|
|
88
|
+
super(job)
|
89
|
+
end
|
88
90
|
end
|
89
91
|
end
|
90
92
|
end
|
@@ -8,14 +8,14 @@ module Instana
|
|
8
8
|
# Since RestClient uses net/http under the covers, we just
|
9
9
|
# provide span visibility here. HTTP related KVs are reported
|
10
10
|
# in the Net::HTTP instrumentation
|
11
|
-
::Instana.tracer.
|
11
|
+
span = ::Instana.tracer.start_span(:'rest-client', with_parent: OpenTelemetry::Context.current)
|
12
12
|
|
13
|
-
super(&block)
|
13
|
+
Trace.with_span(span) { super(&block) }
|
14
14
|
rescue => e
|
15
|
-
|
15
|
+
span.record_exception(e)
|
16
16
|
raise
|
17
17
|
ensure
|
18
|
-
|
18
|
+
span.finish
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Instana
|
4
4
|
module Instrumentation
|
5
5
|
module Sequel
|
6
|
-
IGNORED_SQL = %w[BEGIN COMMIT SET].freeze
|
6
|
+
IGNORED_SQL = %w[BEGIN COMMIT SET PRAGMA].freeze
|
7
7
|
VERSION_SELECT_STATEMENT = "SELECT VERSION()".freeze
|
8
8
|
SANITIZE_REGEXP = /('[\s\S][^']*'|\d*\.\d+|\d+|NULL)/i
|
9
9
|
|
@@ -26,9 +26,9 @@ module Instana
|
|
26
26
|
::Instana.config[:sanitize_sql] ? sql.gsub(SANITIZE_REGEXP, '?') : sql
|
27
27
|
end
|
28
28
|
|
29
|
-
def maybe_trace(call_payload, &
|
29
|
+
def maybe_trace(call_payload, &block)
|
30
30
|
if ::Instana.tracer.tracing? && !ignored?(call_payload)
|
31
|
-
::Instana.tracer.
|
31
|
+
::Instana.tracer.in_span(:sequel, attributes: call_payload, &block)
|
32
32
|
else
|
33
33
|
yield
|
34
34
|
end
|
@@ -15,7 +15,10 @@ module Instana
|
|
15
15
|
}
|
16
16
|
|
17
17
|
context = incomming_context_from(sqs_message.message_attributes)
|
18
|
-
::
|
18
|
+
instana_context = Instana::SpanContext.new(trace_id: context[:trace_id], span_id: context[:span_id], level: context[:level])
|
19
|
+
Trace.with_span(OpenTelemetry::Trace.non_recording_span(instana_context)) do
|
20
|
+
::Instana.tracer.in_span(:sqs, attributes: {sqs: sqs_tags}, &block)
|
21
|
+
end
|
19
22
|
end
|
20
23
|
|
21
24
|
private
|
@@ -5,11 +5,10 @@ module Instana
|
|
5
5
|
module Instrumentation
|
6
6
|
class SidekiqClient
|
7
7
|
def call(worker_class, msg, queue, _redis_pool)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
::Instana.tracer.log_entry(:'sidekiq-client', kv_payload)
|
8
|
+
kvs = { :'sidekiq-client' => {} }
|
9
|
+
kvs[:'sidekiq-client'][:queue] = queue
|
10
|
+
kvs[:'sidekiq-client'][:job] = worker_class.to_s
|
11
|
+
kvs[:'sidekiq-client'][:retry] = msg['retry'].to_s
|
13
12
|
|
14
13
|
# Temporary until we move connection collection to redis
|
15
14
|
# instrumentation
|
@@ -24,24 +23,27 @@ module Instana
|
|
24
23
|
else # Unexpected version, continue without recording any redis-url
|
25
24
|
break
|
26
25
|
end
|
27
|
-
|
26
|
+
kvs[:'sidekiq-client'][:'redis-url'] = "#{host}:#{port}"
|
28
27
|
end
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
Instana.tracer.in_span(:'sidekiq-client', attributes: kvs) do |span|
|
30
|
+
context = ::Instana.tracer.context
|
31
|
+
if context
|
32
|
+
msg['X-Instana-T'] = context.trace_id_header
|
33
|
+
msg['X-Instana-S'] = context.span_id_header
|
34
|
+
end
|
35
|
+
|
36
|
+
result = yield
|
35
37
|
|
36
|
-
|
38
|
+
if result && result['jid']
|
39
|
+
span.set_tag(:'sidekiq-client', { job_id: result['jid'] })
|
40
|
+
end
|
37
41
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
ensure
|
44
|
-
::Instana.tracer.log_exit(:'sidekiq-client', kv_payload)
|
42
|
+
result
|
43
|
+
rescue => e
|
44
|
+
span.record_exception(e)
|
45
|
+
raise
|
46
|
+
end
|
45
47
|
end
|
46
48
|
end
|
47
49
|
end
|