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
data/lib/datadog/core/git/ext.rb
CHANGED
|
@@ -5,32 +5,11 @@ module Datadog
|
|
|
5
5
|
module Git
|
|
6
6
|
# Defines constants for Git tags
|
|
7
7
|
module Ext
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
TAG_BRANCH = 'git.branch'
|
|
11
|
-
TAG_REPOSITORY_URL = 'git.repository_url'
|
|
12
|
-
TAG_TAG = 'git.tag'
|
|
13
|
-
|
|
14
|
-
TAG_COMMIT_AUTHOR_DATE = 'git.commit.author.date'
|
|
15
|
-
TAG_COMMIT_AUTHOR_EMAIL = 'git.commit.author.email'
|
|
16
|
-
TAG_COMMIT_AUTHOR_NAME = 'git.commit.author.name'
|
|
17
|
-
TAG_COMMIT_COMMITTER_DATE = 'git.commit.committer.date'
|
|
18
|
-
TAG_COMMIT_COMMITTER_EMAIL = 'git.commit.committer.email'
|
|
19
|
-
TAG_COMMIT_COMMITTER_NAME = 'git.commit.committer.name'
|
|
20
|
-
TAG_COMMIT_MESSAGE = 'git.commit.message'
|
|
21
|
-
TAG_COMMIT_SHA = 'git.commit.sha'
|
|
8
|
+
TAG_REPOSITORY_URL = '_dd.git.repository_url'
|
|
9
|
+
TAG_COMMIT_SHA = '_dd.git.commit.sha'
|
|
22
10
|
|
|
23
11
|
ENV_REPOSITORY_URL = 'DD_GIT_REPOSITORY_URL'
|
|
24
12
|
ENV_COMMIT_SHA = 'DD_GIT_COMMIT_SHA'
|
|
25
|
-
ENV_BRANCH = 'DD_GIT_BRANCH'
|
|
26
|
-
ENV_TAG = 'DD_GIT_TAG'
|
|
27
|
-
ENV_COMMIT_MESSAGE = 'DD_GIT_COMMIT_MESSAGE'
|
|
28
|
-
ENV_COMMIT_AUTHOR_NAME = 'DD_GIT_COMMIT_AUTHOR_NAME'
|
|
29
|
-
ENV_COMMIT_AUTHOR_EMAIL = 'DD_GIT_COMMIT_AUTHOR_EMAIL'
|
|
30
|
-
ENV_COMMIT_AUTHOR_DATE = 'DD_GIT_COMMIT_AUTHOR_DATE'
|
|
31
|
-
ENV_COMMIT_COMMITTER_NAME = 'DD_GIT_COMMIT_COMMITTER_NAME'
|
|
32
|
-
ENV_COMMIT_COMMITTER_EMAIL = 'DD_GIT_COMMIT_COMMITTER_EMAIL'
|
|
33
|
-
ENV_COMMIT_COMMITTER_DATE = 'DD_GIT_COMMIT_COMMITTER_DATE'
|
|
34
13
|
end
|
|
35
14
|
end
|
|
36
15
|
end
|
|
@@ -53,7 +53,7 @@ module Datadog
|
|
|
53
53
|
cap_to_hexs = capabilities.reduce(:|).to_s(16).tap { |s| s.size.odd? && s.prepend('0') }.scan(/\h\h/)
|
|
54
54
|
binary = cap_to_hexs.each_with_object([]) { |hex, acc| acc << hex }.map { |e| e.to_i(16) }.pack('C*')
|
|
55
55
|
|
|
56
|
-
Base64.
|
|
56
|
+
Base64.strict_encode64(binary)
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -13,9 +13,7 @@ module Datadog
|
|
|
13
13
|
# Configures the HTTP transport to communicate with the agent
|
|
14
14
|
# to fetch and sync the remote configuration
|
|
15
15
|
class Component
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
attr_reader :client
|
|
16
|
+
attr_reader :client, :healthy
|
|
19
17
|
|
|
20
18
|
def initialize(settings, capabilities, agent_settings)
|
|
21
19
|
transport_options = {}
|
|
@@ -24,14 +22,14 @@ module Datadog
|
|
|
24
22
|
negotiation = Negotiation.new(settings, agent_settings)
|
|
25
23
|
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options.dup)
|
|
26
24
|
|
|
27
|
-
@barrier = Barrier.new(
|
|
25
|
+
@barrier = Barrier.new(settings.remote.boot_timeout_seconds)
|
|
28
26
|
|
|
29
27
|
@client = Client.new(transport_v7, capabilities)
|
|
30
|
-
healthy = false
|
|
28
|
+
@healthy = false
|
|
31
29
|
Datadog.logger.debug { "new remote configuration client: #{@client.id}" }
|
|
32
30
|
|
|
33
31
|
@worker = Worker.new(interval: settings.remote.poll_interval_seconds) do
|
|
34
|
-
unless healthy || negotiation.endpoint?('/v0.7/config')
|
|
32
|
+
unless @healthy || negotiation.endpoint?('/v0.7/config')
|
|
35
33
|
@barrier.lift
|
|
36
34
|
|
|
37
35
|
next
|
|
@@ -39,7 +37,7 @@ module Datadog
|
|
|
39
37
|
|
|
40
38
|
begin
|
|
41
39
|
@client.sync
|
|
42
|
-
healthy ||= true
|
|
40
|
+
@healthy ||= true
|
|
43
41
|
rescue Client::SyncError => e
|
|
44
42
|
Datadog.logger.error do
|
|
45
43
|
"remote worker client sync error: #{e.message} location: #{Array(e.backtrace).first}. skipping sync"
|
|
@@ -57,7 +55,7 @@ module Datadog
|
|
|
57
55
|
|
|
58
56
|
# client state is unknown, state might be corrupted
|
|
59
57
|
@client = Client.new(transport_v7, capabilities)
|
|
60
|
-
healthy = false
|
|
58
|
+
@healthy = false
|
|
61
59
|
Datadog.logger.debug { "new remote configuration client: #{@client.id}" }
|
|
62
60
|
|
|
63
61
|
# TODO: bail out if too many errors?
|
|
@@ -103,17 +101,32 @@ module Datadog
|
|
|
103
101
|
def wait_once(timeout = nil)
|
|
104
102
|
# TTAS (Test and Test-And-Set) optimisation
|
|
105
103
|
# Since @once only ever goes from false to true, this is semantically valid
|
|
106
|
-
return if @once
|
|
104
|
+
return :pass if @once
|
|
107
105
|
|
|
108
106
|
begin
|
|
109
107
|
@mutex.lock
|
|
110
108
|
|
|
111
|
-
return if @once
|
|
109
|
+
return :pass if @once
|
|
112
110
|
|
|
113
111
|
timeout ||= @timeout
|
|
114
112
|
|
|
115
|
-
#
|
|
116
|
-
|
|
113
|
+
# - starting with Ruby 3.2, ConditionVariable#wait returns nil on
|
|
114
|
+
# timeout and an integer otherwise
|
|
115
|
+
# - before Ruby 3.2, ConditionVariable returns itself
|
|
116
|
+
# so we have to rely on @once having been set
|
|
117
|
+
if RUBY_VERSION >= '3.2'
|
|
118
|
+
lifted = @condition.wait(@mutex, timeout)
|
|
119
|
+
else
|
|
120
|
+
@condition.wait(@mutex, timeout)
|
|
121
|
+
lifted = @once
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
if lifted
|
|
125
|
+
:lift
|
|
126
|
+
else
|
|
127
|
+
@once = true
|
|
128
|
+
:timeout
|
|
129
|
+
end
|
|
117
130
|
ensure
|
|
118
131
|
@mutex.unlock
|
|
119
132
|
end
|
|
@@ -7,12 +7,12 @@ module Datadog
|
|
|
7
7
|
module Remote
|
|
8
8
|
# Endpoint negotiation
|
|
9
9
|
class Negotiation
|
|
10
|
-
def initialize(_settings, agent_settings)
|
|
10
|
+
def initialize(_settings, agent_settings, suppress_logging: {})
|
|
11
11
|
transport_options = {}
|
|
12
12
|
transport_options[:agent_settings] = agent_settings if agent_settings
|
|
13
13
|
|
|
14
14
|
@transport_root = Datadog::Core::Remote::Transport::HTTP.root(**transport_options.dup)
|
|
15
|
-
@logged =
|
|
15
|
+
@logged = suppress_logging
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def endpoint?(path)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../tie'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Core
|
|
7
|
+
module Remote
|
|
8
|
+
module Tie
|
|
9
|
+
# Extend Remote Configuration abilities with Tracing
|
|
10
|
+
module Tracing
|
|
11
|
+
# Tag per-request Remote Configuration metadata using Tracing
|
|
12
|
+
def self.tag(boot, span)
|
|
13
|
+
return if boot.nil?
|
|
14
|
+
return if span.nil?
|
|
15
|
+
|
|
16
|
+
return if Datadog::Core::Remote.active_remote.nil?
|
|
17
|
+
|
|
18
|
+
# TODO: this is not thread-consistent
|
|
19
|
+
ready = Datadog::Core::Remote.active_remote.healthy
|
|
20
|
+
status = ready ? 'ready' : 'disconnected'
|
|
21
|
+
|
|
22
|
+
span.set_tag('_dd.rc.client_id', Datadog::Core::Remote.active_remote.client.id)
|
|
23
|
+
span.set_tag('_dd.rc.status', status)
|
|
24
|
+
|
|
25
|
+
if boot.barrier != :pass
|
|
26
|
+
span.set_tag('_dd.rc.boot.time', boot.time)
|
|
27
|
+
|
|
28
|
+
if boot.barrier == :timeout
|
|
29
|
+
span.set_tag('_dd.rc.boot.timeout', true)
|
|
30
|
+
else
|
|
31
|
+
span.set_tag('_dd.rc.boot.ready', ready)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Remote
|
|
6
|
+
# Provide Remote Configuration extensions to other components
|
|
7
|
+
module Tie
|
|
8
|
+
Boot = Struct.new(
|
|
9
|
+
:barrier,
|
|
10
|
+
:time,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
def self.boot
|
|
14
|
+
return if Datadog::Core::Remote.active_remote.nil?
|
|
15
|
+
|
|
16
|
+
barrier = nil
|
|
17
|
+
|
|
18
|
+
t = Datadog::Core::Utils::Time.measure do
|
|
19
|
+
barrier = Datadog::Core::Remote.active_remote.barrier(:once)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Boot.new(barrier, t)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -51,7 +51,7 @@ module Datadog
|
|
|
51
51
|
|
|
52
52
|
# TODO: these fallbacks should be improved
|
|
53
53
|
roots = payload[:roots] || []
|
|
54
|
-
targets = payload[:targets] || Base64.
|
|
54
|
+
targets = payload[:targets] || Base64.strict_encode64('{}')
|
|
55
55
|
target_files = payload[:target_files] || []
|
|
56
56
|
client_configs = payload[:client_configs] || []
|
|
57
57
|
|
|
@@ -10,8 +10,8 @@ module Datadog
|
|
|
10
10
|
@thr = nil
|
|
11
11
|
|
|
12
12
|
@starting = false
|
|
13
|
-
@stopping = false
|
|
14
13
|
@started = false
|
|
14
|
+
@stopped = false
|
|
15
15
|
|
|
16
16
|
@interval = interval
|
|
17
17
|
raise ArgumentError, 'can not initialize a worker without a block' unless block
|
|
@@ -24,6 +24,11 @@ module Datadog
|
|
|
24
24
|
|
|
25
25
|
acquire_lock
|
|
26
26
|
|
|
27
|
+
if @stopped
|
|
28
|
+
Datadog.logger.debug('remote worker: refusing to restart after previous stop')
|
|
29
|
+
return
|
|
30
|
+
end
|
|
31
|
+
|
|
27
32
|
return if @starting || @started
|
|
28
33
|
|
|
29
34
|
@starting = true
|
|
@@ -46,8 +51,6 @@ module Datadog
|
|
|
46
51
|
|
|
47
52
|
acquire_lock
|
|
48
53
|
|
|
49
|
-
@stopping = true
|
|
50
|
-
|
|
51
54
|
thread = @thr
|
|
52
55
|
|
|
53
56
|
if thread
|
|
@@ -56,8 +59,8 @@ module Datadog
|
|
|
56
59
|
end
|
|
57
60
|
|
|
58
61
|
@started = false
|
|
59
|
-
@stopping = false
|
|
60
62
|
@thr = nil
|
|
63
|
+
@stopped = true
|
|
61
64
|
|
|
62
65
|
Datadog.logger.debug { 'remote worker stopped' }
|
|
63
66
|
ensure
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative 'emitter'
|
|
4
|
+
require_relative 'event'
|
|
4
5
|
require_relative 'heartbeat'
|
|
5
6
|
require_relative '../utils/forking'
|
|
6
7
|
|
|
@@ -10,21 +11,25 @@ module Datadog
|
|
|
10
11
|
# Telemetry entrypoint, coordinates sending telemetry events at various points in app lifecycle.
|
|
11
12
|
class Client
|
|
12
13
|
attr_reader \
|
|
13
|
-
:emitter,
|
|
14
14
|
:enabled,
|
|
15
|
-
:unsupported
|
|
16
|
-
:worker
|
|
15
|
+
:unsupported
|
|
17
16
|
|
|
18
17
|
include Core::Utils::Forking
|
|
19
18
|
|
|
20
19
|
# @param enabled [Boolean] Determines whether telemetry events should be sent to the API
|
|
21
20
|
# @param heartbeat_interval_seconds [Float] How frequently heartbeats will be reported, in seconds.
|
|
22
|
-
|
|
21
|
+
# @param [Boolean] dependency_collection Whether to send the `app-dependencies-loaded` event
|
|
22
|
+
def initialize(heartbeat_interval_seconds:, dependency_collection:, enabled: true)
|
|
23
23
|
@enabled = enabled
|
|
24
24
|
@emitter = Emitter.new
|
|
25
25
|
@stopped = false
|
|
26
26
|
@unsupported = false
|
|
27
|
+
@started = false
|
|
28
|
+
@dependency_collection = dependency_collection
|
|
29
|
+
|
|
27
30
|
@worker = Telemetry::Heartbeat.new(enabled: @enabled, heartbeat_interval_seconds: heartbeat_interval_seconds) do
|
|
31
|
+
next unless @started # `started!` should be the first event, thus ensure that `heartbeat!` is not sent first.
|
|
32
|
+
|
|
28
33
|
heartbeat!
|
|
29
34
|
end
|
|
30
35
|
end
|
|
@@ -37,21 +42,24 @@ module Datadog
|
|
|
37
42
|
def started!
|
|
38
43
|
return if !@enabled || forked?
|
|
39
44
|
|
|
40
|
-
res = @emitter.request(
|
|
45
|
+
res = @emitter.request(Event::AppStarted.new)
|
|
41
46
|
|
|
42
47
|
if res.not_found? # Telemetry is only supported by agent versions 7.34 and up
|
|
43
48
|
Datadog.logger.debug('Agent does not support telemetry; disabling future telemetry events.')
|
|
44
49
|
disable!
|
|
45
50
|
@unsupported = true # Prevent telemetry from getting re-enabled
|
|
51
|
+
return res
|
|
46
52
|
end
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
@emitter.request(Event::AppDependenciesLoaded.new) if @dependency_collection
|
|
55
|
+
|
|
56
|
+
@started = true
|
|
49
57
|
end
|
|
50
58
|
|
|
51
59
|
def emit_closing!
|
|
52
60
|
return if !@enabled || forked?
|
|
53
61
|
|
|
54
|
-
@emitter.request(
|
|
62
|
+
@emitter.request(Event::AppClosing.new)
|
|
55
63
|
end
|
|
56
64
|
|
|
57
65
|
def stop!
|
|
@@ -64,14 +72,14 @@ module Datadog
|
|
|
64
72
|
def integrations_change!
|
|
65
73
|
return if !@enabled || forked?
|
|
66
74
|
|
|
67
|
-
@emitter.request(
|
|
75
|
+
@emitter.request(Event::AppIntegrationsChange.new)
|
|
68
76
|
end
|
|
69
77
|
|
|
70
78
|
# Report configuration changes caused by Remote Configuration.
|
|
71
79
|
def client_configuration_change!(changes)
|
|
72
80
|
return if !@enabled || forked?
|
|
73
81
|
|
|
74
|
-
@emitter.request(
|
|
82
|
+
@emitter.request(Event::AppClientConfigurationChange.new(changes, 'remote_config'))
|
|
75
83
|
end
|
|
76
84
|
|
|
77
85
|
private
|
|
@@ -79,7 +87,7 @@ module Datadog
|
|
|
79
87
|
def heartbeat!
|
|
80
88
|
return if !@enabled || forked?
|
|
81
89
|
|
|
82
|
-
@emitter.request(
|
|
90
|
+
@emitter.request(Event::AppHeartbeat.new)
|
|
83
91
|
end
|
|
84
92
|
end
|
|
85
93
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative '
|
|
1
|
+
require_relative 'request'
|
|
2
2
|
require_relative 'http/transport'
|
|
3
3
|
require_relative '../utils/sequence'
|
|
4
4
|
require_relative '../utils/forking'
|
|
@@ -12,7 +12,6 @@ module Datadog
|
|
|
12
12
|
|
|
13
13
|
extend Core::Utils::Forking
|
|
14
14
|
|
|
15
|
-
# @param sequence [Datadog::Core::Utils::Sequence] Sequence object that stores and increments a counter
|
|
16
15
|
# @param http_transport [Datadog::Core::Telemetry::Http::Transport] Transport object that can be used to send
|
|
17
16
|
# telemetry requests via the agent
|
|
18
17
|
def initialize(http_transport: Datadog::Core::Telemetry::Http::Transport.new)
|
|
@@ -20,18 +19,15 @@ module Datadog
|
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
# Retrieves and emits a TelemetryRequest object based on the request type specified
|
|
23
|
-
|
|
24
|
-
# @param data [Object] arbitrary object to be passed to the respective `request_type` handler
|
|
25
|
-
def request(request_type, data: nil)
|
|
22
|
+
def request(event)
|
|
26
23
|
begin
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Datadog.logger.debug("Unable to send telemetry request for event `#{request_type}`: #{e}")
|
|
24
|
+
seq_id = self.class.sequence.next
|
|
25
|
+
payload = Request.build_payload(event, seq_id)
|
|
26
|
+
res = @http_transport.request(request_type: event.type, payload: payload.to_json)
|
|
27
|
+
Datadog.logger.debug { "Telemetry sent for event `#{event.type}` (code: #{res.code.inspect})" }
|
|
28
|
+
res
|
|
29
|
+
rescue => e
|
|
30
|
+
Datadog.logger.debug("Unable to send telemetry request for event `#{event.type rescue 'unknown'}`: #{e}")
|
|
35
31
|
Telemetry::Http::InternalErrorResponse.new(e)
|
|
36
32
|
end
|
|
37
33
|
end
|