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
@@ -11,6 +11,8 @@ require_relative 'event'
|
|
11
11
|
require_relative 'metadata'
|
12
12
|
require_relative 'metadata/ext'
|
13
13
|
require_relative 'span'
|
14
|
+
require_relative 'span_event'
|
15
|
+
require_relative 'span_link'
|
14
16
|
require_relative 'utils'
|
15
17
|
|
16
18
|
module Datadog
|
@@ -26,6 +28,7 @@ module Datadog
|
|
26
28
|
# Span attributes
|
27
29
|
# NOTE: In the future, we should drop the me
|
28
30
|
attr_reader \
|
31
|
+
:logger,
|
29
32
|
:end_time,
|
30
33
|
:id,
|
31
34
|
:name,
|
@@ -35,10 +38,12 @@ module Datadog
|
|
35
38
|
:start_time,
|
36
39
|
:trace_id,
|
37
40
|
:type
|
41
|
+
|
38
42
|
attr_accessor :links, :status, :span_events
|
39
43
|
|
40
44
|
def initialize(
|
41
45
|
name,
|
46
|
+
logger: Datadog.logger,
|
42
47
|
events: nil,
|
43
48
|
on_error: nil,
|
44
49
|
parent_id: 0,
|
@@ -52,6 +57,8 @@ module Datadog
|
|
52
57
|
span_events: nil,
|
53
58
|
id: nil
|
54
59
|
)
|
60
|
+
@logger = logger
|
61
|
+
|
55
62
|
# Ensure dynamically created strings are UTF-8 encoded.
|
56
63
|
#
|
57
64
|
# All strings created in Ruby land are UTF-8. The only sources of non-UTF-8 string are:
|
@@ -88,11 +95,17 @@ module Datadog
|
|
88
95
|
set_tags(tags) if tags
|
89
96
|
|
90
97
|
# Some other SpanOperation-specific behavior
|
91
|
-
@events = events || Events.new
|
98
|
+
@events = events || Events.new(logger: logger)
|
92
99
|
@span = nil
|
93
100
|
|
94
|
-
|
95
|
-
|
101
|
+
if on_error.nil?
|
102
|
+
# Nothing, default error handler is already set up.
|
103
|
+
elsif on_error.is_a?(Proc)
|
104
|
+
# Subscribe :on_error event
|
105
|
+
@events.on_error.wrap_default(&on_error)
|
106
|
+
else
|
107
|
+
logger.warn("on_error argument to SpanOperation ignored because is not a Proc: #{on_error}")
|
108
|
+
end
|
96
109
|
|
97
110
|
# Start the span with start time, if given.
|
98
111
|
start(start_time) if start_time
|
@@ -128,6 +141,10 @@ module Datadog
|
|
128
141
|
@resource = resource.nil? ? nil : Core::Utils.utf8_encode(resource) # Allow this to be explicitly set to nil
|
129
142
|
end
|
130
143
|
|
144
|
+
def get_collector_or_initialize
|
145
|
+
@collector ||= yield
|
146
|
+
end
|
147
|
+
|
131
148
|
def measure
|
132
149
|
raise ArgumentError, 'Must provide block to measure!' unless block_given?
|
133
150
|
# TODO: Should we just invoke the block and skip tracing instead?
|
@@ -141,7 +158,7 @@ module Datadog
|
|
141
158
|
begin
|
142
159
|
start
|
143
160
|
rescue StandardError => e
|
144
|
-
|
161
|
+
logger.debug { "Failed to start span: #{e}" }
|
145
162
|
ensure
|
146
163
|
# We should yield to the provided block when possible, as this
|
147
164
|
# block is application code that we don't want to hinder.
|
@@ -159,7 +176,7 @@ module Datadog
|
|
159
176
|
# Stop the span first, so timing is a more accurate.
|
160
177
|
# If the span failed to start, timing may be inaccurate,
|
161
178
|
# but this is not really a serious concern.
|
162
|
-
stop
|
179
|
+
stop(exception: e)
|
163
180
|
|
164
181
|
# Trigger the on_error event
|
165
182
|
events.on_error.publish(self, e)
|
@@ -197,7 +214,10 @@ module Datadog
|
|
197
214
|
end
|
198
215
|
|
199
216
|
# Mark the span stopped at the current time
|
200
|
-
|
217
|
+
#
|
218
|
+
# steep:ignore:start
|
219
|
+
# Steep issue fixed in https://github.com/soutaro/steep/pull/1467
|
220
|
+
def stop(stop_time = nil, exception: nil)
|
201
221
|
# A span should not be stopped twice. Note that this is not thread-safe,
|
202
222
|
# stop is called from multiple threads, a given span might be stopped
|
203
223
|
# several times. Again, one should not do this, so this test is more a
|
@@ -215,10 +235,11 @@ module Datadog
|
|
215
235
|
@duration_end = stop_time.nil? ? duration_marker : nil
|
216
236
|
|
217
237
|
# Trigger after_stop event
|
218
|
-
events.after_stop.publish(self)
|
238
|
+
events.after_stop.publish(self, exception)
|
219
239
|
|
220
240
|
self
|
221
241
|
end
|
242
|
+
# steep:ignore:end
|
222
243
|
|
223
244
|
# Return whether the duration is started or not
|
224
245
|
def started?
|
@@ -230,6 +251,10 @@ module Datadog
|
|
230
251
|
!@end_time.nil?
|
231
252
|
end
|
232
253
|
|
254
|
+
def root?
|
255
|
+
parent_id == 0
|
256
|
+
end
|
257
|
+
|
233
258
|
# for backwards compatibility
|
234
259
|
def start_time=(time)
|
235
260
|
time.tap { start(time) }
|
@@ -263,7 +288,8 @@ module Datadog
|
|
263
288
|
|
264
289
|
def duration
|
265
290
|
return @duration_end - @duration_start if @duration_start && @duration_end
|
266
|
-
|
291
|
+
|
292
|
+
@end_time - @start_time if @start_time && @end_time
|
267
293
|
end
|
268
294
|
|
269
295
|
def set_error(e)
|
@@ -283,6 +309,7 @@ module Datadog
|
|
283
309
|
id: @id,
|
284
310
|
meta: meta,
|
285
311
|
metrics: metrics,
|
312
|
+
metastruct: metastruct,
|
286
313
|
name: @name,
|
287
314
|
parent_id: @parent_id,
|
288
315
|
resource: @resource,
|
@@ -322,12 +349,15 @@ module Datadog
|
|
322
349
|
q.text "#{key} => #{value}"
|
323
350
|
end
|
324
351
|
end
|
325
|
-
q.group(2, 'Metrics: [',
|
352
|
+
q.group(2, 'Metrics: [', "]\n") do
|
326
353
|
q.breakable
|
327
354
|
q.seplist metrics.each do |key, value|
|
328
355
|
q.text "#{key} => #{value}"
|
329
356
|
end
|
330
357
|
end
|
358
|
+
q.group(2, 'Metastruct: [', ']') do
|
359
|
+
metastruct.pretty_print(q)
|
360
|
+
end
|
331
361
|
end
|
332
362
|
end
|
333
363
|
|
@@ -338,11 +368,13 @@ module Datadog
|
|
338
368
|
DEFAULT_ON_ERROR = proc { |span_op, error| span_op.set_error(error) unless span_op.nil? }
|
339
369
|
|
340
370
|
attr_reader \
|
371
|
+
:logger,
|
341
372
|
:after_finish,
|
342
373
|
:after_stop,
|
343
374
|
:before_start
|
344
375
|
|
345
|
-
def initialize(on_error: nil)
|
376
|
+
def initialize(logger: Datadog.logger, on_error: nil)
|
377
|
+
@logger = logger
|
346
378
|
@after_finish = AfterFinish.new
|
347
379
|
@after_stop = AfterStop.new
|
348
380
|
@before_start = BeforeStart.new
|
@@ -351,7 +383,7 @@ module Datadog
|
|
351
383
|
# This event is lazily initialized as error paths
|
352
384
|
# are normally less common that non-error paths.
|
353
385
|
def on_error
|
354
|
-
@on_error ||= OnError.new(DEFAULT_ON_ERROR)
|
386
|
+
@on_error ||= OnError.new(DEFAULT_ON_ERROR, logger: logger)
|
355
387
|
end
|
356
388
|
|
357
389
|
# Triggered when the span is finished, regardless of error.
|
@@ -377,10 +409,13 @@ module Datadog
|
|
377
409
|
|
378
410
|
# Triggered when the span raises an error during measurement.
|
379
411
|
class OnError
|
380
|
-
def initialize(default)
|
412
|
+
def initialize(default, logger: Datadog.logger)
|
381
413
|
@handler = default
|
414
|
+
@logger = logger
|
382
415
|
end
|
383
416
|
|
417
|
+
attr_reader :logger
|
418
|
+
|
384
419
|
# Call custom error handler but fallback to default behavior on failure.
|
385
420
|
|
386
421
|
# DEV: Revisit this before full 1.0 release.
|
@@ -394,9 +429,9 @@ module Datadog
|
|
394
429
|
begin
|
395
430
|
yield(op, error)
|
396
431
|
rescue StandardError => e
|
397
|
-
|
432
|
+
logger.debug do
|
398
433
|
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
399
|
-
Cause: #{e.class
|
434
|
+
Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
|
400
435
|
end
|
401
436
|
|
402
437
|
original.call(op, error) if original
|
@@ -408,8 +443,8 @@ module Datadog
|
|
408
443
|
begin
|
409
444
|
@handler.call(*args)
|
410
445
|
rescue StandardError => e
|
411
|
-
|
412
|
-
"Error in on_error handler '#{@default}': #{e.class
|
446
|
+
logger.debug do
|
447
|
+
"Error in on_error handler '#{@default}': #{e.class}: #{e} at #{Array(e.backtrace).first}"
|
413
448
|
end
|
414
449
|
end
|
415
450
|
|
@@ -450,6 +485,7 @@ module Datadog
|
|
450
485
|
id: @id,
|
451
486
|
meta: Core::Utils::SafeDup.frozen_or_dup(meta),
|
452
487
|
metrics: Core::Utils::SafeDup.frozen_or_dup(metrics),
|
488
|
+
metastruct: Core::Utils::SafeDup.frozen_or_dup(metastruct),
|
453
489
|
parent_id: @parent_id,
|
454
490
|
resource: @resource,
|
455
491
|
service: @service,
|
@@ -17,18 +17,22 @@ module Datadog
|
|
17
17
|
# @public_api
|
18
18
|
class SyncWriter
|
19
19
|
attr_reader \
|
20
|
+
:logger,
|
20
21
|
:events,
|
21
|
-
:transport
|
22
|
+
:transport,
|
23
|
+
:agent_settings
|
22
24
|
|
23
25
|
# @param [Datadog::Tracing::Transport::Traces::Transport] transport a custom transport instance.
|
24
26
|
# If provided, overrides `transport_options` and `agent_settings`.
|
25
27
|
# @param [Hash<Symbol,Object>] transport_options options for the default transport instance.
|
26
|
-
# @param [Datadog::Tracing::Configuration::
|
28
|
+
# @param [Datadog::Tracing::Configuration::AgentSettings] agent_settings agent options for
|
27
29
|
# the default transport instance.
|
28
|
-
def initialize(transport: nil, transport_options: {}, agent_settings: nil)
|
30
|
+
def initialize(transport: nil, transport_options: {}, agent_settings: nil, logger: Datadog.logger)
|
31
|
+
@logger = logger
|
32
|
+
@agent_settings = agent_settings
|
33
|
+
|
29
34
|
@transport = transport || begin
|
30
|
-
|
31
|
-
Transport::HTTP.default(**transport_options)
|
35
|
+
Transport::HTTP.default(agent_settings: agent_settings, logger: logger, **transport_options)
|
32
36
|
end
|
33
37
|
|
34
38
|
@events = Writer::Events.new
|
@@ -40,7 +44,7 @@ module Datadog
|
|
40
44
|
def write(trace)
|
41
45
|
flush_trace(trace)
|
42
46
|
rescue => e
|
43
|
-
|
47
|
+
logger.debug(e)
|
44
48
|
end
|
45
49
|
|
46
50
|
# Does nothing.
|
@@ -80,6 +80,9 @@ module Datadog
|
|
80
80
|
# This allows later propagation to include those unknown fields, as they can represent future versions of the spec
|
81
81
|
# sending data through this service. This value ends in a trailing `;` to facilitate serialization.
|
82
82
|
# @return [String]
|
83
|
+
# @!attribute [r] baggage
|
84
|
+
# The W3C "baggage" extracted from a distributed context. This field is a hash of key/value pairs.
|
85
|
+
# @return [Hash<String,String>]
|
83
86
|
# TODO: The documentation for the last attribute above won't be rendered.
|
84
87
|
# TODO: This might be a YARD bug as adding an attribute, making it now second-last attribute, renders correctly.
|
85
88
|
attr_reader \
|
@@ -102,7 +105,8 @@ module Datadog
|
|
102
105
|
:trace_flags,
|
103
106
|
:trace_state,
|
104
107
|
:trace_state_unknown_fields,
|
105
|
-
:span_remote
|
108
|
+
:span_remote,
|
109
|
+
:baggage
|
106
110
|
|
107
111
|
def initialize(
|
108
112
|
span_id: nil,
|
@@ -124,7 +128,8 @@ module Datadog
|
|
124
128
|
trace_flags: nil,
|
125
129
|
trace_state: nil,
|
126
130
|
trace_state_unknown_fields: nil,
|
127
|
-
span_remote: true
|
131
|
+
span_remote: true,
|
132
|
+
baggage: nil
|
128
133
|
)
|
129
134
|
@span_id = span_id
|
130
135
|
@span_name = span_name && span_name.dup.freeze
|
@@ -146,6 +151,7 @@ module Datadog
|
|
146
151
|
@trace_state = trace_state && trace_state.dup.freeze
|
147
152
|
@trace_state_unknown_fields = trace_state_unknown_fields && trace_state_unknown_fields.dup.freeze
|
148
153
|
@span_remote = span_remote
|
154
|
+
@baggage = baggage && baggage.dup.freeze
|
149
155
|
freeze
|
150
156
|
end
|
151
157
|
|
@@ -177,6 +183,7 @@ module Datadog
|
|
177
183
|
trace_state: trace_state,
|
178
184
|
trace_state_unknown_fields: trace_state_unknown_fields,
|
179
185
|
span_remote: span_remote,
|
186
|
+
baggage: baggage
|
180
187
|
}.merge!(field_value_pairs)
|
181
188
|
)
|
182
189
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require_relative '../core/environment/identity'
|
4
4
|
require_relative '../core/utils'
|
5
|
-
require_relative 'tracer'
|
6
5
|
require_relative 'event'
|
7
6
|
require_relative 'metadata/tagging'
|
8
7
|
require_relative 'sampling/ext'
|
@@ -37,9 +36,11 @@ module Datadog
|
|
37
36
|
:rule_sample_rate,
|
38
37
|
:sample_rate,
|
39
38
|
:sampling_priority,
|
40
|
-
:remote_parent
|
39
|
+
:remote_parent,
|
40
|
+
:baggage
|
41
41
|
|
42
42
|
attr_reader \
|
43
|
+
:logger,
|
43
44
|
:active_span_count,
|
44
45
|
:active_span,
|
45
46
|
:id,
|
@@ -55,6 +56,7 @@ module Datadog
|
|
55
56
|
:service
|
56
57
|
|
57
58
|
def initialize(
|
59
|
+
logger: Datadog.logger,
|
58
60
|
agent_sample_rate: nil,
|
59
61
|
events: nil,
|
60
62
|
hostname: nil,
|
@@ -71,19 +73,22 @@ module Datadog
|
|
71
73
|
sampling_priority: nil,
|
72
74
|
service: nil,
|
73
75
|
profiling_enabled: nil,
|
76
|
+
apm_tracing_enabled: nil,
|
74
77
|
tags: nil,
|
75
78
|
metrics: nil,
|
76
79
|
trace_state: nil,
|
77
80
|
trace_state_unknown_fields: nil,
|
78
81
|
remote_parent: false,
|
79
|
-
tracer: nil
|
80
|
-
|
82
|
+
tracer: nil, # DEV-3.0: deprecated, remove in 3.0
|
83
|
+
baggage: nil
|
81
84
|
)
|
85
|
+
@logger = logger
|
86
|
+
|
82
87
|
# Attributes
|
83
88
|
@id = id || Tracing::Utils::TraceId.next_id
|
84
89
|
@max_length = max_length || DEFAULT_MAX_LENGTH
|
85
90
|
@parent_span_id = parent_span_id
|
86
|
-
@sampled = sampled.nil?
|
91
|
+
@sampled = sampled.nil? || sampled
|
87
92
|
@remote_parent = remote_parent
|
88
93
|
|
89
94
|
# Tags
|
@@ -98,9 +103,10 @@ module Datadog
|
|
98
103
|
@sampling_priority = sampling_priority
|
99
104
|
@service = service
|
100
105
|
@profiling_enabled = profiling_enabled
|
106
|
+
@apm_tracing_enabled = apm_tracing_enabled
|
101
107
|
@trace_state = trace_state
|
102
108
|
@trace_state_unknown_fields = trace_state_unknown_fields
|
103
|
-
@
|
109
|
+
@baggage = baggage
|
104
110
|
|
105
111
|
# Generic tags
|
106
112
|
set_tags(tags) if tags
|
@@ -173,6 +179,12 @@ module Datadog
|
|
173
179
|
super || (root_span && root_span.get_metric(key))
|
174
180
|
end
|
175
181
|
|
182
|
+
def set_distributed_source(product_bit)
|
183
|
+
source = get_tag(Metadata::Ext::Distributed::TAG_TRACE_SOURCE)&.to_i(16) || 0
|
184
|
+
source |= product_bit
|
185
|
+
set_tag(Metadata::Ext::Distributed::TAG_TRACE_SOURCE, format('%02X', source))
|
186
|
+
end
|
187
|
+
|
176
188
|
def tags
|
177
189
|
all_tags = {}
|
178
190
|
all_tags.merge!(root_span&.tags || {}) if root_span
|
@@ -194,6 +206,7 @@ module Datadog
|
|
194
206
|
|
195
207
|
def measure(
|
196
208
|
op_name,
|
209
|
+
logger: Datadog.logger,
|
197
210
|
events: nil,
|
198
211
|
on_error: nil,
|
199
212
|
resource: nil,
|
@@ -207,7 +220,9 @@ module Datadog
|
|
207
220
|
# Don't allow more span measurements if the
|
208
221
|
# trace is already completed. Prevents multiple
|
209
222
|
# root spans with parent_span_id = 0.
|
210
|
-
return yield(
|
223
|
+
return yield( # rubocop:disable Style/MultilineIfModifier
|
224
|
+
SpanOperation.new(op_name, logger: logger),
|
225
|
+
TraceOperation.new(logger: logger)) if finished? || full?
|
211
226
|
|
212
227
|
# Create new span
|
213
228
|
span_op = build_span(
|
@@ -228,6 +243,7 @@ module Datadog
|
|
228
243
|
|
229
244
|
def build_span(
|
230
245
|
op_name,
|
246
|
+
logger: Datadog.logger,
|
231
247
|
events: nil,
|
232
248
|
on_error: nil,
|
233
249
|
resource: nil,
|
@@ -249,7 +265,7 @@ module Datadog
|
|
249
265
|
parent_id = parent ? parent.id : @parent_span_id || 0
|
250
266
|
|
251
267
|
# Build events
|
252
|
-
events ||= SpanOperation::Events.new
|
268
|
+
events ||= SpanOperation::Events.new(logger: logger)
|
253
269
|
|
254
270
|
# Before start: activate the span, publish events.
|
255
271
|
events.before_start.subscribe do |span_op|
|
@@ -264,6 +280,7 @@ module Datadog
|
|
264
280
|
# Build a new span operation
|
265
281
|
SpanOperation.new(
|
266
282
|
op_name,
|
283
|
+
logger: logger,
|
267
284
|
events: events,
|
268
285
|
on_error: on_error,
|
269
286
|
parent_id: parent_id,
|
@@ -276,10 +293,10 @@ module Datadog
|
|
276
293
|
id: id
|
277
294
|
)
|
278
295
|
rescue StandardError => e
|
279
|
-
|
296
|
+
logger.debug { "Failed to build new span: #{e}" }
|
280
297
|
|
281
298
|
# Return dummy span
|
282
|
-
SpanOperation.new(op_name)
|
299
|
+
SpanOperation.new(op_name, logger: logger)
|
283
300
|
end
|
284
301
|
end
|
285
302
|
|
@@ -311,14 +328,14 @@ module Datadog
|
|
311
328
|
span_id = @active_span && @active_span.id
|
312
329
|
span_id ||= @parent_span_id unless finished?
|
313
330
|
# sample the trace_operation with the tracer
|
314
|
-
|
331
|
+
events.trace_propagated.publish(self)
|
315
332
|
|
316
333
|
TraceDigest.new(
|
317
334
|
span_id: span_id,
|
318
|
-
span_name:
|
319
|
-
span_resource:
|
320
|
-
span_service:
|
321
|
-
span_type:
|
335
|
+
span_name: @active_span && @active_span.name,
|
336
|
+
span_resource: @active_span && @active_span.resource,
|
337
|
+
span_service: @active_span && @active_span.service,
|
338
|
+
span_type: @active_span && @active_span.type,
|
322
339
|
trace_distributed_tags: distributed_tags,
|
323
340
|
trace_hostname: @hostname,
|
324
341
|
trace_id: @id,
|
@@ -331,7 +348,8 @@ module Datadog
|
|
331
348
|
trace_service: service,
|
332
349
|
trace_state: @trace_state,
|
333
350
|
trace_state_unknown_fields: @trace_state_unknown_fields,
|
334
|
-
span_remote:
|
351
|
+
span_remote: @remote_parent && @active_span.nil?,
|
352
|
+
baggage: @baggage.nil? || @baggage.empty? ? nil : @baggage
|
335
353
|
).freeze
|
336
354
|
end
|
337
355
|
|
@@ -351,22 +369,22 @@ module Datadog
|
|
351
369
|
def fork_clone
|
352
370
|
self.class.new(
|
353
371
|
agent_sample_rate: @agent_sample_rate,
|
354
|
-
events:
|
355
|
-
hostname:
|
372
|
+
events: @events && @events.dup,
|
373
|
+
hostname: @hostname && @hostname.dup,
|
356
374
|
id: @id,
|
357
375
|
max_length: @max_length,
|
358
|
-
name:
|
359
|
-
origin:
|
376
|
+
name: name && name.dup,
|
377
|
+
origin: @origin && @origin.dup,
|
360
378
|
parent_span_id: (@active_span && @active_span.id) || @parent_span_id,
|
361
379
|
rate_limiter_rate: @rate_limiter_rate,
|
362
|
-
resource:
|
380
|
+
resource: resource && resource.dup,
|
363
381
|
rule_sample_rate: @rule_sample_rate,
|
364
382
|
sample_rate: @sample_rate,
|
365
383
|
sampled: @sampled,
|
366
384
|
sampling_priority: @sampling_priority,
|
367
|
-
service:
|
368
|
-
trace_state:
|
369
|
-
trace_state_unknown_fields:
|
385
|
+
service: service && service.dup,
|
386
|
+
trace_state: @trace_state && @trace_state.dup,
|
387
|
+
trace_state_unknown_fields: @trace_state_unknown_fields && @trace_state_unknown_fields.dup,
|
370
388
|
tags: meta.dup,
|
371
389
|
metrics: metrics.dup,
|
372
390
|
remote_parent: @remote_parent
|
@@ -380,12 +398,14 @@ module Datadog
|
|
380
398
|
attr_reader \
|
381
399
|
:span_before_start,
|
382
400
|
:span_finished,
|
383
|
-
:trace_finished
|
401
|
+
:trace_finished,
|
402
|
+
:trace_propagated
|
384
403
|
|
385
404
|
def initialize
|
386
405
|
@span_before_start = SpanBeforeStart.new
|
387
406
|
@span_finished = SpanFinished.new
|
388
407
|
@trace_finished = TraceFinished.new
|
408
|
+
@trace_propagated = TracePropagated.new
|
389
409
|
end
|
390
410
|
|
391
411
|
# Triggered before a span starts.
|
@@ -402,6 +422,13 @@ module Datadog
|
|
402
422
|
end
|
403
423
|
end
|
404
424
|
|
425
|
+
# Triggered when trace is being propagated between applications or contexts
|
426
|
+
class TracePropagated < Tracing::Event
|
427
|
+
def initialize
|
428
|
+
super(:trace_propagated)
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
405
432
|
# Triggered when the trace finishes, regardless of error.
|
406
433
|
class TraceFinished < Tracing::Event
|
407
434
|
def initialize
|
@@ -454,7 +481,7 @@ module Datadog
|
|
454
481
|
# Publish :span_before_start event
|
455
482
|
events.span_before_start.publish(span_op, self)
|
456
483
|
rescue StandardError => e
|
457
|
-
|
484
|
+
logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
458
485
|
end
|
459
486
|
end
|
460
487
|
|
@@ -478,7 +505,7 @@ module Datadog
|
|
478
505
|
# Publish :trace_finished event
|
479
506
|
events.trace_finished.publish(self) if finished?
|
480
507
|
rescue StandardError => e
|
481
|
-
|
508
|
+
logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
482
509
|
end
|
483
510
|
end
|
484
511
|
|
@@ -510,6 +537,7 @@ module Datadog
|
|
510
537
|
metrics: metrics,
|
511
538
|
root_span_id: !partial ? root_span && root_span.id : nil,
|
512
539
|
profiling_enabled: @profiling_enabled,
|
540
|
+
apm_tracing_enabled: @apm_tracing_enabled
|
513
541
|
)
|
514
542
|
end
|
515
543
|
|
@@ -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.
|