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
|
@@ -4,7 +4,10 @@ module Datadog
|
|
|
4
4
|
# Note that `record_sample` is only accessible from native code.
|
|
5
5
|
# Methods prefixed with _native_ are implemented in `stack_recorder.c`
|
|
6
6
|
class StackRecorder
|
|
7
|
-
def initialize(
|
|
7
|
+
def initialize(
|
|
8
|
+
cpu_time_enabled:, alloc_samples_enabled:, heap_samples_enabled:, heap_size_enabled:,
|
|
9
|
+
heap_sample_every:, timeline_enabled:
|
|
10
|
+
)
|
|
8
11
|
# This mutex works in addition to the fancy C-level mutexes we have in the native side (see the docs there).
|
|
9
12
|
# It prevents multiple Ruby threads calling serialize at the same time -- something like
|
|
10
13
|
# `10.times { Thread.new { stack_recorder.serialize } }`.
|
|
@@ -13,18 +16,26 @@ module Datadog
|
|
|
13
16
|
# accidentally happening.
|
|
14
17
|
@no_concurrent_synchronize_mutex = Mutex.new
|
|
15
18
|
|
|
16
|
-
self.class._native_initialize(
|
|
19
|
+
self.class._native_initialize(
|
|
20
|
+
self,
|
|
21
|
+
cpu_time_enabled,
|
|
22
|
+
alloc_samples_enabled,
|
|
23
|
+
heap_samples_enabled,
|
|
24
|
+
heap_size_enabled,
|
|
25
|
+
heap_sample_every,
|
|
26
|
+
timeline_enabled,
|
|
27
|
+
)
|
|
17
28
|
end
|
|
18
29
|
|
|
19
30
|
def serialize
|
|
20
31
|
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_serialize(self) }
|
|
21
32
|
|
|
22
33
|
if status == :ok
|
|
23
|
-
start, finish, encoded_pprof = result
|
|
34
|
+
start, finish, encoded_pprof, profile_stats = result
|
|
24
35
|
|
|
25
36
|
Datadog.logger.debug { "Encoded profile covering #{start.iso8601} to #{finish.iso8601}" }
|
|
26
37
|
|
|
27
|
-
[start, finish, encoded_pprof]
|
|
38
|
+
[start, finish, encoded_pprof, profile_stats]
|
|
28
39
|
else
|
|
29
40
|
error_message = result
|
|
30
41
|
|
|
@@ -51,6 +62,10 @@ module Datadog
|
|
|
51
62
|
def reset_after_fork
|
|
52
63
|
self.class._native_reset_after_fork(self)
|
|
53
64
|
end
|
|
65
|
+
|
|
66
|
+
def stats
|
|
67
|
+
self.class._native_stats(self)
|
|
68
|
+
end
|
|
54
69
|
end
|
|
55
70
|
end
|
|
56
71
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative '../core/utils'
|
|
4
|
+
require_relative '../core/environment/git'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Profiling
|
|
@@ -23,6 +24,8 @@ module Datadog
|
|
|
23
24
|
runtime_id: Core::Environment::Identity.id,
|
|
24
25
|
runtime_platform: Core::Environment::Identity.lang_platform,
|
|
25
26
|
runtime_version: Core::Environment::Identity.lang_version,
|
|
27
|
+
git_repository_url: Core::Environment::Git.git_repository_url,
|
|
28
|
+
git_commit_sha: Core::Environment::Git.git_commit_sha,
|
|
26
29
|
# User-provided tags
|
|
27
30
|
user_tags: settings.tags
|
|
28
31
|
)
|
|
@@ -42,6 +45,8 @@ module Datadog
|
|
|
42
45
|
tags[FORM_FIELD_TAG_ENV] = env if env
|
|
43
46
|
tags[FORM_FIELD_TAG_SERVICE] = service if service
|
|
44
47
|
tags[FORM_FIELD_TAG_VERSION] = version if version
|
|
48
|
+
tags[TAG_GIT_REPOSITORY_URL] = git_repository_url if git_repository_url
|
|
49
|
+
tags[TAG_GIT_COMMIT_SHA] = git_commit_sha if git_commit_sha
|
|
45
50
|
|
|
46
51
|
# Make sure everything is an utf-8 string, to avoid encoding issues in native code/libddprof/further downstream
|
|
47
52
|
user_tags.merge(tags).map do |key, value|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Datadog
|
|
2
2
|
module Profiling
|
|
3
3
|
module Tasks
|
|
4
|
-
# Wraps command with Datadog
|
|
4
|
+
# Wraps command with Datadog profiling
|
|
5
5
|
class Exec
|
|
6
6
|
attr_reader :args
|
|
7
7
|
|
|
@@ -36,10 +36,10 @@ module Datadog
|
|
|
36
36
|
def exec_with_error_handling(args)
|
|
37
37
|
Kernel.exec(*args)
|
|
38
38
|
rescue Errno::ENOENT => e
|
|
39
|
-
Kernel.warn "
|
|
39
|
+
Kernel.warn "ddprofrb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(' ')}')"
|
|
40
40
|
Kernel.exit 127
|
|
41
41
|
rescue Errno::EACCES, Errno::ENOEXEC => e
|
|
42
|
-
Kernel.warn "
|
|
42
|
+
Kernel.warn "ddprofrb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(' ')}')"
|
|
43
43
|
Kernel.exit 126
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
module Datadog
|
|
2
2
|
module Profiling
|
|
3
3
|
module Tasks
|
|
4
|
-
# Prints help message for usage of `
|
|
4
|
+
# Prints help message for usage of `ddprofrb`
|
|
5
5
|
class Help
|
|
6
6
|
def run
|
|
7
7
|
puts %(
|
|
8
|
-
Usage:
|
|
9
|
-
exec [command]: Executes command with
|
|
8
|
+
Usage: ddprofrb [command] [arguments]
|
|
9
|
+
exec [command]: Executes command with profiling preloaded.
|
|
10
10
|
help: Prints this help message.
|
|
11
11
|
)
|
|
12
12
|
end
|
data/lib/datadog/profiling.rb
CHANGED
|
@@ -63,6 +63,17 @@ module Datadog
|
|
|
63
63
|
!!(profiler.send(:scheduler).running? if profiler)
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
+
def self.wait_until_running(timeout_seconds: 5)
|
|
67
|
+
profiler = Datadog.send(:components).profiler
|
|
68
|
+
if profiler
|
|
69
|
+
# Use .send(...) to avoid exposing the attr_reader as an API to the outside
|
|
70
|
+
worker = profiler.send(:worker)
|
|
71
|
+
worker.wait_until_running(timeout_seconds: timeout_seconds)
|
|
72
|
+
else
|
|
73
|
+
raise 'Profiler not enabled or available'
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
66
77
|
private_class_method def self.replace_noop_allocation_count
|
|
67
78
|
def self.allocation_count # rubocop:disable Lint/NestedMethodDefinition (On purpose!)
|
|
68
79
|
Datadog::Profiling::Collectors::CpuAndWallTimeWorker._native_allocation_count
|
|
@@ -77,7 +88,7 @@ module Datadog
|
|
|
77
88
|
|
|
78
89
|
private_class_method def self.try_reading_skipped_reason_file(file_api = File)
|
|
79
90
|
# This file, if it exists, is recorded by extconf.rb during compilation of the native extension
|
|
80
|
-
skipped_reason_file = "#{__dir__}/../../ext/
|
|
91
|
+
skipped_reason_file = "#{__dir__}/../../ext/datadog_profiling_native_extension/skipped_reason.txt"
|
|
81
92
|
|
|
82
93
|
begin
|
|
83
94
|
return unless file_api.exist?(skipped_reason_file)
|
|
@@ -123,13 +134,13 @@ module Datadog
|
|
|
123
134
|
return false unless supported?
|
|
124
135
|
|
|
125
136
|
require_relative 'profiling/ext/forking'
|
|
137
|
+
require_relative 'profiling/collectors/info'
|
|
126
138
|
require_relative 'profiling/collectors/code_provenance'
|
|
127
139
|
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
|
128
140
|
require_relative 'profiling/collectors/dynamic_sampling_rate'
|
|
129
141
|
require_relative 'profiling/collectors/idle_sampling_helper'
|
|
130
142
|
require_relative 'profiling/collectors/stack'
|
|
131
143
|
require_relative 'profiling/collectors/thread_context'
|
|
132
|
-
require_relative 'profiling/diagnostics/environment_logger'
|
|
133
144
|
require_relative 'profiling/stack_recorder'
|
|
134
145
|
require_relative 'profiling/exporter'
|
|
135
146
|
require_relative 'profiling/flush'
|
|
@@ -23,10 +23,11 @@ module Datadog
|
|
|
23
23
|
# @configure_with {Datadog::Tracing}
|
|
24
24
|
# @deprecated Use [Trace Retention and Ingestion](https://docs.datadoghq.com/tracing/trace_retention_and_ingestion/)
|
|
25
25
|
# controls.
|
|
26
|
-
#
|
|
26
|
+
# @!visibility private
|
|
27
27
|
settings :analytics do
|
|
28
28
|
# @default `DD_TRACE_ANALYTICS_ENABLED` environment variable, otherwise `nil`
|
|
29
29
|
# @return [Boolean,nil]
|
|
30
|
+
# @!visibility private
|
|
30
31
|
option :enabled do |o|
|
|
31
32
|
o.type :bool, nilable: true
|
|
32
33
|
o.env Tracing::Configuration::Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED
|
|
@@ -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_ACTION_CABLE_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTION_CABLE_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTION_CABLE_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_ACTION = 'action_cable.action'
|
|
@@ -37,7 +37,7 @@ module Datadog
|
|
|
37
37
|
|
|
38
38
|
span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_DELIVER)
|
|
39
39
|
|
|
40
|
-
# Since email
|
|
40
|
+
# Since email data can contain PII we disable by default
|
|
41
41
|
# Some of these fields can be either strings or arrays, so we try to normalize
|
|
42
42
|
# https://github.com/rails/rails/blob/18707ab17fa492eb25ad2e8f9818a320dc20b823/actionmailer/lib/action_mailer/base.rb#L742-L754
|
|
43
43
|
if configuration[:email_data] == true
|
|
@@ -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_ACTION_MAILER_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTION_MAILER_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTION_MAILER_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_PROCESS = 'action_mailer.process'
|
|
@@ -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_ACTION_PACK_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTION_PACK_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTION_PACK_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_ACTION_CONTROLLER = 'rails.action_controller'
|
|
@@ -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_ACTION_VIEW_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTION_VIEW_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTION_VIEW_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_RENDER_PARTIAL = 'rails.render_partial'
|
|
@@ -7,6 +7,7 @@ module Datadog
|
|
|
7
7
|
# @public_api Changing resource names, tag names, or environment variables creates breaking changes.
|
|
8
8
|
module Ext
|
|
9
9
|
ENV_ENABLED = 'DD_TRACE_ACTIVE_JOB_ENABLED'
|
|
10
|
+
# @!visibility private
|
|
10
11
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTIVE_JOB_ANALYTICS_ENABLED'
|
|
11
12
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTIVE_JOB_ANALYTICS_SAMPLE_RATE'
|
|
12
13
|
|
|
@@ -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_ACTIVE_MODEL_SERIALIZERS_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_RENDER = 'active_model_serializers.render'
|
|
@@ -65,9 +65,14 @@ module Datadog
|
|
|
65
65
|
|
|
66
66
|
config
|
|
67
67
|
rescue => e
|
|
68
|
+
# Resolving a valid database configuration should not raise an exception,
|
|
69
|
+
# but if it does, it can be due to adding a broken pattern match prior to this call.
|
|
70
|
+
#
|
|
71
|
+
# `db_config` input may contain sensitive information such as passwords,
|
|
72
|
+
# hence provide a succinct summary for the error logging.
|
|
68
73
|
Datadog.logger.error(
|
|
69
|
-
|
|
70
|
-
"Cause: #{e.class.name}
|
|
74
|
+
'Failed to resolve ActiveRecord database configuration. '\
|
|
75
|
+
"Cause: #{e.class.name} Source: #{Array(e.backtrace).first}"
|
|
71
76
|
)
|
|
72
77
|
|
|
73
78
|
nil
|
|
@@ -85,9 +90,11 @@ module Datadog
|
|
|
85
90
|
normalized
|
|
86
91
|
rescue => e
|
|
87
92
|
Datadog.logger.error(
|
|
88
|
-
"Failed to resolve
|
|
89
|
-
"Cause: #{e.class.name}
|
|
93
|
+
"Failed to resolve key #{matcher.inspect}. " \
|
|
94
|
+
"Cause: #{e.class.name} Source: #{Array(e.backtrace).first}"
|
|
90
95
|
)
|
|
96
|
+
|
|
97
|
+
nil
|
|
91
98
|
end
|
|
92
99
|
|
|
93
100
|
#
|
|
@@ -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_ACTIVE_RECORD_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTIVE_RECORD_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SERVICE_NAME = 'active_record'
|
|
@@ -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_ACTIVE_SUPPORT_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTIVE_SUPPORT_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTIVE_SUPPORT_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
QUANTIZE_CACHE_MAX_KEY_SIZE = 300
|
|
@@ -10,6 +10,7 @@ module Datadog
|
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_AWS_ENABLED'
|
|
11
11
|
ENV_SERVICE_NAME = 'DD_TRACE_AWS_SERVICE_NAME'
|
|
12
12
|
ENV_PEER_SERVICE = 'DD_TRACE_AWS_PEER_SERVICE'
|
|
13
|
+
# @!visibility private
|
|
13
14
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_AWS_ANALYTICS_ENABLED'
|
|
14
15
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_AWS_ANALYTICS_SAMPLE_RATE'
|
|
15
16
|
DEFAULT_PEER_SERVICE_NAME = 'aws'
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'context_composite_executor_service'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Contrib
|
|
8
|
+
module ConcurrentRuby
|
|
9
|
+
# This patches the Async - to wrap executor service using ContextCompositeExecutorService
|
|
10
|
+
module AsyncPatch
|
|
11
|
+
def initialize(delegate)
|
|
12
|
+
super(delegate)
|
|
13
|
+
|
|
14
|
+
@executor = ContextCompositeExecutorService.new(@executor)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -6,7 +6,7 @@ module Datadog
|
|
|
6
6
|
module Tracing
|
|
7
7
|
module Contrib
|
|
8
8
|
module ConcurrentRuby
|
|
9
|
-
# Patcher enables patching of 'Future'
|
|
9
|
+
# Patcher enables patching of 'Future' and 'Async' classes.
|
|
10
10
|
module Patcher
|
|
11
11
|
include Contrib::Patcher
|
|
12
12
|
|
|
@@ -21,6 +21,16 @@ module Datadog
|
|
|
21
21
|
patch_future
|
|
22
22
|
require_relative 'promises_future_patch'
|
|
23
23
|
patch_promises_future
|
|
24
|
+
require_relative 'async_patch'
|
|
25
|
+
async_patch
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Propagate tracing context in Concurrent::Async
|
|
29
|
+
def async_patch
|
|
30
|
+
if defined?(::Concurrent::Async)
|
|
31
|
+
# NOTE: AsyncDelegator is a private constant
|
|
32
|
+
::Concurrent::Async.const_get(:AsyncDelegator).prepend(AsyncPatch)
|
|
33
|
+
end
|
|
24
34
|
end
|
|
25
35
|
|
|
26
36
|
# Propagate tracing context in Concurrent::Future
|
|
@@ -12,6 +12,7 @@ module Datadog
|
|
|
12
12
|
# DEV: If add support for the `memcached` gem (not popular as of 2023), we'll have issues with span naming
|
|
13
13
|
# DEV: conflicts.
|
|
14
14
|
ENV_ENABLED = 'DD_TRACE_DALLI_ENABLED'
|
|
15
|
+
# @!visibility private
|
|
15
16
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_DALLI_ANALYTICS_ENABLED'
|
|
16
17
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_DALLI_ANALYTICS_SAMPLE_RATE'
|
|
17
18
|
# DEV: This is named `*_MEMCACHED_*` because the spans it refer to are `memcached.*` and this variable
|
|
@@ -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_DELAYED_JOB_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_DELAYED_JOB_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_DELAYED_JOB_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_JOB = 'delayed_job'
|
|
@@ -10,6 +10,7 @@ module Datadog
|
|
|
10
10
|
ENV_ENABLED = 'DD_TRACE_ELASTICSEARCH_ENABLED'
|
|
11
11
|
ENV_SERVICE_NAME = 'DD_TRACE_ELASTICSEARCH_SERVICE_NAME'
|
|
12
12
|
ENV_PEER_SERVICE = 'DD_TRACE_ELASTICSEARCH_PEER_SERVICE'
|
|
13
|
+
# @!visibility private
|
|
13
14
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED'
|
|
14
15
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'
|
|
15
16
|
DEFAULT_PEER_SERVICE_NAME = 'elasticsearch'
|
|
@@ -11,6 +11,7 @@ module Datadog
|
|
|
11
11
|
ENV_SERVICE_NAME = 'DD_TRACE_ETHON_SERVICE_NAME'
|
|
12
12
|
ENV_PEER_SERVICE = 'DD_TRACE_ETHON_PEER_SERVICE'
|
|
13
13
|
|
|
14
|
+
# @!visibility private
|
|
14
15
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_ETHON_ANALYTICS_ENABLED'
|
|
15
16
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ETHON_ANALYTICS_SAMPLE_RATE'
|
|
16
17
|
DEFAULT_PEER_SERVICE_NAME = 'ethon'
|
|
@@ -11,6 +11,7 @@ module Datadog
|
|
|
11
11
|
ENV_SERVICE_NAME = 'DD_TRACE_EXCON_SERVICE_NAME'
|
|
12
12
|
ENV_PEER_SERVICE = 'DD_TRACE_EXCON_PEER_SERVICE'
|
|
13
13
|
|
|
14
|
+
# @!visibility private
|
|
14
15
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_EXCON_ANALYTICS_ENABLED'
|
|
15
16
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_EXCON_ANALYTICS_SAMPLE_RATE'
|
|
16
17
|
DEFAULT_PEER_SERVICE_NAME = 'excon'
|
|
@@ -168,8 +168,12 @@ module Datadog
|
|
|
168
168
|
integration
|
|
169
169
|
end
|
|
170
170
|
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
def use(integration_name, options = {}, &block)
|
|
172
|
+
Core.log_deprecation do
|
|
173
|
+
'Configuration with `use` has been deprecated, use `instrument` instead.'
|
|
174
|
+
end
|
|
175
|
+
instrument(integration_name, options, &block)
|
|
176
|
+
end
|
|
173
177
|
|
|
174
178
|
# For the provided `integration_name`, resolves a matching configuration
|
|
175
179
|
# for the provided integration from an integration-specific `key`.
|
|
@@ -21,6 +21,7 @@ module Datadog
|
|
|
21
21
|
o.default true
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
+
# @!visibility private
|
|
24
25
|
option :analytics_enabled do |o|
|
|
25
26
|
o.type :bool
|
|
26
27
|
o.env Ext::ENV_ANALYTICS_ENABLED
|
|
@@ -34,10 +35,16 @@ module Datadog
|
|
|
34
35
|
end
|
|
35
36
|
|
|
36
37
|
option :distributed_tracing, default: true, type: :bool
|
|
38
|
+
|
|
37
39
|
option :error_handler do |o|
|
|
38
40
|
o.type :proc
|
|
39
41
|
o.default_proc(&DEFAULT_ERROR_HANDLER)
|
|
40
42
|
end
|
|
43
|
+
|
|
44
|
+
option :on_error do |o|
|
|
45
|
+
o.type :proc, nilable: true
|
|
46
|
+
end
|
|
47
|
+
|
|
41
48
|
option :split_by_domain, default: false, type: :bool
|
|
42
49
|
|
|
43
50
|
option :service_name do |o|
|
|
@@ -11,6 +11,7 @@ module Datadog
|
|
|
11
11
|
ENV_SERVICE_NAME = 'DD_TRACE_FARADAY_SERVICE_NAME'
|
|
12
12
|
ENV_PEER_SERVICE = 'DD_TRACE_FARADAY_PEER_SERVICE'
|
|
13
13
|
|
|
14
|
+
# @!visibility private
|
|
14
15
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_FARADAY_ANALYTICS_ENABLED'
|
|
15
16
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_FARADAY_ANALYTICS_SAMPLE_RATE'
|
|
16
17
|
DEFAULT_PEER_SERVICE_NAME = 'faraday'
|
|
@@ -24,7 +24,7 @@ module Datadog
|
|
|
24
24
|
# Do this once to reduce expensive regex calls.
|
|
25
25
|
request_options = build_request_options!(env)
|
|
26
26
|
|
|
27
|
-
Tracing.trace(Ext::SPAN_REQUEST) do |span, trace|
|
|
27
|
+
Tracing.trace(Ext::SPAN_REQUEST, on_error: request_options[:on_error]) do |span, trace|
|
|
28
28
|
annotate!(span, env, request_options)
|
|
29
29
|
propagate!(trace, span, env) if request_options[:distributed_tracing] && Tracing.enabled?
|
|
30
30
|
app.call(env).on_complete { |resp| handle_response(span, resp, request_options) }
|
|
@@ -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_GRAPE_ENABLED'
|
|
11
|
+
# @!visibility private
|
|
11
12
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_GRAPE_ANALYTICS_ENABLED'
|
|
12
13
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_GRAPE_ANALYTICS_SAMPLE_RATE'
|
|
13
14
|
SPAN_ENDPOINT_RENDER = 'grape.endpoint_render'
|