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/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/stack_recorder.h
RENAMED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
3
|
#include <datadog/profiling.h>
|
|
4
|
+
#include <ruby.h>
|
|
4
5
|
|
|
5
6
|
typedef struct {
|
|
6
7
|
int64_t cpu_time_ns;
|
|
7
8
|
int64_t wall_time_ns;
|
|
8
9
|
uint32_t cpu_or_wall_samples;
|
|
9
10
|
uint32_t alloc_samples;
|
|
11
|
+
int64_t timeline_wall_time_ns;
|
|
10
12
|
} sample_values;
|
|
11
13
|
|
|
12
14
|
typedef struct sample_labels {
|
|
@@ -21,4 +23,5 @@ typedef struct sample_labels {
|
|
|
21
23
|
|
|
22
24
|
void record_sample(VALUE recorder_instance, ddog_prof_Slice_Location locations, sample_values values, sample_labels labels);
|
|
23
25
|
void record_endpoint(VALUE recorder_instance, uint64_t local_root_span_id, ddog_CharSlice endpoint);
|
|
26
|
+
void track_object(VALUE recorder_instance, VALUE new_object, unsigned int sample_weight, ddog_CharSlice *alloc_class);
|
|
24
27
|
VALUE enforce_recorder_instance(VALUE object);
|
|
@@ -13,12 +13,16 @@ module Datadog
|
|
|
13
13
|
SIGNUP_EVENT = 'users.signup'
|
|
14
14
|
|
|
15
15
|
def self.track_login_success(trace, span, user_id:, **others)
|
|
16
|
+
return if trace.nil? || span.nil?
|
|
17
|
+
|
|
16
18
|
track(LOGIN_SUCCESS_EVENT, trace, span, **others)
|
|
17
19
|
|
|
18
20
|
Kit::Identity.set_user(trace, span, id: user_id.to_s, **others) if user_id
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
def self.track_login_failure(trace, span, user_id:, user_exists:, **others)
|
|
24
|
+
return if trace.nil? || span.nil?
|
|
25
|
+
|
|
22
26
|
track(LOGIN_FAILURE_EVENT, trace, span, **others)
|
|
23
27
|
|
|
24
28
|
span.set_tag('appsec.events.users.login.failure.usr.id', user_id) if user_id
|
|
@@ -26,11 +30,15 @@ module Datadog
|
|
|
26
30
|
end
|
|
27
31
|
|
|
28
32
|
def self.track_signup(trace, span, user_id:, **others)
|
|
33
|
+
return if trace.nil? || span.nil?
|
|
34
|
+
|
|
29
35
|
track(SIGNUP_EVENT, trace, span, **others)
|
|
30
36
|
Kit::Identity.set_user(trace, id: user_id.to_s, **others) if user_id
|
|
31
37
|
end
|
|
32
38
|
|
|
33
39
|
def self.track(event, trace, span, **others)
|
|
40
|
+
return if trace.nil? || span.nil?
|
|
41
|
+
|
|
34
42
|
span.set_tag("appsec.events.#{event}.track", 'true')
|
|
35
43
|
span.set_tag("_dd.appsec.events.#{event}.auto.mode", Datadog.configuration.appsec.track_user_events.mode)
|
|
36
44
|
|
|
@@ -13,6 +13,18 @@ module Datadog
|
|
|
13
13
|
module AppSec
|
|
14
14
|
module Contrib
|
|
15
15
|
module Rack
|
|
16
|
+
# Create an array of lowercased headers
|
|
17
|
+
WAF_VENDOR_HEADERS_TAGS = %w[
|
|
18
|
+
X-Amzn-Trace-Id
|
|
19
|
+
Cloudfront-Viewer-Ja3-Fingerprint
|
|
20
|
+
Cf-Ray
|
|
21
|
+
X-Cloud-Trace-Context
|
|
22
|
+
X-Appgw-Trace-id
|
|
23
|
+
X-SigSci-RequestID
|
|
24
|
+
X-SigSci-Tags
|
|
25
|
+
Akamai-User-Risk
|
|
26
|
+
].map(&:downcase).freeze
|
|
27
|
+
|
|
16
28
|
# Topmost Rack middleware for AppSec
|
|
17
29
|
# This should be inserted just below Datadog::Tracing::Contrib::Rack::TraceMiddleware
|
|
18
30
|
class RequestMiddleware
|
|
@@ -20,13 +32,15 @@ module Datadog
|
|
|
20
32
|
@app = app
|
|
21
33
|
|
|
22
34
|
@oneshot_tags_sent = false
|
|
35
|
+
@rack_headers = {}
|
|
23
36
|
end
|
|
24
37
|
|
|
25
38
|
# rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity,Metrics/CyclomaticComplexity,Metrics/MethodLength
|
|
26
39
|
def call(env)
|
|
27
40
|
return @app.call(env) unless Datadog::AppSec.enabled?
|
|
28
41
|
|
|
29
|
-
|
|
42
|
+
boot = Datadog::Core::Remote::Tie.boot
|
|
43
|
+
Datadog::Core::Remote::Tie::Tracing.tag(boot, active_span)
|
|
30
44
|
|
|
31
45
|
processor = nil
|
|
32
46
|
ready = false
|
|
@@ -53,7 +67,8 @@ module Datadog
|
|
|
53
67
|
|
|
54
68
|
gateway_request = Gateway::Request.new(env)
|
|
55
69
|
|
|
56
|
-
add_appsec_tags(processor, scope
|
|
70
|
+
add_appsec_tags(processor, scope)
|
|
71
|
+
add_request_tags(scope, env)
|
|
57
72
|
|
|
58
73
|
request_return, request_response = catch(::Datadog::AppSec::Ext::INTERRUPT) do
|
|
59
74
|
Instrumentation.gateway.push('rack.request', gateway_request) do
|
|
@@ -128,7 +143,7 @@ module Datadog
|
|
|
128
143
|
Datadog::Tracing.active_span
|
|
129
144
|
end
|
|
130
145
|
|
|
131
|
-
def add_appsec_tags(processor, scope
|
|
146
|
+
def add_appsec_tags(processor, scope)
|
|
132
147
|
span = scope.service_entry_span
|
|
133
148
|
trace = scope.trace
|
|
134
149
|
|
|
@@ -138,17 +153,6 @@ module Datadog
|
|
|
138
153
|
span.set_tag('_dd.runtime_family', 'ruby')
|
|
139
154
|
span.set_tag('_dd.appsec.waf.version', Datadog::AppSec::WAF::VERSION::BASE_STRING)
|
|
140
155
|
|
|
141
|
-
if span && span.get_tag(Tracing::Metadata::Ext::HTTP::TAG_CLIENT_IP).nil?
|
|
142
|
-
request_header_collection = Datadog::Tracing::Contrib::Rack::Header::RequestHeaderCollection.new(env)
|
|
143
|
-
|
|
144
|
-
# always collect client ip, as this is part of AppSec provided functionality
|
|
145
|
-
Datadog::Tracing::ClientIp.set_client_ip_tag!(
|
|
146
|
-
span,
|
|
147
|
-
headers: request_header_collection,
|
|
148
|
-
remote_ip: env['REMOTE_ADDR']
|
|
149
|
-
)
|
|
150
|
-
end
|
|
151
|
-
|
|
152
156
|
if processor.diagnostics
|
|
153
157
|
diagnostics = processor.diagnostics
|
|
154
158
|
|
|
@@ -174,6 +178,29 @@ module Datadog
|
|
|
174
178
|
end
|
|
175
179
|
end
|
|
176
180
|
|
|
181
|
+
def add_request_tags(scope, env)
|
|
182
|
+
span = scope.service_entry_span
|
|
183
|
+
|
|
184
|
+
return unless span
|
|
185
|
+
|
|
186
|
+
# Always add WAF vendors headers
|
|
187
|
+
WAF_VENDOR_HEADERS_TAGS.each do |lowercase_header|
|
|
188
|
+
rack_header = to_rack_header(lowercase_header)
|
|
189
|
+
span.set_tag("http.request.headers.#{lowercase_header}", env[rack_header]) if env[rack_header]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
if span && span.get_tag(Tracing::Metadata::Ext::HTTP::TAG_CLIENT_IP).nil?
|
|
193
|
+
request_header_collection = Datadog::Tracing::Contrib::Rack::Header::RequestHeaderCollection.new(env)
|
|
194
|
+
|
|
195
|
+
# always collect client ip, as this is part of AppSec provided functionality
|
|
196
|
+
Datadog::Tracing::ClientIp.set_client_ip_tag!(
|
|
197
|
+
span,
|
|
198
|
+
headers: request_header_collection,
|
|
199
|
+
remote_ip: env['REMOTE_ADDR']
|
|
200
|
+
)
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
177
204
|
def add_waf_runtime_tags(scope)
|
|
178
205
|
span = scope.service_entry_span
|
|
179
206
|
context = scope.processor_context
|
|
@@ -186,6 +213,10 @@ module Datadog
|
|
|
186
213
|
span.set_tag('_dd.appsec.waf.duration', context.time_ns / 1000.0)
|
|
187
214
|
span.set_tag('_dd.appsec.waf.duration_ext', context.time_ext_ns / 1000.0)
|
|
188
215
|
end
|
|
216
|
+
|
|
217
|
+
def to_rack_header(header)
|
|
218
|
+
@rack_headers[header] ||= Datadog::Tracing::Contrib::Rack::Header.to_rack_header(header)
|
|
219
|
+
end
|
|
189
220
|
end
|
|
190
221
|
end
|
|
191
222
|
end
|
data/lib/datadog/appsec/event.rb
CHANGED
|
@@ -138,7 +138,7 @@ module Datadog
|
|
|
138
138
|
private
|
|
139
139
|
|
|
140
140
|
def compressed_and_base64_encoded(value)
|
|
141
|
-
Base64.
|
|
141
|
+
Base64.strict_encode64(gzip(value))
|
|
142
142
|
rescue TypeError => e
|
|
143
143
|
Datadog.logger.debug do
|
|
144
144
|
"Failed to compress and encode value when populating AppSec::Event. Error: #{e.message}"
|
|
@@ -62,7 +62,8 @@ module Datadog
|
|
|
62
62
|
|
|
63
63
|
Telemetry::Client.new(
|
|
64
64
|
enabled: enabled,
|
|
65
|
-
heartbeat_interval_seconds: settings.telemetry.heartbeat_interval_seconds
|
|
65
|
+
heartbeat_interval_seconds: settings.telemetry.heartbeat_interval_seconds,
|
|
66
|
+
dependency_collection: settings.telemetry.dependency_collection
|
|
66
67
|
)
|
|
67
68
|
end
|
|
68
69
|
end
|
|
@@ -81,6 +82,7 @@ module Datadog
|
|
|
81
82
|
|
|
82
83
|
def initialize(settings)
|
|
83
84
|
@logger = self.class.build_logger(settings)
|
|
85
|
+
@environment_logger_extra = {}
|
|
84
86
|
|
|
85
87
|
# This agent_settings is intended for use within Core. If you require
|
|
86
88
|
# agent_settings within a product outside of core you should extend
|
|
@@ -90,11 +92,13 @@ module Datadog
|
|
|
90
92
|
@remote = Remote::Component.build(settings, agent_settings)
|
|
91
93
|
@tracer = self.class.build_tracer(settings, logger: @logger)
|
|
92
94
|
|
|
93
|
-
@profiler = Datadog::Profiling::Component.build_profiler_component(
|
|
95
|
+
@profiler, profiler_logger_extra = Datadog::Profiling::Component.build_profiler_component(
|
|
94
96
|
settings: settings,
|
|
95
97
|
agent_settings: agent_settings,
|
|
96
98
|
optional_tracer: @tracer,
|
|
97
99
|
)
|
|
100
|
+
@environment_logger_extra.merge!(profiler_logger_extra) if profiler_logger_extra
|
|
101
|
+
|
|
98
102
|
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
|
99
103
|
@health_metrics = self.class.build_health_metrics(settings)
|
|
100
104
|
@telemetry = self.class.build_telemetry(settings, agent_settings, logger)
|
|
@@ -105,18 +109,15 @@ module Datadog
|
|
|
105
109
|
def startup!(settings)
|
|
106
110
|
if settings.profiling.enabled
|
|
107
111
|
if profiler
|
|
108
|
-
@logger.debug('Profiling started')
|
|
109
112
|
profiler.start
|
|
110
113
|
else
|
|
111
114
|
# Display a warning for users who expected profiling to be enabled
|
|
112
115
|
unsupported_reason = Profiling.unsupported_reason
|
|
113
116
|
logger.warn("Profiling was requested but is not supported, profiling disabled: #{unsupported_reason}")
|
|
114
117
|
end
|
|
115
|
-
else
|
|
116
|
-
@logger.debug('Profiling is disabled')
|
|
117
118
|
end
|
|
118
119
|
|
|
119
|
-
Core::Diagnostics::EnvironmentLogger.collect_and_log!
|
|
120
|
+
Core::Diagnostics::EnvironmentLogger.collect_and_log!(@environment_logger_extra)
|
|
120
121
|
end
|
|
121
122
|
|
|
122
123
|
# Shuts down all the components in use.
|
|
@@ -8,7 +8,13 @@ module Datadog
|
|
|
8
8
|
# Represents an instance of an integration configuration option
|
|
9
9
|
# @public_api
|
|
10
10
|
class Option
|
|
11
|
-
|
|
11
|
+
# @!attribute [r] definition
|
|
12
|
+
# The definition object that matches this option.
|
|
13
|
+
# @return [Configuration::OptionDefinition]
|
|
14
|
+
# @!attribute [r] precedence_set
|
|
15
|
+
# When this option was last set, what was the value precedence used?
|
|
16
|
+
# @return [Precedence::Value]
|
|
17
|
+
attr_reader :definition, :precedence_set
|
|
12
18
|
|
|
13
19
|
# Option setting precedence.
|
|
14
20
|
module Precedence
|
|
@@ -264,7 +270,7 @@ module Datadog
|
|
|
264
270
|
# when restoring a value from `@value_per_precedence`, and we are only running `definition.setter`
|
|
265
271
|
# on the original value, not on a valud that has already been processed by `definition.setter`.
|
|
266
272
|
@value_per_precedence[precedence] = value
|
|
267
|
-
context_exec(v, old_value, &definition.after_set) if definition.after_set
|
|
273
|
+
context_exec(v, old_value, precedence, &definition.after_set) if definition.after_set
|
|
268
274
|
end
|
|
269
275
|
end
|
|
270
276
|
|
|
@@ -303,10 +309,6 @@ module Datadog
|
|
|
303
309
|
['true', '1'].include?(ENV.fetch('DD_EXPERIMENTAL_SKIP_CONFIGURATION_VALIDATION', '').strip)
|
|
304
310
|
end
|
|
305
311
|
|
|
306
|
-
# Used for testing
|
|
307
|
-
attr_reader :precedence_set
|
|
308
|
-
private :precedence_set
|
|
309
|
-
|
|
310
312
|
# Anchor object that represents a value that is not set.
|
|
311
313
|
# This is necessary because `nil` is a valid value to be set.
|
|
312
314
|
UNSET = Object.new
|