datadog 2.39.0 → 2.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +97 -44
- data/ext/datadog_profiling_native_extension/collectors_stack.c +219 -148
- data/ext/datadog_profiling_native_extension/collectors_stack.h +16 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +12 -7
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +19 -11
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +12 -7
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -3
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +284 -76
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +16 -10
- data/ext/libdatadog_api/datadog_ruby_common.c +19 -11
- data/ext/libdatadog_api/datadog_ruby_common.h +7 -0
- data/ext/libdatadog_api/init.c +4 -0
- data/ext/libdatadog_api/trace_exporter.c +1312 -0
- data/ext/libdatadog_api/trace_exporter.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/ai_guard/api_client.rb +1 -1
- data/lib/datadog/ai_guard/evaluation/request.rb +8 -8
- data/lib/datadog/ai_guard/evaluation.rb +11 -3
- data/lib/datadog/ai_guard/ext.rb +3 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +21 -42
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +1 -1
- data/lib/datadog/appsec/configuration.rb +11 -2
- data/lib/datadog/appsec/context.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +1 -1
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +2 -2
- data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +2 -2
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +2 -2
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +6 -3
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +2 -2
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
- data/lib/datadog/appsec/processor/rule_loader.rb +12 -12
- data/lib/datadog/appsec/response.rb +1 -1
- data/lib/datadog/appsec/route_normalizer/route_pattern.rb +3 -3
- data/lib/datadog/appsec/security_engine/engine.rb +3 -3
- data/lib/datadog/core/configuration/components.rb +2 -2
- data/lib/datadog/core/configuration/option_definition.rb +1 -1
- data/lib/datadog/core/configuration/options.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +33 -41
- data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +36 -1
- data/lib/datadog/core/environment/gc.rb +1 -1
- data/lib/datadog/core/environment/vm_cache.rb +1 -1
- data/lib/datadog/core/environment/yjit.rb +2 -2
- data/lib/datadog/core/metrics/helpers.rb +1 -1
- data/lib/datadog/core/metrics/options.rb +2 -2
- data/lib/datadog/core/process_discovery.rb +1 -1
- data/lib/datadog/core/remote/client.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +2 -2
- data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +3 -1
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +1 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +5 -24
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +1 -1
- data/lib/datadog/core/telemetry/event/log.rb +2 -2
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +1 -1
- data/lib/datadog/core/telemetry/metric.rb +2 -2
- data/lib/datadog/core/telemetry/request.rb +2 -2
- data/lib/datadog/core/transport/http.rb +1 -1
- data/lib/datadog/core/transport/transport.rb +1 -1
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +170 -18
- data/lib/datadog/core/utils/sequence.rb +3 -6
- data/lib/datadog/core/utils/time.rb +16 -54
- data/lib/datadog/data_streams/processor.rb +14 -14
- data/lib/datadog/di/el/compiler.rb +88 -12
- data/lib/datadog/di/el/evaluator.rb +82 -2
- data/lib/datadog/di/el/expression.rb +13 -2
- data/lib/datadog/di/instrumenter.rb +5 -4
- data/lib/datadog/di/probe_builder.rb +7 -6
- data/lib/datadog/di/probe_notification_builder.rb +2 -2
- data/lib/datadog/di/serializer.rb +29 -4
- data/lib/datadog/error_tracking/component.rb +1 -1
- data/lib/datadog/kit/appsec/events/v2.rb +2 -2
- data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
- data/lib/datadog/open_feature/exposures/event.rb +5 -5
- data/lib/datadog/profiling/collectors/info.rb +1 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +6 -13
- data/lib/datadog/profiling/component.rb +1 -0
- data/lib/datadog/profiling/tasks/exec.rb +1 -1
- data/lib/datadog/profiling.rb +4 -0
- data/lib/datadog/symbol_database/extractor.rb +6 -6
- data/lib/datadog/tracing/component.rb +21 -0
- data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +5 -3
- data/lib/datadog/tracing/configuration/ext.rb +1 -0
- data/lib/datadog/tracing/configuration/settings.rb +16 -0
- data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +2 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +4 -0
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +7 -2
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +7 -2
- data/lib/datadog/tracing/contrib/kafka/events.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/patchable.rb +1 -1
- data/lib/datadog/tracing/contrib/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/quantize.rb +36 -2
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +9 -3
- data/lib/datadog/tracing/contrib/sequel/database.rb +1 -5
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash_formatter.rb +1 -1
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +1 -1
- data/lib/datadog/tracing/correlation.rb +2 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +2 -2
- data/lib/datadog/tracing/distributed/baggage.rb +1 -2
- data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
- data/lib/datadog/tracing/metadata/tagging.rb +1 -1
- data/lib/datadog/tracing/remote.rb +2 -2
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_operation.rb +1 -1
- data/lib/datadog/tracing/sync_writer.rb +8 -3
- data/lib/datadog/tracing/tracer.rb +8 -0
- data/lib/datadog/tracing/transport/io/traces.rb +1 -1
- data/lib/datadog/tracing/transport/native/response.rb +71 -0
- data/lib/datadog/tracing/transport/native.rb +387 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +1 -1
- data/lib/datadog/tracing/writer.rb +17 -4
- data/lib/datadog/version.rb +1 -1
- metadata +12 -7
|
@@ -108,9 +108,9 @@ module Datadog
|
|
|
108
108
|
headers: {
|
|
109
109
|
# The exception this controller was given in the request,
|
|
110
110
|
# which is typical if the controller is configured to handle exceptions.
|
|
111
|
-
request_exception: request.headers["action_dispatch.exception"]
|
|
111
|
+
request_exception: request.headers["action_dispatch.exception"],
|
|
112
112
|
},
|
|
113
|
-
tracing_context: {}
|
|
113
|
+
tracing_context: {},
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
begin
|
|
@@ -32,7 +32,7 @@ module Datadog
|
|
|
32
32
|
|
|
33
33
|
def span_options
|
|
34
34
|
{
|
|
35
|
-
type: Ext::SPAN_TYPE_CACHE
|
|
35
|
+
type: Ext::SPAN_TYPE_CACHE,
|
|
36
36
|
}
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -42,7 +42,7 @@ module Datadog
|
|
|
42
42
|
"cache_read.active_support" => {resource: Ext::RESOURCE_CACHE_GET},
|
|
43
43
|
"cache_read_multi.active_support" => {resource: Ext::RESOURCE_CACHE_MGET, multi_key: true},
|
|
44
44
|
"cache_write.active_support" => {resource: Ext::RESOURCE_CACHE_SET},
|
|
45
|
-
"cache_write_multi.active_support" => {resource: Ext::RESOURCE_CACHE_MSET, multi_key: true}
|
|
45
|
+
"cache_write_multi.active_support" => {resource: Ext::RESOURCE_CACHE_MSET, multi_key: true},
|
|
46
46
|
}.freeze
|
|
47
47
|
|
|
48
48
|
def trace?(event, payload)
|
|
@@ -42,7 +42,7 @@ module Datadog
|
|
|
42
42
|
TAG_STATE_MACHINE_NAME,
|
|
43
43
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
|
44
44
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
|
45
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST
|
|
45
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -31,7 +31,7 @@ module Datadog
|
|
|
31
31
|
PEER_SERVICE_SOURCES = [TAG_INSTANCE,
|
|
32
32
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
|
33
33
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
|
34
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST
|
|
34
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
module RPC
|
|
@@ -41,7 +41,7 @@ module Datadog
|
|
|
41
41
|
PEER_SERVICE_SOURCES = [TAG_SERVICE,
|
|
42
42
|
Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
|
43
43
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
|
44
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST
|
|
44
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
|
|
45
45
|
module GRPC
|
|
46
46
|
TAG_STATUS_CODE = "rpc.grpc.status_code"
|
|
47
47
|
TAG_FULL_METHOD = "rpc.grpc.full_method"
|
|
@@ -53,7 +53,7 @@ module Datadog
|
|
|
53
53
|
TAG_DESTINATION = "messaging.destination"
|
|
54
54
|
PEER_SERVICE_SOURCES = [Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
|
|
55
55
|
Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
|
|
56
|
-
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST
|
|
56
|
+
Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
module Metadata
|
|
@@ -25,7 +25,7 @@ module Datadog
|
|
|
25
25
|
type: Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND,
|
|
26
26
|
service: service_name, # Maintain client-side service name configuration
|
|
27
27
|
resource: formatter.resource_name,
|
|
28
|
-
on_error: on_error
|
|
28
|
+
on_error: on_error,
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
Tracing.trace(Ext::SPAN_CLIENT, **options) do |span, trace|
|
|
@@ -26,7 +26,7 @@ module Datadog
|
|
|
26
26
|
type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND,
|
|
27
27
|
service: service_name, # TODO: Remove server-side service name configuration
|
|
28
28
|
resource: formatter.resource_name,
|
|
29
|
-
on_error: on_error
|
|
29
|
+
on_error: on_error,
|
|
30
30
|
}
|
|
31
31
|
metadata = keywords[:call].metadata
|
|
32
32
|
|
|
@@ -35,7 +35,7 @@ module Datadog
|
|
|
35
35
|
Tracing::Distributed::TraceContext.new(fetcher: Fetcher),
|
|
36
36
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
|
|
37
37
|
Tracing::Distributed::Baggage.new(fetcher: Fetcher),
|
|
38
|
-
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
|
|
38
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new,
|
|
39
39
|
},
|
|
40
40
|
propagation_style_inject: propagation_style_inject,
|
|
41
41
|
propagation_style_extract: propagation_style_extract,
|
|
@@ -10,7 +10,8 @@ module Datadog
|
|
|
10
10
|
# Hanami Instrumentation for `hanami.routing`
|
|
11
11
|
module RouterTracing
|
|
12
12
|
def call(env)
|
|
13
|
-
|
|
13
|
+
active_span = Tracing.active_span
|
|
14
|
+
return super if active_span && active_span.name == Ext::SPAN_ROUTING
|
|
14
15
|
|
|
15
16
|
Tracing.trace(
|
|
16
17
|
Ext::SPAN_ROUTING,
|
|
@@ -21,6 +21,10 @@ module Datadog
|
|
|
21
21
|
super
|
|
22
22
|
|
|
23
23
|
span.resource = payload[:api]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def on_finish(span, _event, _id, payload)
|
|
27
|
+
super
|
|
24
28
|
|
|
25
29
|
span.set_tag(Ext::TAG_REQUEST_SIZE, payload[:request_size]) if payload.key?(:request_size)
|
|
26
30
|
span.set_tag(Ext::TAG_RESPONSE_SIZE, payload[:response_size]) if payload.key?(:response_size)
|
|
@@ -17,12 +17,17 @@ module Datadog
|
|
|
17
17
|
|
|
18
18
|
module_function
|
|
19
19
|
|
|
20
|
-
def on_start(span, _event, _id,
|
|
20
|
+
def on_start(span, _event, _id, _payload)
|
|
21
|
+
super
|
|
22
|
+
|
|
23
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def on_finish(span, _event, _id, payload)
|
|
21
27
|
super
|
|
22
28
|
|
|
23
29
|
span.set_tag(Ext::TAG_MESSAGE_COUNT, payload[:message_count]) if payload.key?(:message_count)
|
|
24
30
|
span.set_tag(Ext::TAG_SENT_MESSAGE_COUNT, payload[:sent_message_count]) if payload.key?(:sent_message_count)
|
|
25
|
-
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
def span_name
|
|
@@ -17,7 +17,13 @@ module Datadog
|
|
|
17
17
|
|
|
18
18
|
module_function
|
|
19
19
|
|
|
20
|
-
def on_start(span, _event, _id,
|
|
20
|
+
def on_start(span, _event, _id, _payload)
|
|
21
|
+
super
|
|
22
|
+
|
|
23
|
+
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def on_finish(span, _event, _id, payload)
|
|
21
27
|
super
|
|
22
28
|
|
|
23
29
|
span.set_tag(Ext::TAG_ATTEMPTS, payload[:attempts]) if payload.key?(:attempts)
|
|
@@ -25,7 +31,6 @@ module Datadog
|
|
|
25
31
|
if payload.key?(:delivered_message_count)
|
|
26
32
|
span.set_tag(Ext::TAG_DELIVERED_MESSAGE_COUNT, payload[:delivered_message_count])
|
|
27
33
|
end
|
|
28
|
-
span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
def span_name
|
|
@@ -34,7 +34,7 @@ module Datadog
|
|
|
34
34
|
Tracing::Distributed::TraceContext.new(fetcher: Tracing::Distributed::Fetcher),
|
|
35
35
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
|
|
36
36
|
Tracing::Distributed::Baggage.new(fetcher: Tracing::Distributed::Fetcher),
|
|
37
|
-
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
|
|
37
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new,
|
|
38
38
|
},
|
|
39
39
|
propagation_style_inject: propagation_style_inject,
|
|
40
40
|
propagation_style_extract: propagation_style_extract,
|
|
@@ -18,7 +18,7 @@ module Datadog
|
|
|
18
18
|
RELATIVE_RESOURCE_PATTERN = "relative"
|
|
19
19
|
VALID_RESOURCE_PATTERNS = [
|
|
20
20
|
ABSOLUTE_RESOURCE_PATTERN,
|
|
21
|
-
RELATIVE_RESOURCE_PATTERN
|
|
21
|
+
RELATIVE_RESOURCE_PATTERN,
|
|
22
22
|
].freeze
|
|
23
23
|
# Default should be changed to RELATIVE in 3.0 to match the Elasticsearch integration
|
|
24
24
|
DEFAULT_RESOURCE_PATTERN = ABSOLUTE_RESOURCE_PATTERN
|
|
@@ -12,7 +12,7 @@ module Datadog
|
|
|
12
12
|
trace_options = {
|
|
13
13
|
service: configuration[:service_name],
|
|
14
14
|
type: Tracing::Metadata::Ext::AppTypes::TYPE_WORKER,
|
|
15
|
-
on_error: configuration[:on_error]
|
|
15
|
+
on_error: configuration[:on_error],
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
Tracing.trace(Ext::SPAN_JOB, **trace_options) do |request_span|
|
|
@@ -27,7 +27,7 @@ module Datadog
|
|
|
27
27
|
options = {
|
|
28
28
|
service: configuration[:web_service_name],
|
|
29
29
|
start_time: start_time,
|
|
30
|
-
type: Tracing::Metadata::Ext::HTTP::TYPE_PROXY
|
|
30
|
+
type: Tracing::Metadata::Ext::HTTP::TYPE_PROXY,
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
request_span = Tracing.trace(Ext::SPAN_HTTP_PROXY_REQUEST, **options)
|
|
@@ -15,6 +15,9 @@ module Datadog
|
|
|
15
15
|
|
|
16
16
|
AUTH_COMMANDS = %w[AUTH auth].freeze
|
|
17
17
|
|
|
18
|
+
CONNECTION_SETUP_COMMANDS = Set.new(%w[HELLO]).freeze
|
|
19
|
+
CLIENT_CONNECTION_SETUP_SUBCOMMANDS = Set.new(%w[SETINFO SETNAME]).freeze
|
|
20
|
+
|
|
18
21
|
MULTI_VERB_COMMANDS = Set.new(
|
|
19
22
|
%w[
|
|
20
23
|
ACL
|
|
@@ -40,7 +43,7 @@ module Datadog
|
|
|
40
43
|
|
|
41
44
|
def format_command_args(command_args)
|
|
42
45
|
command_args = resolve_command_args(command_args)
|
|
43
|
-
return "AUTH ?" if auth_command?(command_args)
|
|
46
|
+
return "AUTH ?" if auth_command?(command_args) || hello_auth_command?(command_args)
|
|
44
47
|
|
|
45
48
|
verb, *args = command_args.map { |x| format_arg(x) }
|
|
46
49
|
Core::Utils.truncate("#{verb.upcase} #{args.join(" ")}", CMD_MAX_LEN, TOO_LONG_MARK)
|
|
@@ -51,6 +54,8 @@ module Datadog
|
|
|
51
54
|
|
|
52
55
|
return get_verb(command_args.first) if command_args.first.is_a?(Array)
|
|
53
56
|
|
|
57
|
+
return "AUTH" if hello_auth_command?(command_args)
|
|
58
|
+
|
|
54
59
|
verb = command_args.first.to_s.upcase
|
|
55
60
|
return verb unless MULTI_VERB_COMMANDS.include?(verb) && command_args[1]
|
|
56
61
|
|
|
@@ -64,6 +69,35 @@ module Datadog
|
|
|
64
69
|
AUTH_COMMANDS.include?(verb)
|
|
65
70
|
end
|
|
66
71
|
|
|
72
|
+
# Identifies a RESP3 `HELLO ... AUTH user pass` handshake command, which embeds
|
|
73
|
+
# credentials the same way a standalone `AUTH` command does and must be redacted
|
|
74
|
+
# (and kept visible as its own span) rather than treated as a silent connection
|
|
75
|
+
# bootstrap command.
|
|
76
|
+
def hello_auth_command?(command_args)
|
|
77
|
+
return false unless command_args.is_a?(Array) && !command_args.empty?
|
|
78
|
+
|
|
79
|
+
# `redis-client` always emits this as `["HELLO", "3", "AUTH", username, password]` — check
|
|
80
|
+
# the fixed "AUTH" keyword position only, never the username/password values themselves,
|
|
81
|
+
# since those are untrusted, possibly-binary bulk strings that `#upcase` can raise on.
|
|
82
|
+
return false if command_args.length < 3
|
|
83
|
+
command_args[0].to_s.upcase == "HELLO" && command_args[2].to_s.upcase == "AUTH"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Identifies protocol-level connection bootstrap commands (`HELLO`, `CLIENT SETINFO`,
|
|
87
|
+
# `CLIENT SETNAME`) that `redis-client` sends as part of its per-connection handshake,
|
|
88
|
+
# so they can be excluded from pipeline resource naming. A `HELLO` carrying `AUTH`
|
|
89
|
+
# credentials is excluded from this so authentication remains visible as its own span.
|
|
90
|
+
def connection_setup_command?(command_args)
|
|
91
|
+
command_args = resolve_command_args(command_args)
|
|
92
|
+
return false unless command_args.is_a?(Array) && !command_args.empty?
|
|
93
|
+
return false if hello_auth_command?(command_args)
|
|
94
|
+
|
|
95
|
+
verb = command_args.first.to_s.upcase
|
|
96
|
+
return true if CONNECTION_SETUP_COMMANDS.include?(verb)
|
|
97
|
+
|
|
98
|
+
verb == "CLIENT" && CLIENT_CONNECTION_SETUP_SUBCOMMANDS.include?(command_args[1].to_s.upcase)
|
|
99
|
+
end
|
|
100
|
+
|
|
67
101
|
# Unwraps command array when Redis is called with the following syntax:
|
|
68
102
|
# redis.call([:cmd, 'arg1', ...])
|
|
69
103
|
def resolve_command_args(command_args)
|
|
@@ -72,7 +106,7 @@ module Datadog
|
|
|
72
106
|
command_args
|
|
73
107
|
end
|
|
74
108
|
|
|
75
|
-
private_class_method :auth_command?, :resolve_command_args
|
|
109
|
+
private_class_method :auth_command?, :hello_auth_command?, :resolve_command_args
|
|
76
110
|
end
|
|
77
111
|
end
|
|
78
112
|
end
|
|
@@ -37,12 +37,18 @@ module Datadog
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def call_pipelined(client, commands, service_name, command_args)
|
|
40
|
+
# `redis-client` sends its per-connection handshake (`HELLO`, `CLIENT SETINFO`/`SETNAME`)
|
|
41
|
+
# as a pipeline through this same code path. Excluding those from resource naming keeps
|
|
42
|
+
# the resource focused on application-issued commands (e.g. a lone `SELECT` prelude).
|
|
43
|
+
traced_commands = commands.reject { |c| Contrib::Redis::Quantize.connection_setup_command?(c) }
|
|
44
|
+
return yield if traced_commands.empty? && !commands.empty?
|
|
45
|
+
|
|
40
46
|
Tracing.trace(Redis::Ext::SPAN_COMMAND, type: Redis::Ext::TYPE, service: service_name) do |span|
|
|
41
47
|
span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Redis::Ext::TAG_COMPONENT)
|
|
42
|
-
raw_command = get_pipeline_commands(
|
|
43
|
-
span.resource = command_args ? raw_command : get_pipeline_commands(
|
|
48
|
+
raw_command = get_pipeline_commands(traced_commands, true)
|
|
49
|
+
span.resource = command_args ? raw_command : get_pipeline_commands(traced_commands, false)
|
|
44
50
|
|
|
45
|
-
span.set_metric Contrib::Redis::Ext::METRIC_PIPELINE_LEN,
|
|
51
|
+
span.set_metric Contrib::Redis::Ext::METRIC_PIPELINE_LEN, traced_commands.length
|
|
46
52
|
|
|
47
53
|
Contrib::Redis::Tags.set_common_tags(client, span, raw_command)
|
|
48
54
|
|
|
@@ -46,11 +46,7 @@ module Datadog
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def parse_opts(sql, opts)
|
|
49
|
-
db_opts =
|
|
50
|
-
@opts
|
|
51
|
-
elsif instance_variable_defined?(:@pool) && @pool
|
|
52
|
-
@pool.db.opts
|
|
53
|
-
end
|
|
49
|
+
db_opts = @pool.db.opts if instance_variable_defined?(:@pool) && @pool
|
|
54
50
|
sql = sql.is_a?(::Sequel::SQL::Expression) ? literal(sql) : sql.to_s
|
|
55
51
|
|
|
56
52
|
Utils.parse_opts(sql, opts, db_opts)
|
|
@@ -35,7 +35,7 @@ module Datadog
|
|
|
35
35
|
Tracing::Distributed::TraceContext.new(fetcher: Tracing::Distributed::Fetcher),
|
|
36
36
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
|
|
37
37
|
Tracing::Distributed::Baggage.new(fetcher: Tracing::Distributed::Fetcher),
|
|
38
|
-
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
|
|
38
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new,
|
|
39
39
|
},
|
|
40
40
|
propagation_style_inject: propagation_style_inject,
|
|
41
41
|
propagation_style_extract: propagation_style_extract,
|
|
@@ -18,7 +18,7 @@ module Datadog
|
|
|
18
18
|
trace_options = {
|
|
19
19
|
service: configuration[:service_name],
|
|
20
20
|
type: Tracing::Metadata::Ext::AppTypes::TYPE_WORKER,
|
|
21
|
-
on_error: configuration[:on_error]
|
|
21
|
+
on_error: configuration[:on_error],
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
Tracing.trace(Ext::SPAN_JOB, **trace_options) do |request_span|
|
|
@@ -34,7 +34,7 @@ module Datadog
|
|
|
34
34
|
Tracing::Distributed::TraceContext.new(fetcher: Tracing::Distributed::Fetcher),
|
|
35
35
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
|
|
36
36
|
Tracing::Distributed::Baggage.new(fetcher: Tracing::Distributed::Fetcher),
|
|
37
|
-
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
|
|
37
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new,
|
|
38
38
|
},
|
|
39
39
|
propagation_style_inject: propagation_style_inject,
|
|
40
40
|
propagation_style_extract: propagation_style_extract,
|
|
@@ -51,9 +51,9 @@ module Datadog
|
|
|
51
51
|
service: service.to_s,
|
|
52
52
|
version: version.to_s,
|
|
53
53
|
trace_id: trace_id.to_s,
|
|
54
|
-
span_id: span_id.to_s
|
|
54
|
+
span_id: span_id.to_s,
|
|
55
55
|
},
|
|
56
|
-
ddsource: Core::Logging::Ext::DD_SOURCE
|
|
56
|
+
ddsource: Core::Logging::Ext::DD_SOURCE,
|
|
57
57
|
}
|
|
58
58
|
end
|
|
59
59
|
|
|
@@ -47,7 +47,7 @@ module Datadog
|
|
|
47
47
|
|
|
48
48
|
def collect_errors!(responses)
|
|
49
49
|
{
|
|
50
|
-
agent_error: agent_error(responses)
|
|
50
|
+
agent_error: agent_error(responses),
|
|
51
51
|
}
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -114,7 +114,7 @@ module Datadog
|
|
|
114
114
|
{
|
|
115
115
|
name: rule.matcher.name,
|
|
116
116
|
service: rule.matcher.service,
|
|
117
|
-
sample_rate: rule.sampler.sample_rate(nil)
|
|
117
|
+
sample_rate: rule.sampler.sample_rate(nil),
|
|
118
118
|
}
|
|
119
119
|
end.compact
|
|
120
120
|
end
|
|
@@ -231,8 +231,7 @@ module Datadog
|
|
|
231
231
|
tags = {}
|
|
232
232
|
|
|
233
233
|
baggage_tag_keys.each do |key, _|
|
|
234
|
-
|
|
235
|
-
value = baggage[key] # steep:ignore ArgumentTypeMismatch
|
|
234
|
+
value = baggage[key]
|
|
236
235
|
next if value.nil? || value.empty?
|
|
237
236
|
|
|
238
237
|
tags["baggage.#{key}"] = value
|
|
@@ -21,7 +21,7 @@ module Datadog
|
|
|
21
21
|
Ext::Distributed::TAG_ORIGIN => true,
|
|
22
22
|
Core::Environment::Ext::TAG_VERSION => true,
|
|
23
23
|
Ext::HTTP::TAG_STATUS_CODE => true,
|
|
24
|
-
Ext::NET::TAG_HOSTNAME => true
|
|
24
|
+
Ext::NET::TAG_HOSTNAME => true,
|
|
25
25
|
}.freeze
|
|
26
26
|
|
|
27
27
|
# Return the tag with the given key, nil if it doesn't exist.
|
|
@@ -37,9 +37,9 @@ module Datadog
|
|
|
37
37
|
# Guard for RBS/Steep
|
|
38
38
|
raise "option is a #{option.class}, expected Option" unless option.is_a?(Configuration::Dynamic::Option)
|
|
39
39
|
|
|
40
|
-
option.call(value)
|
|
40
|
+
telemetry_value = option.call(value)
|
|
41
41
|
|
|
42
|
-
[env_var,
|
|
42
|
+
[env_var, telemetry_value]
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
if (di_enabled = lib_config["dynamic_instrumentation_enabled"]) != nil # rubocop:disable Style/NonNilCheck
|