ddtrace 1.18.0 → 1.23.2
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/CHANGELOG.md +228 -2
- data/LICENSE-3rdparty.csv +1 -1
- data/bin/ddprofrb +15 -0
- data/bin/ddtracerb +3 -1
- data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
- data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +312 -117
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +22 -14
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +4 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +43 -102
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +10 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +272 -136
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +2 -1
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +28 -7
- data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +6 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +15 -19
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/libdatadog_helpers.c +20 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/libdatadog_helpers.h +11 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +50 -4
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +19 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +4 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +18 -1
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +33 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/stack_recorder.c +476 -58
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/stack_recorder.h +3 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/time_helpers.h +2 -0
- data/lib/datadog/appsec/contrib/devise/tracking.rb +8 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +45 -14
- data/lib/datadog/appsec/event.rb +1 -1
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/configuration/components.rb +7 -6
- data/lib/datadog/core/configuration/option.rb +8 -6
- data/lib/datadog/core/configuration/settings.rb +259 -60
- data/lib/datadog/core/configuration.rb +20 -4
- data/lib/datadog/core/diagnostics/environment_logger.rb +4 -3
- data/lib/datadog/core/environment/class_count.rb +6 -6
- data/lib/datadog/core/environment/git.rb +25 -0
- data/lib/datadog/core/environment/identity.rb +18 -48
- data/lib/datadog/core/environment/platform.rb +7 -1
- data/lib/datadog/core/git/ext.rb +2 -23
- data/lib/datadog/core/remote/client/capabilities.rb +1 -1
- data/lib/datadog/core/remote/component.rb +25 -12
- data/lib/datadog/core/remote/ext.rb +1 -0
- data/lib/datadog/core/remote/negotiation.rb +2 -2
- data/lib/datadog/core/remote/tie/tracing.rb +39 -0
- data/lib/datadog/core/remote/tie.rb +27 -0
- data/lib/datadog/core/remote/transport/http/config.rb +1 -1
- data/lib/datadog/core/remote/worker.rb +7 -4
- data/lib/datadog/core/telemetry/client.rb +18 -10
- data/lib/datadog/core/telemetry/emitter.rb +9 -13
- data/lib/datadog/core/telemetry/event.rb +247 -56
- data/lib/datadog/core/telemetry/ext.rb +4 -0
- data/lib/datadog/core/telemetry/heartbeat.rb +1 -3
- data/lib/datadog/core/telemetry/http/ext.rb +4 -1
- data/lib/datadog/core/telemetry/http/response.rb +4 -0
- data/lib/datadog/core/telemetry/http/transport.rb +9 -4
- data/lib/datadog/core/telemetry/request.rb +59 -0
- data/lib/datadog/core/transport/ext.rb +2 -0
- data/lib/datadog/core/utils/url.rb +25 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +3 -2
- data/lib/datadog/opentelemetry.rb +3 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +10 -4
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +36 -12
- data/lib/datadog/profiling/collectors/info.rb +101 -0
- data/lib/datadog/profiling/component.rb +210 -34
- data/lib/datadog/profiling/exporter.rb +23 -6
- data/lib/datadog/profiling/ext.rb +2 -0
- data/lib/datadog/profiling/flush.rb +6 -3
- data/lib/datadog/profiling/http_transport.rb +5 -1
- data/lib/datadog/profiling/load_native_extension.rb +19 -6
- data/lib/datadog/profiling/native_extension.rb +1 -1
- data/lib/datadog/profiling/scheduler.rb +4 -6
- data/lib/datadog/profiling/stack_recorder.rb +19 -4
- data/lib/datadog/profiling/tag_builder.rb +5 -0
- data/lib/datadog/profiling/tasks/exec.rb +3 -3
- data/lib/datadog/profiling/tasks/help.rb +3 -3
- data/lib/datadog/profiling.rb +13 -2
- data/lib/datadog/tracing/configuration/ext.rb +0 -1
- data/lib/datadog/tracing/configuration/settings.rb +2 -1
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/action_view/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/active_job/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +11 -4
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/active_record/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/active_support/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/analytics.rb +0 -1
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +11 -1
- data/lib/datadog/tracing/contrib/configurable.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/dalli/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/extensions.rb +6 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -0
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +1 -1
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/grape/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +2 -2
- data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +5 -0
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +11 -4
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/qless/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +9 -2
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/rails/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/rake/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/redis/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +34 -21
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/resque/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/sequel/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/stripe/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/trilogy/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/sampling/matcher.rb +23 -3
- data/lib/datadog/tracing/sampling/rule.rb +7 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +2 -0
- data/lib/datadog/tracing/trace_operation.rb +1 -2
- data/lib/datadog/tracing/transport/http.rb +1 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +31 -0
- data/lib/datadog/tracing.rb +8 -2
- data/lib/ddtrace/version.rb +2 -2
- metadata +71 -61
- data/ext/ddtrace_profiling_native_extension/pid_controller.c +0 -57
- data/ext/ddtrace_profiling_native_extension/pid_controller.h +0 -45
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -110
- data/lib/datadog/core/telemetry/collector.rb +0 -240
- data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
- data/lib/datadog/core/telemetry/v1/application.rb +0 -92
- data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
- data/lib/datadog/core/telemetry/v1/dependency.rb +0 -43
- data/lib/datadog/core/telemetry/v1/host.rb +0 -59
- data/lib/datadog/core/telemetry/v1/integration.rb +0 -64
- data/lib/datadog/core/telemetry/v1/product.rb +0 -36
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -106
- data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +0 -41
- data/lib/datadog/core/telemetry/v2/request.rb +0 -29
- data/lib/datadog/profiling/diagnostics/environment_logger.rb +0 -39
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/time_helpers.c +0 -0
|
@@ -9,6 +9,7 @@ module Datadog
|
|
|
9
9
|
module Ext
|
|
10
10
|
CLIENT_SERVICE_NAME = 'sidekiq-client'
|
|
11
11
|
ENV_ENABLED = 'DD_TRACE_SIDEKIQ_ENABLED'
|
|
12
|
+
# @!visibility private
|
|
12
13
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED'
|
|
13
14
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE'
|
|
14
15
|
ENV_TAG_JOB_ARGS = 'DD_SIDEKIQ_TAG_JOB_ARGS'
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_SINATRA_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SINATRA_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SINATRA_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
RACK_ENV_SINATRA_REQUEST_SPAN = 'datadog.sinatra_request_span'
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_SNEAKERS_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SNEAKERS_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SNEAKERS_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SERVICE_NAME = 'sneakers'
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_STRIPE_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_STRIPE_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_STRIPE_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_REQUEST = 'stripe.request'
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
9
|
module Ext
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SERVICE_NAME = 'sucker_punch'
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../configuration/settings'
|
|
4
|
+
require_relative '../ext'
|
|
5
|
+
|
|
6
|
+
require_relative '../../propagation/sql_comment'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Tracing
|
|
10
|
+
module Contrib
|
|
11
|
+
module Trilogy
|
|
12
|
+
module Configuration
|
|
13
|
+
# Custom settings for the Trilogy integration
|
|
14
|
+
# @public_api
|
|
15
|
+
class Settings < Contrib::Configuration::Settings
|
|
16
|
+
option :enabled do |o|
|
|
17
|
+
o.type :bool
|
|
18
|
+
o.env Ext::ENV_ENABLED
|
|
19
|
+
o.default true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
option :analytics_enabled do |o|
|
|
23
|
+
o.type :bool
|
|
24
|
+
o.env Ext::ENV_ANALYTICS_ENABLED
|
|
25
|
+
o.default false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
option :analytics_sample_rate do |o|
|
|
29
|
+
o.type :float
|
|
30
|
+
o.env Ext::ENV_ANALYTICS_SAMPLE_RATE
|
|
31
|
+
o.default 1.0
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
option :service_name do |o|
|
|
35
|
+
o.default do
|
|
36
|
+
Contrib::SpanAttributeSchema.fetch_service_name(
|
|
37
|
+
Ext::ENV_SERVICE_NAME,
|
|
38
|
+
Ext::DEFAULT_PEER_SERVICE_NAME
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
option :comment_propagation do |o|
|
|
44
|
+
o.type :string
|
|
45
|
+
o.env Contrib::Propagation::SqlComment::Ext::ENV_DBM_PROPAGATION_MODE
|
|
46
|
+
o.default Contrib::Propagation::SqlComment::Ext::DISABLED
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
option :peer_service do |o|
|
|
50
|
+
o.type :string, nilable: true
|
|
51
|
+
o.env Ext::ENV_PEER_SERVICE
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Contrib
|
|
6
|
+
module Trilogy
|
|
7
|
+
# Trilogy integration constants
|
|
8
|
+
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
9
|
+
module Ext
|
|
10
|
+
ENV_ENABLED = 'DD_TRACE_TRILOGY_ENABLED'
|
|
11
|
+
ENV_SERVICE_NAME = 'DD_TRACE_TRILOGY_SERVICE_NAME'
|
|
12
|
+
ENV_PEER_SERVICE = 'DD_TRACE_TRILOGY_PEER_SERVICE'
|
|
13
|
+
|
|
14
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_TRILOGY_ANALYTICS_ENABLED'
|
|
15
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_TRILOGY_ANALYTICS_SAMPLE_RATE'
|
|
16
|
+
DEFAULT_PEER_SERVICE_NAME = 'trilogy'
|
|
17
|
+
SPAN_QUERY = 'trilogy.query'
|
|
18
|
+
TAG_DB_NAME = 'trilogy.db.name'
|
|
19
|
+
TAG_COMPONENT = 'trilogy'
|
|
20
|
+
TAG_OPERATION_QUERY = 'query'
|
|
21
|
+
TAG_SYSTEM = 'mysql'
|
|
22
|
+
PEER_SERVICE_SOURCES = (Array[Ext::TAG_DB_NAME] + Contrib::Ext::DB::PEER_SERVICE_SOURCES).freeze
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../metadata/ext'
|
|
4
|
+
require_relative '../analytics'
|
|
5
|
+
require_relative 'ext'
|
|
6
|
+
require_relative '../ext'
|
|
7
|
+
require_relative '../propagation/sql_comment'
|
|
8
|
+
require_relative '../propagation/sql_comment/mode'
|
|
9
|
+
|
|
10
|
+
module Datadog
|
|
11
|
+
module Tracing
|
|
12
|
+
module Contrib
|
|
13
|
+
module Trilogy
|
|
14
|
+
# Trilogy patch module
|
|
15
|
+
module Instrumentation
|
|
16
|
+
def self.included(base)
|
|
17
|
+
base.prepend(InstanceMethods)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Trilogy patch instance methods
|
|
21
|
+
module InstanceMethods
|
|
22
|
+
def query(sql)
|
|
23
|
+
service = Datadog.configuration_for(self, :service_name) || datadog_configuration[:service_name]
|
|
24
|
+
|
|
25
|
+
Tracing.trace(Ext::SPAN_QUERY, service: service) do |span, trace_op|
|
|
26
|
+
span.resource = sql
|
|
27
|
+
span.span_type = Tracing::Metadata::Ext::SQL::TYPE
|
|
28
|
+
|
|
29
|
+
if datadog_configuration[:peer_service]
|
|
30
|
+
span.set_tag(
|
|
31
|
+
Tracing::Metadata::Ext::TAG_PEER_SERVICE,
|
|
32
|
+
datadog_configuration[:peer_service]
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Tag original global service name if not used
|
|
37
|
+
if span.service != Datadog.configuration.service
|
|
38
|
+
span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
|
|
42
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
|
|
43
|
+
|
|
44
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
|
|
45
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_QUERY)
|
|
46
|
+
|
|
47
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, connection_options[:host])
|
|
48
|
+
|
|
49
|
+
# Set analytics sample rate
|
|
50
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
51
|
+
|
|
52
|
+
span.set_tag(Ext::TAG_DB_NAME, connection_options[:database])
|
|
53
|
+
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, connection_options[:host])
|
|
54
|
+
span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, connection_options[:port])
|
|
55
|
+
|
|
56
|
+
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
|
57
|
+
|
|
58
|
+
propagation_mode = Contrib::Propagation::SqlComment::Mode.new(comment_propagation)
|
|
59
|
+
|
|
60
|
+
Contrib::Propagation::SqlComment.annotate!(span, propagation_mode)
|
|
61
|
+
sql = Contrib::Propagation::SqlComment.prepend_comment(
|
|
62
|
+
sql,
|
|
63
|
+
span,
|
|
64
|
+
trace_op,
|
|
65
|
+
propagation_mode
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
super(sql)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
def datadog_configuration
|
|
75
|
+
Datadog.configuration.tracing[:trilogy]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def analytics_enabled?
|
|
79
|
+
datadog_configuration[:analytics_enabled]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def analytics_sample_rate
|
|
83
|
+
datadog_configuration[:analytics_sample_rate]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def comment_propagation
|
|
87
|
+
datadog_configuration[:comment_propagation]
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../integration'
|
|
4
|
+
require_relative 'configuration/settings'
|
|
5
|
+
require_relative 'patcher'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Tracing
|
|
9
|
+
module Contrib
|
|
10
|
+
module Trilogy
|
|
11
|
+
# Description of Trilogy integration
|
|
12
|
+
class Integration
|
|
13
|
+
include Contrib::Integration
|
|
14
|
+
|
|
15
|
+
MINIMUM_VERSION = Gem::Version.new('2.0.0')
|
|
16
|
+
|
|
17
|
+
# @public_api Changing the integration name or integration options can cause breaking changes
|
|
18
|
+
register_as :trilogy
|
|
19
|
+
|
|
20
|
+
def self.version
|
|
21
|
+
Gem.loaded_specs['trilogy'] && Gem.loaded_specs['trilogy'].version
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.loaded?
|
|
25
|
+
!defined?(::Trilogy).nil?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.compatible?
|
|
29
|
+
super && version >= MINIMUM_VERSION
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def new_configuration
|
|
33
|
+
Configuration::Settings.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def patcher
|
|
37
|
+
Patcher
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../patcher'
|
|
4
|
+
require_relative 'instrumentation'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Tracing
|
|
8
|
+
module Contrib
|
|
9
|
+
module Trilogy
|
|
10
|
+
# Patcher enables patching of 'trilogy' module.
|
|
11
|
+
module Patcher
|
|
12
|
+
include Contrib::Patcher
|
|
13
|
+
|
|
14
|
+
module_function
|
|
15
|
+
|
|
16
|
+
def target_version
|
|
17
|
+
Integration.version
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def patch
|
|
21
|
+
patch_trilogy_client
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def patch_trilogy_client
|
|
25
|
+
::Trilogy.include(Instrumentation)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -29,20 +29,40 @@ module Datadog
|
|
|
29
29
|
end
|
|
30
30
|
end.new
|
|
31
31
|
|
|
32
|
-
attr_reader :name, :service
|
|
32
|
+
attr_reader :name, :service, :resource, :tags
|
|
33
33
|
|
|
34
34
|
# @param name [String,Regexp,Proc] Matcher for case equality (===) with the trace name,
|
|
35
35
|
# defaults to always match
|
|
36
36
|
# @param service [String,Regexp,Proc] Matcher for case equality (===) with the service name,
|
|
37
37
|
# defaults to always match
|
|
38
|
-
|
|
38
|
+
# @param resource [String,Regexp,Proc] Matcher for case equality (===) with the resource name,
|
|
39
|
+
# defaults to always match
|
|
40
|
+
def initialize(name: MATCH_ALL, service: MATCH_ALL, resource: MATCH_ALL, tags: {})
|
|
39
41
|
super()
|
|
40
42
|
@name = name
|
|
41
43
|
@service = service
|
|
44
|
+
@resource = resource
|
|
45
|
+
@tags = tags
|
|
42
46
|
end
|
|
43
47
|
|
|
44
48
|
def match?(trace)
|
|
45
|
-
name === trace.name && service === trace.service
|
|
49
|
+
name === trace.name && service === trace.service && resource === trace.resource && tags_match?(trace)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
# Match against the trace tags and metrics.
|
|
55
|
+
def tags_match?(trace)
|
|
56
|
+
@tags.all? do |name, matcher|
|
|
57
|
+
tag = trace.get_tag(name)
|
|
58
|
+
|
|
59
|
+
# Format metrics as strings, to allow for partial number matching (/4.*/ matching '400', '404', etc.).
|
|
60
|
+
# Because metrics are floats, we use the '%g' format specifier to avoid trailing zeros, which
|
|
61
|
+
# can affect exact string matching (e.g. '400' matching '400.0').
|
|
62
|
+
tag = format('%g', tag) if tag.is_a?(Numeric)
|
|
63
|
+
|
|
64
|
+
matcher === tag
|
|
65
|
+
end
|
|
46
66
|
end
|
|
47
67
|
end
|
|
48
68
|
|
|
@@ -51,8 +51,13 @@ module Datadog
|
|
|
51
51
|
# @param name [String,Regexp,Proc] Matcher for case equality (===) with the trace name, defaults to always match
|
|
52
52
|
# @param service [String,Regexp,Proc] Matcher for case equality (===) with the service name,
|
|
53
53
|
# defaults to always match
|
|
54
|
+
# @param resource [String,Regexp,Proc] Matcher for case equality (===) with the resource name,
|
|
55
|
+
# defaults to always match
|
|
54
56
|
# @param sample_rate [Float] Sampling rate between +[0,1]+
|
|
55
|
-
def initialize(
|
|
57
|
+
def initialize(
|
|
58
|
+
name: SimpleMatcher::MATCH_ALL, service: SimpleMatcher::MATCH_ALL,
|
|
59
|
+
resource: SimpleMatcher::MATCH_ALL, tags: {}, sample_rate: 1.0
|
|
60
|
+
)
|
|
56
61
|
# We want to allow 0.0 to drop all traces, but {Datadog::Tracing::Sampling::RateSampler}
|
|
57
62
|
# considers 0.0 an invalid rate and falls back to 100% sampling.
|
|
58
63
|
#
|
|
@@ -64,7 +69,7 @@ module Datadog
|
|
|
64
69
|
sampler = RateSampler.new
|
|
65
70
|
sampler.sample_rate = sample_rate
|
|
66
71
|
|
|
67
|
-
super(SimpleMatcher.new(name: name, service: service), sampler)
|
|
72
|
+
super(SimpleMatcher.new(name: name, service: service, resource: resource, tags: tags), sampler)
|
|
68
73
|
end
|
|
69
74
|
end
|
|
70
75
|
end
|
|
@@ -137,13 +137,12 @@ module Datadog
|
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
def keep!
|
|
140
|
-
self.sampled = true
|
|
141
140
|
self.sampling_priority = Sampling::Ext::Priority::USER_KEEP
|
|
142
141
|
set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
|
|
142
|
+
self.sampled = true # Just in case the in-app sampler had decided to drop this span, we revert that decision.
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
def reject!
|
|
146
|
-
self.sampled = false
|
|
147
146
|
self.sampling_priority = Sampling::Ext::Priority::USER_REJECT
|
|
148
147
|
set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
|
|
149
148
|
end
|
|
@@ -71,6 +71,7 @@ module Datadog
|
|
|
71
71
|
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
|
72
72
|
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
|
73
73
|
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
|
74
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
|
74
75
|
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
|
75
76
|
Datadog::Core::Environment::Ext::TRACER_VERSION
|
|
76
77
|
}.tap do |headers|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative '../../core/environment/identity'
|
|
4
4
|
require_relative '../../core/environment/socket'
|
|
5
|
+
require_relative '../../core/environment/git'
|
|
6
|
+
require_relative '../../core/git/ext'
|
|
5
7
|
require_relative '../../core/runtime/ext'
|
|
6
8
|
require_relative '../metadata/ext'
|
|
7
9
|
require_relative '../trace_segment'
|
|
@@ -13,6 +15,7 @@ module Datadog
|
|
|
13
15
|
class TraceFormatter
|
|
14
16
|
attr_reader \
|
|
15
17
|
:root_span,
|
|
18
|
+
:first_span,
|
|
16
19
|
:trace
|
|
17
20
|
|
|
18
21
|
def self.format!(trace)
|
|
@@ -22,6 +25,9 @@ module Datadog
|
|
|
22
25
|
def initialize(trace)
|
|
23
26
|
@trace = trace
|
|
24
27
|
@root_span = find_root_span(trace)
|
|
28
|
+
# source code integration uses the "first span in trace chunk" concept instead of root span
|
|
29
|
+
# see: https://github.com/DataDog/dd-trace-rb/pull/3424
|
|
30
|
+
@first_span = trace.spans.first
|
|
25
31
|
end
|
|
26
32
|
|
|
27
33
|
# Modifies a trace so suitable for transport
|
|
@@ -54,6 +60,11 @@ module Datadog
|
|
|
54
60
|
tag_sampling_priority!
|
|
55
61
|
tag_profiling_enabled!
|
|
56
62
|
|
|
63
|
+
if first_span
|
|
64
|
+
tag_git_repository_url!
|
|
65
|
+
tag_git_commit_sha!
|
|
66
|
+
end
|
|
67
|
+
|
|
57
68
|
trace
|
|
58
69
|
end
|
|
59
70
|
|
|
@@ -185,6 +196,18 @@ module Datadog
|
|
|
185
196
|
)
|
|
186
197
|
end
|
|
187
198
|
|
|
199
|
+
def tag_git_repository_url!
|
|
200
|
+
return if git_repository_url.nil?
|
|
201
|
+
|
|
202
|
+
first_span.set_tag(Core::Git::Ext::TAG_REPOSITORY_URL, git_repository_url)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def tag_git_commit_sha!
|
|
206
|
+
return if git_commit_sha.nil?
|
|
207
|
+
|
|
208
|
+
first_span.set_tag(Core::Git::Ext::TAG_COMMIT_SHA, git_commit_sha)
|
|
209
|
+
end
|
|
210
|
+
|
|
188
211
|
private
|
|
189
212
|
|
|
190
213
|
def partial?
|
|
@@ -203,6 +226,14 @@ module Datadog
|
|
|
203
226
|
# when root span is not found, fall back to last span (partial flush)
|
|
204
227
|
root_span || trace.spans.last
|
|
205
228
|
end
|
|
229
|
+
|
|
230
|
+
def git_repository_url
|
|
231
|
+
Core::Environment::Git.git_repository_url
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def git_commit_sha
|
|
235
|
+
Core::Environment::Git.git_commit_sha
|
|
236
|
+
end
|
|
206
237
|
end
|
|
207
238
|
end
|
|
208
239
|
end
|
data/lib/datadog/tracing.rb
CHANGED
|
@@ -73,8 +73,14 @@ module Datadog
|
|
|
73
73
|
# (see Datadog::Tracing::Tracer#active_correlation)
|
|
74
74
|
# @public_api
|
|
75
75
|
def correlation
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
# We access this in this way as:
|
|
77
|
+
# * If the components have not been initialized, it doesn't make sense to initialize ddtrace just to say
|
|
78
|
+
# 'nil' here
|
|
79
|
+
# * It prevents recursive initialization attempts, see https://github.com/DataDog/dd-trace-rb/issues/3385
|
|
80
|
+
components = Datadog.send(:components, allow_initialization: false)
|
|
81
|
+
current_tracer = components.tracer if components
|
|
82
|
+
|
|
83
|
+
return Datadog::Tracing::Correlation::Identifier.new unless current_tracer
|
|
78
84
|
|
|
79
85
|
current_tracer.active_correlation
|
|
80
86
|
end
|