datadog 2.12.1 → 2.17.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 +154 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +16 -14
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +3 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +8 -1
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +8 -0
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +23 -23
- data/ext/libdatadog_api/crashtracker.c +11 -12
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +122 -0
- data/ext/libdatadog_api/library_config.h +19 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +117 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
- data/lib/datadog/appsec/api_security.rb +9 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +29 -20
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +93 -28
- data/lib/datadog/appsec/context.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +49 -32
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +19 -18
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -28
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +1 -1
- data/lib/datadog/appsec/remote.rb +23 -11
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/runner.rb +3 -3
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +1 -1
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +5 -5
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +50 -31
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +4 -0
- data/lib/datadog/core/configuration/option.rb +79 -43
- data/lib/datadog/core/configuration/option_definition.rb +4 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +68 -35
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +20 -21
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery.rb +32 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +40 -32
- data/lib/datadog/core/remote/component.rb +6 -9
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +22 -57
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/telemetry/component.rb +78 -53
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +17 -472
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +90 -24
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +18 -16
- data/lib/datadog/core/transport/http.rb +39 -2
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +6 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/component.rb +0 -2
- data/lib/datadog/di/probe_notification_builder.rb +1 -1
- data/lib/datadog/di/probe_notifier_worker.rb +16 -16
- data/lib/datadog/di/remote.rb +2 -0
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +7 -34
- data/lib/datadog/di/transport/http.rb +14 -62
- data/lib/datadog/di/transport/input.rb +4 -3
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +5 -32
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events.rb +12 -0
- data/lib/datadog/kit/identity.rb +5 -1
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +5 -59
- data/lib/datadog/profiling/scheduler.rb +8 -1
- data/lib/datadog/profiling/stack_recorder.rb +4 -4
- data/lib/datadog/profiling/tag_builder.rb +1 -5
- data/lib/datadog/profiling.rb +6 -2
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +15 -12
- data/lib/datadog/tracing/configuration/ext.rb +7 -1
- data/lib/datadog/tracing/configuration/settings.rb +18 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +4 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +10 -1
- data/lib/datadog/tracing/span_event.rb +1 -1
- data/lib/datadog/tracing/span_operation.rb +46 -16
- data/lib/datadog/tracing/sync_writer.rb +1 -2
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +44 -24
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +45 -5
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -41
- data/lib/datadog/tracing/transport/http.rb +11 -44
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +26 -9
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
- data/lib/datadog/tracing/writer.rb +2 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -3
- metadata +80 -19
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative '../core/environment/identity'
|
4
4
|
require_relative '../core/utils'
|
5
|
-
require_relative 'tracer'
|
6
5
|
require_relative 'event'
|
7
6
|
require_relative 'metadata/tagging'
|
8
7
|
require_relative 'sampling/ext'
|
@@ -37,9 +36,11 @@ module Datadog
|
|
37
36
|
:rule_sample_rate,
|
38
37
|
:sample_rate,
|
39
38
|
:sampling_priority,
|
40
|
-
:remote_parent
|
39
|
+
:remote_parent,
|
40
|
+
:baggage
|
41
41
|
|
42
42
|
attr_reader \
|
43
|
+
:logger,
|
43
44
|
:active_span_count,
|
44
45
|
:active_span,
|
45
46
|
:id,
|
@@ -55,6 +56,7 @@ module Datadog
|
|
55
56
|
:service
|
56
57
|
|
57
58
|
def initialize(
|
59
|
+
logger: Datadog.logger,
|
58
60
|
agent_sample_rate: nil,
|
59
61
|
events: nil,
|
60
62
|
hostname: nil,
|
@@ -71,19 +73,22 @@ module Datadog
|
|
71
73
|
sampling_priority: nil,
|
72
74
|
service: nil,
|
73
75
|
profiling_enabled: nil,
|
76
|
+
apm_tracing_enabled: nil,
|
74
77
|
tags: nil,
|
75
78
|
metrics: nil,
|
76
79
|
trace_state: nil,
|
77
80
|
trace_state_unknown_fields: nil,
|
78
81
|
remote_parent: false,
|
79
|
-
tracer: nil
|
80
|
-
|
82
|
+
tracer: nil,
|
83
|
+
baggage: nil
|
81
84
|
)
|
85
|
+
@logger = logger
|
86
|
+
|
82
87
|
# Attributes
|
83
88
|
@id = id || Tracing::Utils::TraceId.next_id
|
84
89
|
@max_length = max_length || DEFAULT_MAX_LENGTH
|
85
90
|
@parent_span_id = parent_span_id
|
86
|
-
@sampled = sampled.nil?
|
91
|
+
@sampled = sampled.nil? || sampled
|
87
92
|
@remote_parent = remote_parent
|
88
93
|
|
89
94
|
# Tags
|
@@ -98,9 +103,11 @@ module Datadog
|
|
98
103
|
@sampling_priority = sampling_priority
|
99
104
|
@service = service
|
100
105
|
@profiling_enabled = profiling_enabled
|
106
|
+
@apm_tracing_enabled = apm_tracing_enabled
|
101
107
|
@trace_state = trace_state
|
102
108
|
@trace_state_unknown_fields = trace_state_unknown_fields
|
103
109
|
@tracer = tracer
|
110
|
+
@baggage = baggage
|
104
111
|
|
105
112
|
# Generic tags
|
106
113
|
set_tags(tags) if tags
|
@@ -173,6 +180,12 @@ module Datadog
|
|
173
180
|
super || (root_span && root_span.get_metric(key))
|
174
181
|
end
|
175
182
|
|
183
|
+
def set_distributed_source(product_bit)
|
184
|
+
source = get_tag(Metadata::Ext::Distributed::TAG_TRACE_SOURCE)&.to_i(16) || 0
|
185
|
+
source |= product_bit
|
186
|
+
set_tag(Metadata::Ext::Distributed::TAG_TRACE_SOURCE, format('%02X', source))
|
187
|
+
end
|
188
|
+
|
176
189
|
def tags
|
177
190
|
all_tags = {}
|
178
191
|
all_tags.merge!(root_span&.tags || {}) if root_span
|
@@ -194,6 +207,7 @@ module Datadog
|
|
194
207
|
|
195
208
|
def measure(
|
196
209
|
op_name,
|
210
|
+
logger: Datadog.logger,
|
197
211
|
events: nil,
|
198
212
|
on_error: nil,
|
199
213
|
resource: nil,
|
@@ -207,7 +221,9 @@ module Datadog
|
|
207
221
|
# Don't allow more span measurements if the
|
208
222
|
# trace is already completed. Prevents multiple
|
209
223
|
# root spans with parent_span_id = 0.
|
210
|
-
return yield(
|
224
|
+
return yield( # rubocop:disable Style/MultilineIfModifier
|
225
|
+
SpanOperation.new(op_name, logger: logger),
|
226
|
+
TraceOperation.new(logger: logger)) if finished? || full?
|
211
227
|
|
212
228
|
# Create new span
|
213
229
|
span_op = build_span(
|
@@ -228,6 +244,7 @@ module Datadog
|
|
228
244
|
|
229
245
|
def build_span(
|
230
246
|
op_name,
|
247
|
+
logger: Datadog.logger,
|
231
248
|
events: nil,
|
232
249
|
on_error: nil,
|
233
250
|
resource: nil,
|
@@ -249,7 +266,7 @@ module Datadog
|
|
249
266
|
parent_id = parent ? parent.id : @parent_span_id || 0
|
250
267
|
|
251
268
|
# Build events
|
252
|
-
events ||= SpanOperation::Events.new
|
269
|
+
events ||= SpanOperation::Events.new(logger: logger)
|
253
270
|
|
254
271
|
# Before start: activate the span, publish events.
|
255
272
|
events.before_start.subscribe do |span_op|
|
@@ -264,6 +281,7 @@ module Datadog
|
|
264
281
|
# Build a new span operation
|
265
282
|
SpanOperation.new(
|
266
283
|
op_name,
|
284
|
+
logger: logger,
|
267
285
|
events: events,
|
268
286
|
on_error: on_error,
|
269
287
|
parent_id: parent_id,
|
@@ -276,10 +294,10 @@ module Datadog
|
|
276
294
|
id: id
|
277
295
|
)
|
278
296
|
rescue StandardError => e
|
279
|
-
|
297
|
+
logger.debug { "Failed to build new span: #{e}" }
|
280
298
|
|
281
299
|
# Return dummy span
|
282
|
-
SpanOperation.new(op_name)
|
300
|
+
SpanOperation.new(op_name, logger: logger)
|
283
301
|
end
|
284
302
|
end
|
285
303
|
|
@@ -315,10 +333,10 @@ module Datadog
|
|
315
333
|
|
316
334
|
TraceDigest.new(
|
317
335
|
span_id: span_id,
|
318
|
-
span_name:
|
319
|
-
span_resource:
|
320
|
-
span_service:
|
321
|
-
span_type:
|
336
|
+
span_name: @active_span && @active_span.name,
|
337
|
+
span_resource: @active_span && @active_span.resource,
|
338
|
+
span_service: @active_span && @active_span.service,
|
339
|
+
span_type: @active_span && @active_span.type,
|
322
340
|
trace_distributed_tags: distributed_tags,
|
323
341
|
trace_hostname: @hostname,
|
324
342
|
trace_id: @id,
|
@@ -331,7 +349,8 @@ module Datadog
|
|
331
349
|
trace_service: service,
|
332
350
|
trace_state: @trace_state,
|
333
351
|
trace_state_unknown_fields: @trace_state_unknown_fields,
|
334
|
-
span_remote:
|
352
|
+
span_remote: @remote_parent && @active_span.nil?,
|
353
|
+
baggage: @baggage.nil? || @baggage.empty? ? nil : @baggage
|
335
354
|
).freeze
|
336
355
|
end
|
337
356
|
|
@@ -351,22 +370,22 @@ module Datadog
|
|
351
370
|
def fork_clone
|
352
371
|
self.class.new(
|
353
372
|
agent_sample_rate: @agent_sample_rate,
|
354
|
-
events:
|
355
|
-
hostname:
|
373
|
+
events: @events && @events.dup,
|
374
|
+
hostname: @hostname && @hostname.dup,
|
356
375
|
id: @id,
|
357
376
|
max_length: @max_length,
|
358
|
-
name:
|
359
|
-
origin:
|
377
|
+
name: name && name.dup,
|
378
|
+
origin: @origin && @origin.dup,
|
360
379
|
parent_span_id: (@active_span && @active_span.id) || @parent_span_id,
|
361
380
|
rate_limiter_rate: @rate_limiter_rate,
|
362
|
-
resource:
|
381
|
+
resource: resource && resource.dup,
|
363
382
|
rule_sample_rate: @rule_sample_rate,
|
364
383
|
sample_rate: @sample_rate,
|
365
384
|
sampled: @sampled,
|
366
385
|
sampling_priority: @sampling_priority,
|
367
|
-
service:
|
368
|
-
trace_state:
|
369
|
-
trace_state_unknown_fields:
|
386
|
+
service: service && service.dup,
|
387
|
+
trace_state: @trace_state && @trace_state.dup,
|
388
|
+
trace_state_unknown_fields: @trace_state_unknown_fields && @trace_state_unknown_fields.dup,
|
370
389
|
tags: meta.dup,
|
371
390
|
metrics: metrics.dup,
|
372
391
|
remote_parent: @remote_parent
|
@@ -454,7 +473,7 @@ module Datadog
|
|
454
473
|
# Publish :span_before_start event
|
455
474
|
events.span_before_start.publish(span_op, self)
|
456
475
|
rescue StandardError => e
|
457
|
-
|
476
|
+
logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
458
477
|
end
|
459
478
|
end
|
460
479
|
|
@@ -478,7 +497,7 @@ module Datadog
|
|
478
497
|
# Publish :trace_finished event
|
479
498
|
events.trace_finished.publish(self) if finished?
|
480
499
|
rescue StandardError => e
|
481
|
-
|
500
|
+
logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
482
501
|
end
|
483
502
|
end
|
484
503
|
|
@@ -510,6 +529,7 @@ module Datadog
|
|
510
529
|
metrics: metrics,
|
511
530
|
root_span_id: !partial ? root_span && root_span.id : nil,
|
512
531
|
profiling_enabled: @profiling_enabled,
|
532
|
+
apm_tracing_enabled: @apm_tracing_enabled
|
513
533
|
)
|
514
534
|
end
|
515
535
|
|
@@ -34,7 +34,8 @@ module Datadog
|
|
34
34
|
:sampling_decision_maker,
|
35
35
|
:sampling_priority,
|
36
36
|
:service,
|
37
|
-
:profiling_enabled
|
37
|
+
:profiling_enabled,
|
38
|
+
:apm_tracing_enabled
|
38
39
|
|
39
40
|
# rubocop:disable Metrics/CyclomaticComplexity
|
40
41
|
# rubocop:disable Metrics/PerceivedComplexity
|
@@ -58,7 +59,8 @@ module Datadog
|
|
58
59
|
service: nil,
|
59
60
|
tags: nil,
|
60
61
|
metrics: nil,
|
61
|
-
profiling_enabled: nil
|
62
|
+
profiling_enabled: nil,
|
63
|
+
apm_tracing_enabled: nil
|
62
64
|
)
|
63
65
|
@id = id
|
64
66
|
@root_span_id = root_span_id
|
@@ -85,6 +87,7 @@ module Datadog
|
|
85
87
|
@sampling_priority = sampling_priority || sampling_priority_tag
|
86
88
|
@service = Core::Utils::SafeDup.frozen_or_dup(service || service_tag)
|
87
89
|
@profiling_enabled = profiling_enabled
|
90
|
+
@apm_tracing_enabled = apm_tracing_enabled
|
88
91
|
end
|
89
92
|
# rubocop:enable Metrics/PerceivedComplexity
|
90
93
|
# rubocop:enable Metrics/CyclomaticComplexity
|
@@ -128,8 +131,7 @@ module Datadog
|
|
128
131
|
end
|
129
132
|
|
130
133
|
def sampled?
|
131
|
-
|
132
|
-
|| sampling_priority == Sampling::Ext::Priority::USER_KEEP
|
134
|
+
[Sampling::Ext::Priority::AUTO_KEEP, Sampling::Ext::Priority::USER_KEEP].include?(sampling_priority)
|
133
135
|
end
|
134
136
|
|
135
137
|
# Returns the high order part of the trace id as a hexadecimal string; the most significant 64 bits.
|
@@ -338,24 +338,32 @@ module Datadog
|
|
338
338
|
hostname = hostname && !hostname.empty? ? hostname : nil
|
339
339
|
|
340
340
|
if digest
|
341
|
+
sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
|
342
|
+
digest.trace_sampling_priority
|
343
|
+
end
|
341
344
|
TraceOperation.new(
|
345
|
+
logger: logger,
|
342
346
|
hostname: hostname,
|
343
347
|
profiling_enabled: profiling_enabled,
|
348
|
+
apm_tracing_enabled: apm_tracing_enabled,
|
344
349
|
id: digest.trace_id,
|
345
350
|
origin: digest.trace_origin,
|
346
351
|
parent_span_id: digest.span_id,
|
347
|
-
sampling_priority:
|
352
|
+
sampling_priority: sampling_priority,
|
348
353
|
# Distributed tags are just regular trace tags with special meaning to Datadog
|
349
354
|
tags: digest.trace_distributed_tags,
|
350
355
|
trace_state: digest.trace_state,
|
351
356
|
trace_state_unknown_fields: digest.trace_state_unknown_fields,
|
352
357
|
remote_parent: digest.span_remote,
|
353
|
-
tracer: self
|
358
|
+
tracer: self,
|
359
|
+
baggage: digest.baggage
|
354
360
|
)
|
355
361
|
else
|
356
362
|
TraceOperation.new(
|
363
|
+
logger: logger,
|
357
364
|
hostname: hostname,
|
358
365
|
profiling_enabled: profiling_enabled,
|
366
|
+
apm_tracing_enabled: apm_tracing_enabled,
|
359
367
|
remote_parent: false,
|
360
368
|
tracer: self
|
361
369
|
)
|
@@ -404,12 +412,13 @@ module Datadog
|
|
404
412
|
)
|
405
413
|
trace = _trace || start_trace(continue_from: continue_from)
|
406
414
|
|
407
|
-
events = SpanOperation::Events.new
|
415
|
+
events = SpanOperation::Events.new(logger: logger)
|
408
416
|
|
409
417
|
if block
|
410
418
|
# Ignore start time if a block has been given
|
411
419
|
trace.measure(
|
412
420
|
name,
|
421
|
+
logger: logger,
|
413
422
|
events: events,
|
414
423
|
on_error: on_error,
|
415
424
|
resource: resource,
|
@@ -423,6 +432,7 @@ module Datadog
|
|
423
432
|
# Return the new span
|
424
433
|
span = trace.build_span(
|
425
434
|
name,
|
435
|
+
logger: logger,
|
426
436
|
events: events,
|
427
437
|
on_error: on_error,
|
428
438
|
resource: resource,
|
@@ -535,20 +545,50 @@ module Datadog
|
|
535
545
|
|
536
546
|
# TODO: Make these dummy objects singletons to preserve memory.
|
537
547
|
def skip_trace(name)
|
538
|
-
span = SpanOperation.new(name)
|
548
|
+
span = SpanOperation.new(name, logger: logger)
|
539
549
|
|
540
550
|
if block_given?
|
541
|
-
trace = TraceOperation.new
|
551
|
+
trace = TraceOperation.new(logger: logger)
|
542
552
|
yield(span, trace)
|
543
553
|
else
|
544
554
|
span
|
545
555
|
end
|
546
556
|
end
|
547
557
|
|
558
|
+
# Decide whether upstream sampling priority should be propagated, by taking into account
|
559
|
+
# the upstream tags and the configuration.
|
560
|
+
# We should always propagate if APM is enabled.
|
561
|
+
#
|
562
|
+
# e.g.: upstream tags containing dd.p.ts: 02, and appsec is enabled, return true.
|
563
|
+
def propagate_sampling_priority?(upstream_tags:)
|
564
|
+
return true if apm_tracing_enabled
|
565
|
+
|
566
|
+
if upstream_tags&.key?(Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE)
|
567
|
+
appsec_bit = upstream_tags[Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE].to_i(16) &
|
568
|
+
Datadog::AppSec::Ext::PRODUCT_BIT
|
569
|
+
return appsec_enabled if appsec_bit != 0
|
570
|
+
end
|
571
|
+
|
572
|
+
false
|
573
|
+
end
|
574
|
+
|
548
575
|
def profiling_enabled
|
549
576
|
@profiling_enabled ||=
|
550
577
|
!!(defined?(Datadog::Profiling) && Datadog::Profiling.respond_to?(:enabled?) && Datadog::Profiling.enabled?)
|
551
578
|
end
|
579
|
+
|
580
|
+
def appsec_enabled
|
581
|
+
@appsec_enabled ||= Datadog.configuration.appsec.enabled
|
582
|
+
end
|
583
|
+
|
584
|
+
# Due to APM Tracing (the product) and Tracing (the transport) being intertwined, we cannot completely disabled APM
|
585
|
+
# without also disabling the tracer. When setting `@apm_tracing_enabled` to `false`, it does not disable the tracer,
|
586
|
+
# but rather only sends heartbeat traces (1 per minutes), so that the service is considered alive in the backend.
|
587
|
+
# Other products (like ASM) can then set the sampling priority of their traces to `MANUAL_KEEP`,
|
588
|
+
# effectively allowing standalone products to work without APM.
|
589
|
+
def apm_tracing_enabled
|
590
|
+
@apm_tracing_enabled ||= Datadog.configuration.apm.tracing.enabled
|
591
|
+
end
|
552
592
|
end
|
553
593
|
end
|
554
594
|
end
|
@@ -22,14 +22,14 @@ module Datadog
|
|
22
22
|
|
23
23
|
def defaults
|
24
24
|
Core::Transport::HTTP::API::Map[
|
25
|
-
V4 => Spec.new do |s|
|
25
|
+
V4 => Traces::API::Spec.new do |s|
|
26
26
|
s.traces = Traces::API::Endpoint.new(
|
27
27
|
'/v0.4/traces',
|
28
28
|
Core::Encoding::MsgpackEncoder,
|
29
29
|
service_rates: true
|
30
30
|
)
|
31
31
|
end,
|
32
|
-
V3 => Spec.new do |s|
|
32
|
+
V3 => Traces::API::Spec.new do |s|
|
33
33
|
s.traces = Traces::API::Endpoint.new(
|
34
34
|
'/v0.3/traces',
|
35
35
|
Core::Encoding::MsgpackEncoder
|
@@ -37,14 +37,6 @@ module Datadog
|
|
37
37
|
end,
|
38
38
|
].with_fallbacks(V4 => V3)
|
39
39
|
end
|
40
|
-
|
41
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
42
|
-
include Traces::API::Instance
|
43
|
-
end
|
44
|
-
|
45
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
46
|
-
include Traces::API::Spec
|
47
|
-
end
|
48
40
|
end
|
49
41
|
end
|
50
42
|
end
|
@@ -12,10 +12,11 @@ module Datadog
|
|
12
12
|
class Client
|
13
13
|
include Datadog::Tracing::Transport::HTTP::Statistics
|
14
14
|
|
15
|
-
attr_reader :api
|
15
|
+
attr_reader :api, :logger
|
16
16
|
|
17
|
-
def initialize(api)
|
17
|
+
def initialize(api, logger: Datadog.logger)
|
18
18
|
@api = api
|
19
|
+
@logger = logger
|
19
20
|
end
|
20
21
|
|
21
22
|
def send_request(request, &block)
|
@@ -36,10 +37,10 @@ module Datadog
|
|
36
37
|
|
37
38
|
# Log error
|
38
39
|
if stats.consecutive_errors > 0
|
39
|
-
|
40
|
+
logger.debug(message)
|
40
41
|
else
|
41
42
|
# Not to report telemetry logs
|
42
|
-
|
43
|
+
logger.error(message)
|
43
44
|
end
|
44
45
|
|
45
46
|
# Update statistics
|
@@ -6,6 +6,8 @@ require_relative '../traces'
|
|
6
6
|
require_relative 'client'
|
7
7
|
require_relative '../../../core/transport/http/response'
|
8
8
|
require_relative '../../../core/transport/http/api/endpoint'
|
9
|
+
require_relative '../../../core/transport/http/api/spec'
|
10
|
+
require_relative '../../../core/transport/http/api/instance'
|
9
11
|
|
10
12
|
module Datadog
|
11
13
|
module Tracing
|
@@ -35,16 +37,12 @@ module Datadog
|
|
35
37
|
end
|
36
38
|
|
37
39
|
module API
|
38
|
-
#
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
def traces=(endpoint)
|
43
|
-
@traces = endpoint
|
44
|
-
end
|
40
|
+
# HTTP API Spec
|
41
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
42
|
+
attr_accessor :traces
|
45
43
|
|
46
44
|
def send_traces(env, &block)
|
47
|
-
raise
|
45
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('traces', self) if traces.nil?
|
48
46
|
|
49
47
|
traces.call(env, &block)
|
50
48
|
end
|
@@ -52,47 +50,21 @@ module Datadog
|
|
52
50
|
def encoder
|
53
51
|
traces.encoder
|
54
52
|
end
|
55
|
-
|
56
|
-
# Raised when traces sent but no traces endpoint is defined
|
57
|
-
class NoTraceEndpointDefinedError < StandardError
|
58
|
-
attr_reader :spec
|
59
|
-
|
60
|
-
def initialize(spec)
|
61
|
-
super
|
62
|
-
|
63
|
-
@spec = spec
|
64
|
-
end
|
65
|
-
|
66
|
-
def message
|
67
|
-
'No trace endpoint is defined for API specification!'
|
68
|
-
end
|
69
|
-
end
|
70
53
|
end
|
71
54
|
|
72
|
-
#
|
73
|
-
|
55
|
+
# HTTP API Instance
|
56
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
74
57
|
def send_traces(env)
|
75
|
-
|
58
|
+
unless spec.is_a?(Traces::API::Spec)
|
59
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
60
|
+
'traces', self
|
61
|
+
)
|
62
|
+
end
|
76
63
|
|
77
64
|
spec.send_traces(env) do |request_env|
|
78
65
|
call(request_env)
|
79
66
|
end
|
80
67
|
end
|
81
|
-
|
82
|
-
# Raised when traces sent to API that does not support traces
|
83
|
-
class TracesNotSupportedError < StandardError
|
84
|
-
attr_reader :spec
|
85
|
-
|
86
|
-
def initialize(spec)
|
87
|
-
super
|
88
|
-
|
89
|
-
@spec = spec
|
90
|
-
end
|
91
|
-
|
92
|
-
def message
|
93
|
-
'Traces not supported for this API!'
|
94
|
-
end
|
95
|
-
end
|
96
68
|
end
|
97
69
|
|
98
70
|
# Endpoint for submitting trace data
|
@@ -14,62 +14,29 @@ module Datadog
|
|
14
14
|
module HTTP
|
15
15
|
module_function
|
16
16
|
|
17
|
-
# Builds a new Transport::HTTP::Client
|
18
|
-
def new(klass, &block)
|
19
|
-
Core::Transport::HTTP.build(
|
20
|
-
api_instance_class: API::Instance, &block
|
21
|
-
).to_transport(klass)
|
22
|
-
end
|
23
|
-
|
24
17
|
# Builds a new Transport::HTTP::Client with default settings
|
25
18
|
# Pass a block to override any settings.
|
26
19
|
def default(
|
27
20
|
agent_settings:,
|
28
|
-
|
21
|
+
logger: Datadog.logger,
|
22
|
+
api_version: nil,
|
23
|
+
headers: nil
|
29
24
|
)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
Core::Transport::HTTP.build(
|
26
|
+
api_instance_class: Traces::API::Instance,
|
27
|
+
agent_settings: agent_settings,
|
28
|
+
logger: logger,
|
29
|
+
api_version: api_version,
|
30
|
+
headers: headers
|
31
|
+
) do |transport|
|
34
32
|
apis = API.defaults
|
35
33
|
|
36
34
|
transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
|
37
35
|
transport.api API::V3, apis[API::V3]
|
38
36
|
|
39
|
-
# Apply any settings given by options
|
40
|
-
unless options.empty?
|
41
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
42
|
-
transport.headers options[:headers] if options.key?(:headers)
|
43
|
-
end
|
44
|
-
|
45
37
|
# Call block to apply any customization, if provided
|
46
38
|
yield(transport) if block_given?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def default_headers
|
51
|
-
{
|
52
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
53
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
54
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
55
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
56
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
57
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
58
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
59
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
60
|
-
}.tap do |headers|
|
61
|
-
# Add container ID, if present.
|
62
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
63
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
64
|
-
# Pretend that stats computation are already done by the client
|
65
|
-
if Datadog.configuration.appsec.standalone.enabled
|
66
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def default_adapter
|
72
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
39
|
+
end.to_transport(Transport::Traces::Transport)
|
73
40
|
end
|
74
41
|
end
|
75
42
|
end
|
@@ -69,7 +69,7 @@ module Datadog
|
|
69
69
|
def to_msgpack(packer = nil)
|
70
70
|
packer ||= MessagePack::Packer.new
|
71
71
|
|
72
|
-
number_of_elements_to_write =
|
72
|
+
number_of_elements_to_write = 12
|
73
73
|
|
74
74
|
number_of_elements_to_write += 1 if span.events.any? && @native_events_supported
|
75
75
|
|
@@ -117,6 +117,8 @@ module Datadog
|
|
117
117
|
packer.write(span.meta)
|
118
118
|
packer.write('metrics')
|
119
119
|
packer.write(span.metrics)
|
120
|
+
packer.write('meta_struct')
|
121
|
+
packer.write(span.metastruct)
|
120
122
|
packer.write('span_links')
|
121
123
|
packer.write(span.links.map(&:to_hash))
|
122
124
|
packer.write('error')
|
@@ -59,6 +59,7 @@ module Datadog
|
|
59
59
|
tag_high_order_trace_id!
|
60
60
|
tag_sampling_priority!
|
61
61
|
tag_profiling_enabled!
|
62
|
+
tag_apm_tracing_disabled!
|
62
63
|
|
63
64
|
if first_span
|
64
65
|
tag_git_repository_url!
|
@@ -196,6 +197,12 @@ module Datadog
|
|
196
197
|
)
|
197
198
|
end
|
198
199
|
|
200
|
+
def tag_apm_tracing_disabled!
|
201
|
+
return if trace.apm_tracing_enabled
|
202
|
+
|
203
|
+
root_span.set_tag(Tracing::Metadata::Ext::TAG_APM_ENABLED, 0)
|
204
|
+
end
|
205
|
+
|
199
206
|
def tag_git_repository_url!
|
200
207
|
return if git_repository_url.nil?
|
201
208
|
|