datadog 2.7.1 → 2.18.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 +353 -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 +78 -102
- 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 +235 -57
- data/ext/datadog_profiling_native_extension/collectors_stack.h +21 -5
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +376 -156
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
- 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 +14 -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 +295 -532
- data/ext/datadog_profiling_native_extension/heap_recorder.h +6 -8
- data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +69 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +16 -4
- data/ext/datadog_profiling_native_extension/profiling.c +19 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +9 -21
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +2 -10
- data/ext/datadog_profiling_native_extension/stack_recorder.c +231 -181
- 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/extconf.rb +2 -2
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +164 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +112 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +2 -2
- 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 +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +65 -0
- data/lib/datadog/appsec/api_security/sampler.rb +59 -0
- data/lib/datadog/appsec/api_security.rb +23 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +623 -253
- data/lib/datadog/appsec/assets/waf_rules/strict.json +69 -107
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +49 -65
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +212 -27
- 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 +73 -78
- 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 +30 -36
- data/lib/datadog/appsec/remote.rb +31 -57
- data/lib/datadog/appsec/response.rb +19 -85
- data/lib/datadog/appsec/security_engine/engine.rb +194 -0
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +87 -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 +22 -12
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -18
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +74 -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 +81 -45
- 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 +121 -50
- data/lib/datadog/core/configuration/stable_config.rb +22 -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/crashtracking/tag_builder.rb +4 -22
- 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/tracer_memfd.rb +15 -0
- data/lib/datadog/core/process_discovery.rb +36 -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 +14 -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/tag_builder.rb +56 -0
- 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 +66 -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 +269 -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 +5 -4
- data/lib/datadog/core/telemetry/logging.rb +12 -6
- 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/net.rb +17 -2
- 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/env.rb +8 -0
- 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/utils.rb +7 -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 +162 -21
- 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 +54 -38
- data/lib/datadog/di/probe_notifier_worker.rb +60 -26
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +147 -0
- data/lib/datadog/di/serializer.rb +19 -8
- 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 +77 -0
- data/lib/datadog/di/transport/http.rb +57 -0
- data/lib/datadog/di/transport/input.rb +70 -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 +18 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +4 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +64 -82
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -14
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +8 -87
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +5 -41
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- 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/action_controller/instrumentation.rb +15 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
- 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/lograge/patcher.rb +4 -2
- 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/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- 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 +10 -6
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +55 -27
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +66 -14
- 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 +149 -54
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
- 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/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -106
- 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
@@ -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)
|
@@ -265,10 +273,10 @@ module Datadog
|
|
265
273
|
# Sample a span, tagging the trace as appropriate.
|
266
274
|
def sample_trace(trace_op)
|
267
275
|
begin
|
268
|
-
@sampler.sample!(trace_op)
|
276
|
+
@sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
|
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
|
)
|
@@ -362,7 +378,12 @@ module Datadog
|
|
362
378
|
event_span_op.service ||= @default_service
|
363
379
|
end
|
364
380
|
|
381
|
+
events.trace_propagated.subscribe do |event_trace_op|
|
382
|
+
sample_trace(event_trace_op)
|
383
|
+
end
|
384
|
+
|
365
385
|
events.span_finished.subscribe do |event_span, event_trace_op|
|
386
|
+
sample_trace(trace_op) if event_trace_op.sampling_priority.nil?
|
366
387
|
sample_span(event_trace_op, event_span)
|
367
388
|
flush_trace(event_trace_op)
|
368
389
|
end
|
@@ -396,12 +417,13 @@ module Datadog
|
|
396
417
|
)
|
397
418
|
trace = _trace || start_trace(continue_from: continue_from)
|
398
419
|
|
399
|
-
events = SpanOperation::Events.new
|
420
|
+
events = SpanOperation::Events.new(logger: logger)
|
400
421
|
|
401
422
|
if block
|
402
423
|
# Ignore start time if a block has been given
|
403
424
|
trace.measure(
|
404
425
|
name,
|
426
|
+
logger: logger,
|
405
427
|
events: events,
|
406
428
|
on_error: on_error,
|
407
429
|
resource: resource,
|
@@ -415,6 +437,7 @@ module Datadog
|
|
415
437
|
# Return the new span
|
416
438
|
span = trace.build_span(
|
417
439
|
name,
|
440
|
+
logger: logger,
|
418
441
|
events: events,
|
419
442
|
on_error: on_error,
|
420
443
|
resource: resource,
|
@@ -488,7 +511,7 @@ module Datadog
|
|
488
511
|
@span_sampler.sample!(trace_op, span)
|
489
512
|
rescue StandardError => e
|
490
513
|
SAMPLE_SPAN_LOG_ONLY_ONCE.run do
|
491
|
-
|
514
|
+
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
492
515
|
end
|
493
516
|
end
|
494
517
|
end
|
@@ -498,13 +521,12 @@ module Datadog
|
|
498
521
|
|
499
522
|
# Flush finished spans from the trace buffer, send them to writer.
|
500
523
|
def flush_trace(trace_op)
|
501
|
-
sample_trace(trace_op) unless trace_op.sampling_priority
|
502
524
|
begin
|
503
525
|
trace = @trace_flush.consume!(trace_op)
|
504
526
|
write(trace) if trace && !trace.empty?
|
505
527
|
rescue StandardError => e
|
506
528
|
FLUSH_TRACE_LOG_ONLY_ONCE.run do
|
507
|
-
|
529
|
+
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
508
530
|
end
|
509
531
|
end
|
510
532
|
end
|
@@ -518,7 +540,7 @@ module Datadog
|
|
518
540
|
return unless trace && @writer
|
519
541
|
|
520
542
|
if Datadog.configuration.diagnostics.debug
|
521
|
-
|
543
|
+
logger.debug { "Writing #{trace.length} spans (enabled: #{@enabled})\n#{trace.spans.pretty_inspect}" }
|
522
544
|
end
|
523
545
|
|
524
546
|
@writer.write(trace)
|
@@ -527,20 +549,50 @@ module Datadog
|
|
527
549
|
|
528
550
|
# TODO: Make these dummy objects singletons to preserve memory.
|
529
551
|
def skip_trace(name)
|
530
|
-
span = SpanOperation.new(name)
|
552
|
+
span = SpanOperation.new(name, logger: logger)
|
531
553
|
|
532
554
|
if block_given?
|
533
|
-
trace = TraceOperation.new
|
555
|
+
trace = TraceOperation.new(logger: logger)
|
534
556
|
yield(span, trace)
|
535
557
|
else
|
536
558
|
span
|
537
559
|
end
|
538
560
|
end
|
539
561
|
|
562
|
+
# Decide whether upstream sampling priority should be propagated, by taking into account
|
563
|
+
# the upstream tags and the configuration.
|
564
|
+
# We should always propagate if APM is enabled.
|
565
|
+
#
|
566
|
+
# e.g.: upstream tags containing dd.p.ts: 02, and appsec is enabled, return true.
|
567
|
+
def propagate_sampling_priority?(upstream_tags:)
|
568
|
+
return true if apm_tracing_enabled
|
569
|
+
|
570
|
+
if upstream_tags&.key?(Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE)
|
571
|
+
appsec_bit = upstream_tags[Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE].to_i(16) &
|
572
|
+
Datadog::AppSec::Ext::PRODUCT_BIT
|
573
|
+
return appsec_enabled if appsec_bit != 0
|
574
|
+
end
|
575
|
+
|
576
|
+
false
|
577
|
+
end
|
578
|
+
|
540
579
|
def profiling_enabled
|
541
580
|
@profiling_enabled ||=
|
542
581
|
!!(defined?(Datadog::Profiling) && Datadog::Profiling.respond_to?(:enabled?) && Datadog::Profiling.enabled?)
|
543
582
|
end
|
583
|
+
|
584
|
+
def appsec_enabled
|
585
|
+
@appsec_enabled ||= Datadog.configuration.appsec.enabled
|
586
|
+
end
|
587
|
+
|
588
|
+
# Due to APM Tracing (the product) and Tracing (the transport) being intertwined, we cannot completely disabled APM
|
589
|
+
# without also disabling the tracer. When setting `@apm_tracing_enabled` to `false`, it does not disable the tracer,
|
590
|
+
# but rather only sends heartbeat traces (1 per minutes), so that the service is considered alive in the backend.
|
591
|
+
# Other products (like ASM) can then set the sampling priority of their traces to `MANUAL_KEEP`,
|
592
|
+
# effectively allowing standalone products to work without APM.
|
593
|
+
def apm_tracing_enabled
|
594
|
+
@apm_tracing_enabled ||= Datadog.configuration.apm.tracing.enabled
|
595
|
+
end
|
544
596
|
end
|
545
597
|
end
|
546
598
|
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
|
|