datadog 2.7.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 +310 -1
- data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
- data/ext/datadog_profiling_native_extension/collectors_stack.c +10 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +314 -145
- 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 +7 -8
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
- data/ext/datadog_profiling_native_extension/heap_recorder.c +61 -174
- data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +68 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -1
- data/ext/datadog_profiling_native_extension/profiling.c +19 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
- data/ext/datadog_profiling_native_extension/stack_recorder.c +84 -131
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
- data/ext/libdatadog_api/crashtracker.c +17 -15
- 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 +49 -0
- 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/recommended.json +355 -157
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
- data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +41 -33
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +152 -25
- data/lib/datadog/appsec/context.rb +74 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
- data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
- 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 +33 -25
- 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} +3 -3
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
- data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -68
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +12 -3
- 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/collector.rb +38 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics.rb +13 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -31
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +5 -4
- data/lib/datadog/appsec/remote.rb +26 -12
- data/lib/datadog/appsec/response.rb +19 -85
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +88 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +23 -10
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +42 -14
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +76 -32
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +5 -1
- data/lib/datadog/core/configuration/option.rb +79 -43
- data/lib/datadog/core/configuration/option_definition.rb +6 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +100 -41
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +43 -11
- data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
- data/lib/datadog/core/crashtracking/component.rb +4 -13
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +17 -1
- data/lib/datadog/core/environment/agent_info.rb +78 -0
- 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 +27 -27
- 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/capabilities.rb +6 -0
- data/lib/datadog/core/remote/client.rb +107 -92
- data/lib/datadog/core/remote/component.rb +18 -19
- 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/api.rb +13 -18
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
- data/lib/datadog/core/remote/transport/http.rb +25 -94
- data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
- data/lib/datadog/core/remote/worker.rb +10 -7
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/telemetry/component.rb +84 -49
- 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 -383
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- 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/logging.rb +2 -2
- data/lib/datadog/core/telemetry/metric.rb +28 -6
- 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 +128 -25
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
- data/lib/datadog/core/transport/http/api/spec.rb +36 -0
- data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
- data/lib/datadog/core/transport/http.rb +75 -0
- data/lib/datadog/core/transport/response.rb +4 -0
- 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/base.rb +115 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/code_tracker.rb +26 -15
- data/lib/datadog/di/component.rb +23 -14
- data/lib/datadog/di/configuration/settings.rb +25 -1
- data/lib/datadog/di/contrib/active_record.rb +1 -0
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +28 -0
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +111 -20
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/preload.rb +18 -0
- data/lib/datadog/di/probe.rb +14 -7
- data/lib/datadog/di/probe_builder.rb +1 -0
- data/lib/datadog/di/probe_manager.rb +11 -5
- data/lib/datadog/di/probe_notification_builder.rb +34 -8
- data/lib/datadog/di/probe_notifier_worker.rb +52 -26
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +147 -0
- data/lib/datadog/di/serializer.rb +14 -7
- data/lib/datadog/di/transport/diagnostics.rb +62 -0
- data/lib/datadog/di/transport/http/api.rb +42 -0
- data/lib/datadog/di/transport/http/client.rb +47 -0
- data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
- data/lib/datadog/di/transport/http/input.rb +67 -0
- data/lib/datadog/di/transport/http.rb +57 -0
- data/lib/datadog/di/transport/input.rb +62 -0
- data/lib/datadog/di/utils.rb +103 -0
- data/lib/datadog/di.rb +14 -76
- 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 +15 -3
- data/lib/datadog/kit/identity.rb +9 -5
- 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/component.rb +60 -76
- 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 +6 -85
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- 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 +16 -12
- data/lib/datadog/tracing/configuration/ext.rb +8 -1
- data/lib/datadog/tracing/configuration/settings.rb +22 -10
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -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/extensions.rb +29 -3
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
- 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/http/integration.rb +3 -0
- 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/httprb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
- 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/integration.rb +3 -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/integration.rb +3 -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/presto/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
- 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/span_attribute_schema.rb +6 -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 +22 -5
- data/lib/datadog/tracing/span_event.rb +124 -4
- data/lib/datadog/tracing/span_operation.rb +52 -16
- data/lib/datadog/tracing/sync_writer.rb +9 -5
- 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 +60 -12
- data/lib/datadog/tracing/transport/http/api.rb +5 -4
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -44
- data/lib/datadog/tracing/transport/http.rb +13 -70
- data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +47 -13
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
- data/lib/datadog/tracing/workers.rb +5 -4
- data/lib/datadog/tracing/writer.rb +10 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -0
- metadata +143 -50
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
- data/lib/datadog/appsec/contrib/patcher.rb +0 -12
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
- data/lib/datadog/appsec/processor/actions.rb +0 -49
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
- data/lib/datadog/appsec/reactive/engine.rb +0 -47
- data/lib/datadog/appsec/reactive/operation.rb +0 -68
- data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
- data/lib/datadog/appsec/scope.rb +0 -58
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
- data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
- data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
- data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
- 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
- data/lib/datadog/di/transport.rb +0 -81
- data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -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.
|
@@ -28,7 +28,8 @@ module Datadog
|
|
28
28
|
:provider,
|
29
29
|
:sampler,
|
30
30
|
:span_sampler,
|
31
|
-
:tags
|
31
|
+
:tags,
|
32
|
+
:logger
|
32
33
|
|
33
34
|
attr_accessor \
|
34
35
|
:default_service,
|
@@ -48,21 +49,28 @@ module Datadog
|
|
48
49
|
# @param tags [Hash] default tags added to all spans
|
49
50
|
# @param writer [Datadog::Tracing::Writer] consumes traces returned by the provided +trace_flush+
|
50
51
|
def initialize(
|
52
|
+
# rubocop:disable Style/KeywordParametersOrder
|
53
|
+
# https://github.com/rubocop/rubocop/issues/13933
|
51
54
|
trace_flush: Flush::Finished.new,
|
52
55
|
context_provider: DefaultContextProvider.new,
|
53
56
|
default_service: Core::Environment::Ext::FALLBACK_SERVICE_NAME,
|
54
57
|
enabled: true,
|
58
|
+
logger: Datadog.logger,
|
55
59
|
sampler: Sampling::PrioritySampler.new(
|
56
60
|
base_sampler: Sampling::AllSampler.new,
|
57
61
|
post_sampler: Sampling::RuleSampler.new
|
58
62
|
),
|
59
63
|
span_sampler: Sampling::Span::Sampler.new,
|
60
64
|
tags: {},
|
61
|
-
writer
|
65
|
+
# writer is not defaulted because creating it requires agent_settings,
|
66
|
+
# which we do not have here and otherwise do not need.
|
67
|
+
writer:
|
68
|
+
# rubocop:enable Style/KeywordParametersOrder
|
62
69
|
)
|
63
70
|
@trace_flush = trace_flush
|
64
71
|
@default_service = default_service
|
65
72
|
@enabled = enabled
|
73
|
+
@logger = logger
|
66
74
|
@provider = context_provider
|
67
75
|
@sampler = sampler
|
68
76
|
@span_sampler = span_sampler
|
@@ -146,7 +154,7 @@ module Datadog
|
|
146
154
|
active_trace
|
147
155
|
end
|
148
156
|
rescue StandardError => e
|
149
|
-
|
157
|
+
logger.debug { "Failed to trace: #{e}" }
|
150
158
|
|
151
159
|
# Tracing failed: fallback and run code without tracing.
|
152
160
|
return skip_trace(name, &block)
|
@@ -268,7 +276,7 @@ module Datadog
|
|
268
276
|
@sampler.sample!(trace_op)
|
269
277
|
rescue StandardError => e
|
270
278
|
SAMPLE_TRACE_LOG_ONLY_ONCE.run do
|
271
|
-
|
279
|
+
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
272
280
|
end
|
273
281
|
end
|
274
282
|
end
|
@@ -330,24 +338,32 @@ module Datadog
|
|
330
338
|
hostname = hostname && !hostname.empty? ? hostname : nil
|
331
339
|
|
332
340
|
if digest
|
341
|
+
sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
|
342
|
+
digest.trace_sampling_priority
|
343
|
+
end
|
333
344
|
TraceOperation.new(
|
345
|
+
logger: logger,
|
334
346
|
hostname: hostname,
|
335
347
|
profiling_enabled: profiling_enabled,
|
348
|
+
apm_tracing_enabled: apm_tracing_enabled,
|
336
349
|
id: digest.trace_id,
|
337
350
|
origin: digest.trace_origin,
|
338
351
|
parent_span_id: digest.span_id,
|
339
|
-
sampling_priority:
|
352
|
+
sampling_priority: sampling_priority,
|
340
353
|
# Distributed tags are just regular trace tags with special meaning to Datadog
|
341
354
|
tags: digest.trace_distributed_tags,
|
342
355
|
trace_state: digest.trace_state,
|
343
356
|
trace_state_unknown_fields: digest.trace_state_unknown_fields,
|
344
357
|
remote_parent: digest.span_remote,
|
345
|
-
tracer: self
|
358
|
+
tracer: self,
|
359
|
+
baggage: digest.baggage
|
346
360
|
)
|
347
361
|
else
|
348
362
|
TraceOperation.new(
|
363
|
+
logger: logger,
|
349
364
|
hostname: hostname,
|
350
365
|
profiling_enabled: profiling_enabled,
|
366
|
+
apm_tracing_enabled: apm_tracing_enabled,
|
351
367
|
remote_parent: false,
|
352
368
|
tracer: self
|
353
369
|
)
|
@@ -396,12 +412,13 @@ module Datadog
|
|
396
412
|
)
|
397
413
|
trace = _trace || start_trace(continue_from: continue_from)
|
398
414
|
|
399
|
-
events = SpanOperation::Events.new
|
415
|
+
events = SpanOperation::Events.new(logger: logger)
|
400
416
|
|
401
417
|
if block
|
402
418
|
# Ignore start time if a block has been given
|
403
419
|
trace.measure(
|
404
420
|
name,
|
421
|
+
logger: logger,
|
405
422
|
events: events,
|
406
423
|
on_error: on_error,
|
407
424
|
resource: resource,
|
@@ -415,6 +432,7 @@ module Datadog
|
|
415
432
|
# Return the new span
|
416
433
|
span = trace.build_span(
|
417
434
|
name,
|
435
|
+
logger: logger,
|
418
436
|
events: events,
|
419
437
|
on_error: on_error,
|
420
438
|
resource: resource,
|
@@ -488,7 +506,7 @@ module Datadog
|
|
488
506
|
@span_sampler.sample!(trace_op, span)
|
489
507
|
rescue StandardError => e
|
490
508
|
SAMPLE_SPAN_LOG_ONLY_ONCE.run do
|
491
|
-
|
509
|
+
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
492
510
|
end
|
493
511
|
end
|
494
512
|
end
|
@@ -504,7 +522,7 @@ module Datadog
|
|
504
522
|
write(trace) if trace && !trace.empty?
|
505
523
|
rescue StandardError => e
|
506
524
|
FLUSH_TRACE_LOG_ONLY_ONCE.run do
|
507
|
-
|
525
|
+
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
508
526
|
end
|
509
527
|
end
|
510
528
|
end
|
@@ -518,7 +536,7 @@ module Datadog
|
|
518
536
|
return unless trace && @writer
|
519
537
|
|
520
538
|
if Datadog.configuration.diagnostics.debug
|
521
|
-
|
539
|
+
logger.debug { "Writing #{trace.length} spans (enabled: #{@enabled})\n#{trace.spans.pretty_inspect}" }
|
522
540
|
end
|
523
541
|
|
524
542
|
@writer.write(trace)
|
@@ -527,20 +545,50 @@ module Datadog
|
|
527
545
|
|
528
546
|
# TODO: Make these dummy objects singletons to preserve memory.
|
529
547
|
def skip_trace(name)
|
530
|
-
span = SpanOperation.new(name)
|
548
|
+
span = SpanOperation.new(name, logger: logger)
|
531
549
|
|
532
550
|
if block_given?
|
533
|
-
trace = TraceOperation.new
|
551
|
+
trace = TraceOperation.new(logger: logger)
|
534
552
|
yield(span, trace)
|
535
553
|
else
|
536
554
|
span
|
537
555
|
end
|
538
556
|
end
|
539
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
|
+
|
540
575
|
def profiling_enabled
|
541
576
|
@profiling_enabled ||=
|
542
577
|
!!(defined?(Datadog::Profiling) && Datadog::Profiling.respond_to?(:enabled?) && Datadog::Profiling.enabled?)
|
543
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
|
544
592
|
end
|
545
593
|
end
|
546
594
|
end
|
@@ -3,7 +3,8 @@
|
|
3
3
|
require_relative '../../../core/encoding'
|
4
4
|
|
5
5
|
require_relative '../../../core/transport/http/api/map'
|
6
|
-
require_relative 'api/
|
6
|
+
require_relative '../../../core/transport/http/api/instance'
|
7
|
+
require_relative '../../../core/transport/http/api/spec'
|
7
8
|
|
8
9
|
require_relative 'traces'
|
9
10
|
|
@@ -20,15 +21,15 @@ module Datadog
|
|
20
21
|
module_function
|
21
22
|
|
22
23
|
def defaults
|
23
|
-
|
24
|
-
V4 => Spec.new do |s|
|
24
|
+
Core::Transport::HTTP::API::Map[
|
25
|
+
V4 => Traces::API::Spec.new do |s|
|
25
26
|
s.traces = Traces::API::Endpoint.new(
|
26
27
|
'/v0.4/traces',
|
27
28
|
Core::Encoding::MsgpackEncoder,
|
28
29
|
service_rates: true
|
29
30
|
)
|
30
31
|
end,
|
31
|
-
V3 => Spec.new do |s|
|
32
|
+
V3 => Traces::API::Spec.new do |s|
|
32
33
|
s.traces = Traces::API::Endpoint.new(
|
33
34
|
'/v0.3/traces',
|
34
35
|
Core::Encoding::MsgpackEncoder
|
@@ -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,7 +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 'api/
|
9
|
+
require_relative '../../../core/transport/http/api/spec'
|
10
|
+
require_relative '../../../core/transport/http/api/instance'
|
10
11
|
|
11
12
|
module Datadog
|
12
13
|
module Tracing
|
@@ -36,16 +37,12 @@ module Datadog
|
|
36
37
|
end
|
37
38
|
|
38
39
|
module API
|
39
|
-
#
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
def traces=(endpoint)
|
44
|
-
@traces = endpoint
|
45
|
-
end
|
40
|
+
# HTTP API Spec
|
41
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
42
|
+
attr_accessor :traces
|
46
43
|
|
47
44
|
def send_traces(env, &block)
|
48
|
-
raise
|
45
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('traces', self) if traces.nil?
|
49
46
|
|
50
47
|
traces.call(env, &block)
|
51
48
|
end
|
@@ -53,47 +50,21 @@ module Datadog
|
|
53
50
|
def encoder
|
54
51
|
traces.encoder
|
55
52
|
end
|
56
|
-
|
57
|
-
# Raised when traces sent but no traces endpoint is defined
|
58
|
-
class NoTraceEndpointDefinedError < StandardError
|
59
|
-
attr_reader :spec
|
60
|
-
|
61
|
-
def initialize(spec)
|
62
|
-
super
|
63
|
-
|
64
|
-
@spec = spec
|
65
|
-
end
|
66
|
-
|
67
|
-
def message
|
68
|
-
'No trace endpoint is defined for API specification!'
|
69
|
-
end
|
70
|
-
end
|
71
53
|
end
|
72
54
|
|
73
|
-
#
|
74
|
-
|
55
|
+
# HTTP API Instance
|
56
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
75
57
|
def send_traces(env)
|
76
|
-
|
58
|
+
unless spec.is_a?(Traces::API::Spec)
|
59
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
60
|
+
'traces', self
|
61
|
+
)
|
62
|
+
end
|
77
63
|
|
78
64
|
spec.send_traces(env) do |request_env|
|
79
65
|
call(request_env)
|
80
66
|
end
|
81
67
|
end
|
82
|
-
|
83
|
-
# Raised when traces sent to API that does not support traces
|
84
|
-
class TracesNotSupportedError < StandardError
|
85
|
-
attr_reader :spec
|
86
|
-
|
87
|
-
def initialize(spec)
|
88
|
-
super
|
89
|
-
|
90
|
-
@spec = spec
|
91
|
-
end
|
92
|
-
|
93
|
-
def message
|
94
|
-
'Traces not supported for this API!'
|
95
|
-
end
|
96
|
-
end
|
97
68
|
end
|
98
69
|
|
99
70
|
# Endpoint for submitting trace data
|
@@ -143,8 +114,6 @@ module Datadog
|
|
143
114
|
|
144
115
|
# Add traces behavior to transport components
|
145
116
|
HTTP::Client.include(Traces::Client)
|
146
|
-
HTTP::API::Spec.include(Traces::API::Spec)
|
147
|
-
HTTP::API::Instance.include(Traces::API::Instance)
|
148
117
|
end
|
149
118
|
end
|
150
119
|
end
|
@@ -1,15 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'uri'
|
4
|
-
|
5
3
|
require_relative '../../core/environment/container'
|
6
4
|
require_relative '../../core/environment/ext'
|
7
5
|
require_relative '../../core/transport/ext'
|
8
|
-
require_relative '../../core/transport/http
|
9
|
-
require_relative '../../core/transport/http/adapters/test'
|
10
|
-
require_relative '../../core/transport/http/adapters/unix_socket'
|
6
|
+
require_relative '../../core/transport/http'
|
11
7
|
require_relative 'http/api'
|
12
|
-
require_relative 'http/builder'
|
13
8
|
require_relative '../../../datadog/version'
|
14
9
|
|
15
10
|
module Datadog
|
@@ -17,84 +12,32 @@ module Datadog
|
|
17
12
|
module Transport
|
18
13
|
# Namespace for HTTP transport components
|
19
14
|
module HTTP
|
20
|
-
# NOTE: Due to... legacy reasons... This class likes having a default `AgentSettings` instance to fall back to.
|
21
|
-
# Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
|
22
|
-
# represents only settings specified via environment variables + the usual defaults.
|
23
|
-
#
|
24
|
-
# DO NOT USE THIS IN NEW CODE, as it ignores any settings specified by users via `Datadog.configure`.
|
25
|
-
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS = Datadog::Core::Configuration::AgentSettingsResolver.call(
|
26
|
-
Datadog::Core::Configuration::Settings.new,
|
27
|
-
logger: nil,
|
28
|
-
)
|
29
|
-
|
30
15
|
module_function
|
31
16
|
|
32
|
-
# Builds a new Transport::HTTP::Client
|
33
|
-
def new(&block)
|
34
|
-
Builder.new(&block).to_transport
|
35
|
-
end
|
36
|
-
|
37
17
|
# Builds a new Transport::HTTP::Client with default settings
|
38
18
|
# Pass a block to override any settings.
|
39
19
|
def default(
|
40
|
-
agent_settings
|
41
|
-
|
20
|
+
agent_settings:,
|
21
|
+
logger: Datadog.logger,
|
22
|
+
api_version: nil,
|
23
|
+
headers: nil
|
42
24
|
)
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
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|
|
47
32
|
apis = API.defaults
|
48
33
|
|
49
34
|
transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
|
50
35
|
transport.api API::V3, apis[API::V3]
|
51
36
|
|
52
|
-
# Apply any settings given by options
|
53
|
-
unless options.empty?
|
54
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
55
|
-
transport.headers options[:headers] if options.key?(:headers)
|
56
|
-
end
|
57
|
-
|
58
37
|
# Call block to apply any customization, if provided
|
59
38
|
yield(transport) if block_given?
|
60
|
-
end
|
39
|
+
end.to_transport(Transport::Traces::Transport)
|
61
40
|
end
|
62
|
-
|
63
|
-
def default_headers
|
64
|
-
{
|
65
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
66
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
67
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
68
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
69
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
70
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
71
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
72
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
73
|
-
}.tap do |headers|
|
74
|
-
# Add container ID, if present.
|
75
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
76
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
77
|
-
# Pretend that stats computation are already done by the client
|
78
|
-
if Datadog.configuration.appsec.standalone.enabled
|
79
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def default_adapter
|
85
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
86
|
-
end
|
87
|
-
|
88
|
-
# Add adapters to registry
|
89
|
-
Builder::REGISTRY.set(
|
90
|
-
Datadog::Core::Transport::HTTP::Adapters::Net,
|
91
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
92
|
-
)
|
93
|
-
Builder::REGISTRY.set(Datadog::Core::Transport::HTTP::Adapters::Test, Datadog::Core::Transport::Ext::Test::ADAPTER)
|
94
|
-
Builder::REGISTRY.set(
|
95
|
-
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
96
|
-
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
97
|
-
)
|
98
41
|
end
|
99
42
|
end
|
100
43
|
end
|
@@ -12,8 +12,11 @@ module Datadog
|
|
12
12
|
attr_reader \
|
13
13
|
:trace
|
14
14
|
|
15
|
-
|
15
|
+
# @param trace [Datadog::Trace] the trace to serialize
|
16
|
+
# @param native_events_supported [Boolean] whether the agent supports span events as a top-level field
|
17
|
+
def initialize(trace, native_events_supported:)
|
16
18
|
@trace = trace
|
19
|
+
@native_events_supported = native_events_supported
|
17
20
|
end
|
18
21
|
|
19
22
|
# MessagePack serializer interface. Making this object
|
@@ -26,13 +29,17 @@ module Datadog
|
|
26
29
|
# @param packer [MessagePack::Packer] serialization buffer, can be +nil+ with JRuby
|
27
30
|
def to_msgpack(packer = nil)
|
28
31
|
# As of 1.3.3, JRuby implementation doesn't pass an existing packer
|
29
|
-
trace.spans.map
|
32
|
+
trace.spans.map do |s|
|
33
|
+
SerializableSpan.new(s, native_events_supported: @native_events_supported)
|
34
|
+
end.to_msgpack(packer)
|
30
35
|
end
|
31
36
|
|
32
37
|
# JSON serializer interface.
|
33
38
|
# Used by older version of the transport.
|
34
39
|
def to_json(*args)
|
35
|
-
trace.spans.map
|
40
|
+
trace.spans.map do |s|
|
41
|
+
SerializableSpan.new(s, native_events_supported: @native_events_supported).to_hash
|
42
|
+
end.to_json(*args)
|
36
43
|
end
|
37
44
|
end
|
38
45
|
|
@@ -41,9 +48,12 @@ module Datadog
|
|
41
48
|
attr_reader \
|
42
49
|
:span
|
43
50
|
|
44
|
-
|
51
|
+
# @param span [Datadog::Span] the span to serialize
|
52
|
+
# @param native_events_supported [Boolean] whether the agent supports span events as a top-level field
|
53
|
+
def initialize(span, native_events_supported:)
|
45
54
|
@span = span
|
46
55
|
@trace_id = Tracing::Utils::TraceId.to_low_order(span.trace_id)
|
56
|
+
@native_events_supported = native_events_supported
|
47
57
|
end
|
48
58
|
|
49
59
|
# MessagePack serializer interface. Making this object
|
@@ -55,10 +65,13 @@ module Datadog
|
|
55
65
|
#
|
56
66
|
# @param packer [MessagePack::Packer] serialization buffer, can be +nil+ with JRuby
|
57
67
|
# rubocop:disable Metrics/AbcSize
|
68
|
+
# rubocop:disable Metrics/MethodLength
|
58
69
|
def to_msgpack(packer = nil)
|
59
70
|
packer ||= MessagePack::Packer.new
|
60
71
|
|
61
|
-
number_of_elements_to_write =
|
72
|
+
number_of_elements_to_write = 12
|
73
|
+
|
74
|
+
number_of_elements_to_write += 1 if span.events.any? && @native_events_supported
|
62
75
|
|
63
76
|
if span.stopped?
|
64
77
|
packer.write_map_header(number_of_elements_to_write + 2) # Set header with how many elements in the map
|
@@ -72,8 +85,16 @@ module Datadog
|
|
72
85
|
packer.write_map_header(number_of_elements_to_write) # Set header with how many elements in the map
|
73
86
|
end
|
74
87
|
|
75
|
-
|
76
|
-
|
88
|
+
if span.events.any?
|
89
|
+
if @native_events_supported
|
90
|
+
# Use top-level field for native events
|
91
|
+
packer.write('span_events')
|
92
|
+
packer.write(span.events.map(&:to_native_format))
|
93
|
+
else
|
94
|
+
# Serialize span events as meta tags
|
95
|
+
span.set_tag('events', span.events.map(&:to_hash).to_json)
|
96
|
+
end
|
97
|
+
end
|
77
98
|
|
78
99
|
# DEV: We use strings as keys here, instead of symbols, as
|
79
100
|
# DEV: MessagePack will ultimately convert them to strings.
|
@@ -96,6 +117,8 @@ module Datadog
|
|
96
117
|
packer.write(span.meta)
|
97
118
|
packer.write('metrics')
|
98
119
|
packer.write(span.metrics)
|
120
|
+
packer.write('meta_struct')
|
121
|
+
packer.write(span.metastruct)
|
99
122
|
packer.write('span_links')
|
100
123
|
packer.write(span.links.map(&:to_hash))
|
101
124
|
packer.write('error')
|
@@ -103,6 +126,7 @@ module Datadog
|
|
103
126
|
packer
|
104
127
|
end
|
105
128
|
# rubocop:enable Metrics/AbcSize
|
129
|
+
# rubocop:enable Metrics/MethodLength
|
106
130
|
|
107
131
|
# JSON serializer interface.
|
108
132
|
# Used by older version of the transport.
|
@@ -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
|
|