datadog 2.12.0 → 2.22.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 +348 -1
- data/README.md +0 -1
- data/ext/LIBDATADOG_DEVELOPMENT.md +60 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
- data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
- 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 +10 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
- data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- 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 +41 -21
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
- data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
- data/ext/libdatadog_api/crashtracker.c +11 -12
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/ddsketch.c +106 -0
- data/ext/libdatadog_api/extconf.rb +5 -3
- data/ext/libdatadog_api/init.c +18 -0
- data/ext/libdatadog_api/library_config.c +172 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/process_discovery.c +118 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +15 -5
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +75 -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 +44 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +601 -74
- data/lib/datadog/appsec/assets/waf_rules/strict.json +48 -75
- data/lib/datadog/appsec/autoload.rb +2 -2
- data/lib/datadog/appsec/component.rb +46 -71
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +162 -30
- data/lib/datadog/appsec/context.rb +30 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +35 -18
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +62 -11
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +103 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +70 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +11 -12
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +10 -10
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +10 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +53 -31
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -44
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +35 -11
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +65 -47
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +12 -12
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +45 -22
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/event.rb +91 -147
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +23 -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 +23 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +29 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
- data/lib/datadog/appsec/remote.rb +43 -59
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/engine.rb +176 -0
- data/lib/datadog/appsec/security_engine/result.rb +44 -9
- data/lib/datadog/appsec/security_engine/runner.rb +44 -21
- data/lib/datadog/appsec/security_event.rb +37 -0
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +5 -15
- data/lib/datadog/auto_instrument_base.rb +2 -1
- 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 +8 -50
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +69 -37
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/config_helper.rb +100 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +4 -1
- data/lib/datadog/core/configuration/option.rb +117 -77
- data/lib/datadog/core/configuration/option_definition.rb +5 -14
- data/lib/datadog/core/configuration/options.rb +15 -13
- data/lib/datadog/core/configuration/settings.rb +117 -48
- data/lib/datadog/core/configuration/stable_config.rb +32 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +337 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
- data/lib/datadog/core/ddsketch.rb +21 -0
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -8
- data/lib/datadog/core/environment/git.rb +3 -2
- 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 +4 -4
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +29 -29
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/pin.rb +4 -8
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
- data/lib/datadog/core/process_discovery.rb +61 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +44 -35
- data/lib/datadog/core/remote/component.rb +12 -17
- 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/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +25 -89
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/ext.rb +0 -1
- 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 +92 -52
- 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_endpoints_loaded.rb +30 -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 +287 -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 +18 -472
- 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 +11 -5
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +90 -24
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +19 -17
- 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 -1
- 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 +25 -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 +10 -0
- data/lib/datadog/di/boot.rb +43 -0
- data/lib/datadog/di/component.rb +21 -2
- data/lib/datadog/di/context.rb +70 -0
- data/lib/datadog/di/el/compiler.rb +164 -0
- data/lib/datadog/di/el/evaluator.rb +159 -0
- data/lib/datadog/di/el/expression.rb +42 -0
- data/lib/datadog/di/el.rb +5 -0
- data/lib/datadog/di/error.rb +25 -0
- data/lib/datadog/di/instrumenter.rb +132 -20
- data/lib/datadog/di/probe.rb +35 -15
- data/lib/datadog/di/probe_builder.rb +39 -1
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/probe_manager.rb +3 -2
- data/lib/datadog/di/probe_notification_builder.rb +61 -67
- data/lib/datadog/di/probe_notifier_worker.rb +25 -17
- data/lib/datadog/di/remote.rb +5 -5
- data/lib/datadog/di/serializer.rb +160 -8
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +18 -35
- data/lib/datadog/di/transport/http.rb +15 -77
- data/lib/datadog/di/transport/input.rb +14 -5
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +0 -34
- 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/v2.rb +196 -0
- data/lib/datadog/kit/appsec/events.rb +17 -4
- data/lib/datadog/kit/identity.rb +22 -12
- 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 +21 -6
- data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
- data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +15 -11
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- 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 +6 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +44 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +8 -9
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +12 -7
- data/lib/datadog/profiling/ext.rb +2 -15
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +8 -62
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +7 -41
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +13 -10
- data/lib/datadog/single_step_instrument.rb +9 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/component.rb +21 -29
- data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
- data/lib/datadog/tracing/configuration/ext.rb +8 -4
- data/lib/datadog/tracing/configuration/settings.rb +50 -12
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +19 -4
- 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 +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
- data/lib/datadog/tracing/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +17 -8
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +12 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +8 -2
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/component.rb +2 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +6 -6
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
- data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +7 -5
- data/lib/datadog/tracing/contrib/ext.rb +4 -3
- data/lib/datadog/tracing/contrib/extensions.rb +9 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +9 -5
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +84 -48
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +15 -9
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +11 -15
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -19
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +11 -19
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- 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/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +9 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +23 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +12 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -66
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +12 -11
- data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -3
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +8 -6
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- 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/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +2 -2
- data/lib/datadog/tracing/distributed/baggage.rb +196 -0
- data/lib/datadog/tracing/distributed/datadog.rb +8 -7
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
- data/lib/datadog/tracing/distributed/helpers.rb +1 -1
- data/lib/datadog/tracing/distributed/none.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +28 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +13 -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/tagging.rb +4 -4
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +0 -2
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +11 -2
- data/lib/datadog/tracing/span_event.rb +11 -11
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +76 -26
- data/lib/datadog/tracing/sync_writer.rb +5 -4
- data/lib/datadog/tracing/trace_digest.rb +29 -24
- data/lib/datadog/tracing/trace_operation.rb +121 -97
- data/lib/datadog/tracing/trace_segment.rb +8 -6
- data/lib/datadog/tracing/tracer.rb +90 -43
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +6 -5
- data/lib/datadog/tracing/transport/http/traces.rb +15 -43
- data/lib/datadog/tracing/transport/http.rb +13 -75
- data/lib/datadog/tracing/transport/io/client.rb +5 -5
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +31 -14
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +16 -16
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing/writer.rb +4 -4
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +8 -2
- metadata +115 -24
- data/ext/libdatadog_api/macos_development.md +0 -26
- 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 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
|
@@ -49,6 +49,8 @@ module Datadog
|
|
|
49
49
|
# @param tags [Hash] default tags added to all spans
|
|
50
50
|
# @param writer [Datadog::Tracing::Writer] consumes traces returned by the provided +trace_flush+
|
|
51
51
|
def initialize(
|
|
52
|
+
# rubocop:disable Style/KeywordParametersOrder
|
|
53
|
+
# https://github.com/rubocop/rubocop/issues/13933
|
|
52
54
|
trace_flush: Flush::Finished.new,
|
|
53
55
|
context_provider: DefaultContextProvider.new,
|
|
54
56
|
default_service: Core::Environment::Ext::FALLBACK_SERVICE_NAME,
|
|
@@ -60,7 +62,10 @@ module Datadog
|
|
|
60
62
|
),
|
|
61
63
|
span_sampler: Sampling::Span::Sampler.new,
|
|
62
64
|
tags: {},
|
|
63
|
-
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
|
|
64
69
|
)
|
|
65
70
|
@trace_flush = trace_flush
|
|
66
71
|
@default_service = default_service
|
|
@@ -144,11 +149,11 @@ module Datadog
|
|
|
144
149
|
context = call_context
|
|
145
150
|
active_trace = context.active_trace
|
|
146
151
|
trace = if continue_from || active_trace.nil?
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
rescue
|
|
152
|
+
start_trace(continue_from: continue_from)
|
|
153
|
+
else
|
|
154
|
+
active_trace
|
|
155
|
+
end
|
|
156
|
+
rescue => e
|
|
152
157
|
logger.debug { "Failed to trace: #{e}" }
|
|
153
158
|
|
|
154
159
|
# Tracing failed: fallback and run code without tracing.
|
|
@@ -189,7 +194,6 @@ module Datadog
|
|
|
189
194
|
)
|
|
190
195
|
end
|
|
191
196
|
end
|
|
192
|
-
# rubocop:enable Metrics/MethodLength
|
|
193
197
|
|
|
194
198
|
# Set the given key / value tag pair at the tracer level. These tags will be
|
|
195
199
|
# appended to each span created by the tracer. Keys and values must be strings.
|
|
@@ -220,7 +224,7 @@ module Datadog
|
|
|
220
224
|
# @return [nil] if no trace is active, and thus no span is active
|
|
221
225
|
def active_span(key = nil)
|
|
222
226
|
trace = active_trace(key)
|
|
223
|
-
trace
|
|
227
|
+
trace&.active_span
|
|
224
228
|
end
|
|
225
229
|
|
|
226
230
|
# Information about the currently active trace.
|
|
@@ -267,12 +271,10 @@ module Datadog
|
|
|
267
271
|
|
|
268
272
|
# Sample a span, tagging the trace as appropriate.
|
|
269
273
|
def sample_trace(trace_op)
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
|
275
|
-
end
|
|
274
|
+
@sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
|
|
275
|
+
rescue => e
|
|
276
|
+
SAMPLE_TRACE_LOG_ONLY_ONCE.run do
|
|
277
|
+
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
|
276
278
|
end
|
|
277
279
|
end
|
|
278
280
|
|
|
@@ -292,7 +294,7 @@ module Datadog
|
|
|
292
294
|
# description of and constraints on arguments.
|
|
293
295
|
# rubocop:disable Lint/UselessMethodDefinition
|
|
294
296
|
def publish(trace)
|
|
295
|
-
super
|
|
297
|
+
super
|
|
296
298
|
end
|
|
297
299
|
# rubocop:enable Lint/UselessMethodDefinition
|
|
298
300
|
end
|
|
@@ -310,7 +312,7 @@ module Datadog
|
|
|
310
312
|
def shutdown!
|
|
311
313
|
return unless @enabled
|
|
312
314
|
|
|
313
|
-
@writer
|
|
315
|
+
@writer&.stop
|
|
314
316
|
end
|
|
315
317
|
|
|
316
318
|
private
|
|
@@ -330,33 +332,43 @@ module Datadog
|
|
|
330
332
|
def build_trace(digest = nil)
|
|
331
333
|
# Resolve hostname if configured
|
|
332
334
|
hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
|
|
333
|
-
hostname = hostname && !hostname.empty? ? hostname : nil
|
|
335
|
+
hostname = (hostname && !hostname.empty?) ? hostname : nil
|
|
334
336
|
|
|
335
337
|
if digest
|
|
338
|
+
sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
|
|
339
|
+
digest.trace_sampling_priority
|
|
340
|
+
end
|
|
336
341
|
TraceOperation.new(
|
|
342
|
+
logger: logger,
|
|
337
343
|
hostname: hostname,
|
|
338
344
|
profiling_enabled: profiling_enabled,
|
|
345
|
+
apm_tracing_enabled: apm_tracing_enabled,
|
|
339
346
|
id: digest.trace_id,
|
|
340
347
|
origin: digest.trace_origin,
|
|
341
348
|
parent_span_id: digest.span_id,
|
|
342
|
-
sampling_priority:
|
|
349
|
+
sampling_priority: sampling_priority,
|
|
343
350
|
# Distributed tags are just regular trace tags with special meaning to Datadog
|
|
344
351
|
tags: digest.trace_distributed_tags,
|
|
345
352
|
trace_state: digest.trace_state,
|
|
346
353
|
trace_state_unknown_fields: digest.trace_state_unknown_fields,
|
|
347
354
|
remote_parent: digest.span_remote,
|
|
348
|
-
tracer: self
|
|
355
|
+
tracer: self,
|
|
356
|
+
baggage: digest.baggage
|
|
349
357
|
)
|
|
350
358
|
else
|
|
351
359
|
TraceOperation.new(
|
|
360
|
+
logger: logger,
|
|
352
361
|
hostname: hostname,
|
|
353
362
|
profiling_enabled: profiling_enabled,
|
|
363
|
+
apm_tracing_enabled: apm_tracing_enabled,
|
|
354
364
|
remote_parent: false,
|
|
355
365
|
tracer: self
|
|
356
366
|
)
|
|
357
367
|
end
|
|
358
368
|
end
|
|
369
|
+
# rubocop:enable Metrics/MethodLength
|
|
359
370
|
|
|
371
|
+
# rubocop:disable Metrics/MethodLength
|
|
360
372
|
def bind_trace_events!(trace_op)
|
|
361
373
|
events = trace_op.send(:events)
|
|
362
374
|
|
|
@@ -365,11 +377,17 @@ module Datadog
|
|
|
365
377
|
event_span_op.service ||= @default_service
|
|
366
378
|
end
|
|
367
379
|
|
|
380
|
+
events.trace_propagated.subscribe do |event_trace_op|
|
|
381
|
+
sample_trace(event_trace_op)
|
|
382
|
+
end
|
|
383
|
+
|
|
368
384
|
events.span_finished.subscribe do |event_span, event_trace_op|
|
|
385
|
+
sample_trace(trace_op) if event_trace_op.sampling_priority.nil?
|
|
369
386
|
sample_span(event_trace_op, event_span)
|
|
370
387
|
flush_trace(event_trace_op)
|
|
371
388
|
end
|
|
372
389
|
end
|
|
390
|
+
# rubocop:enable Metrics/MethodLength
|
|
373
391
|
|
|
374
392
|
# Creates a new TraceOperation, with events bounds to this Tracer instance.
|
|
375
393
|
# @return [TraceOperation]
|
|
@@ -384,6 +402,7 @@ module Datadog
|
|
|
384
402
|
end
|
|
385
403
|
|
|
386
404
|
# rubocop:disable Lint/UnderscorePrefixedVariableName
|
|
405
|
+
# rubocop:disable Metrics/MethodLength
|
|
387
406
|
def start_span(
|
|
388
407
|
name,
|
|
389
408
|
continue_from: nil,
|
|
@@ -399,12 +418,13 @@ module Datadog
|
|
|
399
418
|
)
|
|
400
419
|
trace = _trace || start_trace(continue_from: continue_from)
|
|
401
420
|
|
|
402
|
-
events = SpanOperation::Events.new
|
|
421
|
+
events = SpanOperation::Events.new(logger: logger)
|
|
403
422
|
|
|
404
423
|
if block
|
|
405
424
|
# Ignore start time if a block has been given
|
|
406
425
|
trace.measure(
|
|
407
426
|
name,
|
|
427
|
+
logger: logger,
|
|
408
428
|
events: events,
|
|
409
429
|
on_error: on_error,
|
|
410
430
|
resource: resource,
|
|
@@ -418,6 +438,7 @@ module Datadog
|
|
|
418
438
|
# Return the new span
|
|
419
439
|
span = trace.build_span(
|
|
420
440
|
name,
|
|
441
|
+
logger: logger,
|
|
421
442
|
events: events,
|
|
422
443
|
on_error: on_error,
|
|
423
444
|
resource: resource,
|
|
@@ -434,16 +455,17 @@ module Datadog
|
|
|
434
455
|
end
|
|
435
456
|
end
|
|
436
457
|
# rubocop:enable Lint/UnderscorePrefixedVariableName
|
|
458
|
+
# rubocop:enable Metrics/MethodLength
|
|
437
459
|
|
|
438
460
|
def resolve_tags(tags, service)
|
|
439
461
|
merged_tags = if @tags.any? && tags
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
462
|
+
# Combine default tags with provided tags,
|
|
463
|
+
# preferring provided tags.
|
|
464
|
+
@tags.merge(tags)
|
|
465
|
+
else
|
|
466
|
+
# Use provided tags or default tags if none.
|
|
467
|
+
tags || @tags.dup
|
|
468
|
+
end
|
|
447
469
|
# Remove version tag if service is not the default service
|
|
448
470
|
if merged_tags.key?(Core::Environment::Ext::TAG_VERSION) && service && service != @default_service
|
|
449
471
|
merged_tags.delete(Core::Environment::Ext::TAG_VERSION)
|
|
@@ -487,12 +509,10 @@ module Datadog
|
|
|
487
509
|
private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
|
|
488
510
|
|
|
489
511
|
def sample_span(trace_op, span)
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
|
495
|
-
end
|
|
512
|
+
@span_sampler.sample!(trace_op, span)
|
|
513
|
+
rescue => e
|
|
514
|
+
SAMPLE_SPAN_LOG_ONLY_ONCE.run do
|
|
515
|
+
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
|
496
516
|
end
|
|
497
517
|
end
|
|
498
518
|
|
|
@@ -501,14 +521,11 @@ module Datadog
|
|
|
501
521
|
|
|
502
522
|
# Flush finished spans from the trace buffer, send them to writer.
|
|
503
523
|
def flush_trace(trace_op)
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
FLUSH_TRACE_LOG_ONLY_ONCE.run do
|
|
510
|
-
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
|
511
|
-
end
|
|
524
|
+
trace = @trace_flush.consume!(trace_op)
|
|
525
|
+
write(trace) if trace && !trace.empty?
|
|
526
|
+
rescue => e
|
|
527
|
+
FLUSH_TRACE_LOG_ONLY_ONCE.run do
|
|
528
|
+
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
|
512
529
|
end
|
|
513
530
|
end
|
|
514
531
|
|
|
@@ -530,20 +547,50 @@ module Datadog
|
|
|
530
547
|
|
|
531
548
|
# TODO: Make these dummy objects singletons to preserve memory.
|
|
532
549
|
def skip_trace(name)
|
|
533
|
-
span = SpanOperation.new(name)
|
|
550
|
+
span = SpanOperation.new(name, logger: logger)
|
|
534
551
|
|
|
535
552
|
if block_given?
|
|
536
|
-
trace = TraceOperation.new
|
|
553
|
+
trace = TraceOperation.new(logger: logger)
|
|
537
554
|
yield(span, trace)
|
|
538
555
|
else
|
|
539
556
|
span
|
|
540
557
|
end
|
|
541
558
|
end
|
|
542
559
|
|
|
560
|
+
# Decide whether upstream sampling priority should be propagated, by taking into account
|
|
561
|
+
# the upstream tags and the configuration.
|
|
562
|
+
# We should always propagate if APM is enabled.
|
|
563
|
+
#
|
|
564
|
+
# e.g.: upstream tags containing dd.p.ts: 02, and appsec is enabled, return true.
|
|
565
|
+
def propagate_sampling_priority?(upstream_tags:)
|
|
566
|
+
return true if apm_tracing_enabled
|
|
567
|
+
|
|
568
|
+
if upstream_tags&.key?(Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE)
|
|
569
|
+
appsec_bit = upstream_tags[Tracing::Metadata::Ext::Distributed::TAG_TRACE_SOURCE].to_i(16) &
|
|
570
|
+
Datadog::AppSec::Ext::PRODUCT_BIT
|
|
571
|
+
return appsec_enabled if appsec_bit != 0
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
false
|
|
575
|
+
end
|
|
576
|
+
|
|
543
577
|
def profiling_enabled
|
|
544
578
|
@profiling_enabled ||=
|
|
545
579
|
!!(defined?(Datadog::Profiling) && Datadog::Profiling.respond_to?(:enabled?) && Datadog::Profiling.enabled?)
|
|
546
580
|
end
|
|
581
|
+
|
|
582
|
+
def appsec_enabled
|
|
583
|
+
@appsec_enabled ||= Datadog.configuration.appsec.enabled
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
# Due to APM Tracing (the product) and Tracing (the transport) being intertwined, we cannot completely disabled APM
|
|
587
|
+
# without also disabling the tracer. When setting `@apm_tracing_enabled` to `false`, it does not disable the tracer,
|
|
588
|
+
# but rather only sends heartbeat traces (1 per minutes), so that the service is considered alive in the backend.
|
|
589
|
+
# Other products (like ASM) can then set the sampling priority of their traces to `MANUAL_KEEP`,
|
|
590
|
+
# effectively allowing standalone products to work without APM.
|
|
591
|
+
def apm_tracing_enabled
|
|
592
|
+
@apm_tracing_enabled ||= Datadog.configuration.apm.tracing.enabled
|
|
593
|
+
end
|
|
547
594
|
end
|
|
548
595
|
end
|
|
549
596
|
end
|
|
@@ -22,14 +22,14 @@ module Datadog
|
|
|
22
22
|
|
|
23
23
|
def defaults
|
|
24
24
|
Core::Transport::HTTP::API::Map[
|
|
25
|
-
V4 => Spec.new do |s|
|
|
25
|
+
V4 => Traces::API::Spec.new do |s|
|
|
26
26
|
s.traces = Traces::API::Endpoint.new(
|
|
27
27
|
'/v0.4/traces',
|
|
28
28
|
Core::Encoding::MsgpackEncoder,
|
|
29
29
|
service_rates: true
|
|
30
30
|
)
|
|
31
31
|
end,
|
|
32
|
-
V3 => Spec.new do |s|
|
|
32
|
+
V3 => Traces::API::Spec.new do |s|
|
|
33
33
|
s.traces = Traces::API::Endpoint.new(
|
|
34
34
|
'/v0.3/traces',
|
|
35
35
|
Core::Encoding::MsgpackEncoder
|
|
@@ -37,14 +37,6 @@ module Datadog
|
|
|
37
37
|
end,
|
|
38
38
|
].with_fallbacks(V4 => V3)
|
|
39
39
|
end
|
|
40
|
-
|
|
41
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
|
42
|
-
include Traces::API::Instance
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
|
46
|
-
include Traces::API::Spec
|
|
47
|
-
end
|
|
48
40
|
end
|
|
49
41
|
end
|
|
50
42
|
end
|
|
@@ -12,10 +12,11 @@ module Datadog
|
|
|
12
12
|
class Client
|
|
13
13
|
include Datadog::Tracing::Transport::HTTP::Statistics
|
|
14
14
|
|
|
15
|
-
attr_reader :api
|
|
15
|
+
attr_reader :api, :logger
|
|
16
16
|
|
|
17
|
-
def initialize(api)
|
|
17
|
+
def initialize(api, logger: Datadog.logger)
|
|
18
18
|
@api = api
|
|
19
|
+
@logger = logger
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def send_request(request, &block)
|
|
@@ -29,17 +30,17 @@ module Datadog
|
|
|
29
30
|
update_stats_from_response!(response)
|
|
30
31
|
|
|
31
32
|
response
|
|
32
|
-
rescue
|
|
33
|
+
rescue => e
|
|
33
34
|
message =
|
|
34
35
|
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
|
35
36
|
"Location: #{Array(e.backtrace).first}"
|
|
36
37
|
|
|
37
38
|
# Log error
|
|
38
39
|
if stats.consecutive_errors > 0
|
|
39
|
-
|
|
40
|
+
logger.debug(message)
|
|
40
41
|
else
|
|
41
42
|
# Not to report telemetry logs
|
|
42
|
-
|
|
43
|
+
logger.error(message)
|
|
43
44
|
end
|
|
44
45
|
|
|
45
46
|
# Update statistics
|
|
@@ -6,6 +6,8 @@ require_relative '../traces'
|
|
|
6
6
|
require_relative 'client'
|
|
7
7
|
require_relative '../../../core/transport/http/response'
|
|
8
8
|
require_relative '../../../core/transport/http/api/endpoint'
|
|
9
|
+
require_relative '../../../core/transport/http/api/spec'
|
|
10
|
+
require_relative '../../../core/transport/http/api/instance'
|
|
9
11
|
|
|
10
12
|
module Datadog
|
|
11
13
|
module Tracing
|
|
@@ -35,16 +37,12 @@ module Datadog
|
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
module API
|
|
38
|
-
#
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def traces=(endpoint)
|
|
43
|
-
@traces = endpoint
|
|
44
|
-
end
|
|
40
|
+
# HTTP API Spec
|
|
41
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
|
42
|
+
attr_accessor :traces
|
|
45
43
|
|
|
46
44
|
def send_traces(env, &block)
|
|
47
|
-
raise
|
|
45
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('traces', self) if traces.nil?
|
|
48
46
|
|
|
49
47
|
traces.call(env, &block)
|
|
50
48
|
end
|
|
@@ -52,47 +50,21 @@ module Datadog
|
|
|
52
50
|
def encoder
|
|
53
51
|
traces.encoder
|
|
54
52
|
end
|
|
55
|
-
|
|
56
|
-
# Raised when traces sent but no traces endpoint is defined
|
|
57
|
-
class NoTraceEndpointDefinedError < StandardError
|
|
58
|
-
attr_reader :spec
|
|
59
|
-
|
|
60
|
-
def initialize(spec)
|
|
61
|
-
super
|
|
62
|
-
|
|
63
|
-
@spec = spec
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def message
|
|
67
|
-
'No trace endpoint is defined for API specification!'
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
53
|
end
|
|
71
54
|
|
|
72
|
-
#
|
|
73
|
-
|
|
55
|
+
# HTTP API Instance
|
|
56
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
|
74
57
|
def send_traces(env)
|
|
75
|
-
|
|
58
|
+
unless spec.is_a?(Traces::API::Spec)
|
|
59
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
|
60
|
+
'traces', self
|
|
61
|
+
)
|
|
62
|
+
end
|
|
76
63
|
|
|
77
64
|
spec.send_traces(env) do |request_env|
|
|
78
65
|
call(request_env)
|
|
79
66
|
end
|
|
80
67
|
end
|
|
81
|
-
|
|
82
|
-
# Raised when traces sent to API that does not support traces
|
|
83
|
-
class TracesNotSupportedError < StandardError
|
|
84
|
-
attr_reader :spec
|
|
85
|
-
|
|
86
|
-
def initialize(spec)
|
|
87
|
-
super
|
|
88
|
-
|
|
89
|
-
@spec = spec
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def message
|
|
93
|
-
'Traces not supported for this API!'
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
68
|
end
|
|
97
69
|
|
|
98
70
|
# Endpoint for submitting trace data
|
|
@@ -123,10 +95,10 @@ module Datadog
|
|
|
123
95
|
env.body = env.request.parcel.data
|
|
124
96
|
|
|
125
97
|
# Query for response
|
|
126
|
-
http_response = super
|
|
98
|
+
http_response = super
|
|
127
99
|
|
|
128
100
|
# Process the response
|
|
129
|
-
response_options = {
|
|
101
|
+
response_options = {trace_count: env.request.parcel.trace_count}.tap do |options|
|
|
130
102
|
# Parse service rates, if configured to do so.
|
|
131
103
|
if service_rates? && !http_response.payload.to_s.empty?
|
|
132
104
|
body = JSON.parse(http_response.payload)
|
|
@@ -1,14 +1,9 @@
|
|
|
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'
|
|
11
|
-
require_relative '../../core/transport/http/builder'
|
|
6
|
+
require_relative '../../core/transport/http'
|
|
12
7
|
require_relative 'http/api'
|
|
13
8
|
require_relative '../../../datadog/version'
|
|
14
9
|
|
|
@@ -17,89 +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(klass, &block)
|
|
34
|
-
Core::Transport::HTTP::Builder.new(
|
|
35
|
-
api_instance_class: API::Instance, &block
|
|
36
|
-
).to_transport(klass)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
17
|
# Builds a new Transport::HTTP::Client with default settings
|
|
40
18
|
# Pass a block to override any settings.
|
|
41
19
|
def default(
|
|
42
|
-
agent_settings
|
|
43
|
-
|
|
20
|
+
agent_settings:,
|
|
21
|
+
logger: Datadog.logger,
|
|
22
|
+
api_version: nil,
|
|
23
|
+
headers: nil
|
|
44
24
|
)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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|
|
|
49
32
|
apis = API.defaults
|
|
50
33
|
|
|
51
34
|
transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
|
|
52
35
|
transport.api API::V3, apis[API::V3]
|
|
53
36
|
|
|
54
|
-
# Apply any settings given by options
|
|
55
|
-
unless options.empty?
|
|
56
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
|
57
|
-
transport.headers options[:headers] if options.key?(:headers)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
37
|
# Call block to apply any customization, if provided
|
|
61
38
|
yield(transport) if block_given?
|
|
62
|
-
end
|
|
39
|
+
end.to_transport(Transport::Traces::Transport)
|
|
63
40
|
end
|
|
64
|
-
|
|
65
|
-
def default_headers
|
|
66
|
-
{
|
|
67
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
|
68
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
|
69
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
|
70
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
|
71
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
|
72
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
|
73
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
|
74
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
|
75
|
-
}.tap do |headers|
|
|
76
|
-
# Add container ID, if present.
|
|
77
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
|
78
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
|
79
|
-
# Pretend that stats computation are already done by the client
|
|
80
|
-
if Datadog.configuration.appsec.standalone.enabled
|
|
81
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def default_adapter
|
|
87
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# Add adapters to registry
|
|
91
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
|
92
|
-
Datadog::Core::Transport::HTTP::Adapters::Net,
|
|
93
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
|
94
|
-
)
|
|
95
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
|
96
|
-
Datadog::Core::Transport::HTTP::Adapters::Test,
|
|
97
|
-
Datadog::Core::Transport::Ext::Test::ADAPTER
|
|
98
|
-
)
|
|
99
|
-
Core::Transport::HTTP::Builder::REGISTRY.set(
|
|
100
|
-
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
|
101
|
-
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
|
102
|
-
)
|
|
103
41
|
end
|
|
104
42
|
end
|
|
105
43
|
end
|
|
@@ -30,17 +30,17 @@ module Datadog
|
|
|
30
30
|
# If block is given, allow it to handle writing
|
|
31
31
|
# Otherwise do a standard encode/write/response.
|
|
32
32
|
response = if block_given?
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
yield(out, request)
|
|
34
|
+
else
|
|
35
|
+
@request_block.call(out, request)
|
|
36
|
+
end
|
|
37
37
|
|
|
38
38
|
# Update statistics
|
|
39
39
|
update_stats_from_response!(response)
|
|
40
40
|
|
|
41
41
|
# Return response
|
|
42
42
|
response
|
|
43
|
-
rescue
|
|
43
|
+
rescue => e
|
|
44
44
|
message =
|
|
45
45
|
"Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
|
|
46
46
|
"Location: #{Array(e.backtrace).first}"
|
|
@@ -69,7 +69,7 @@ module Datadog
|
|
|
69
69
|
def to_msgpack(packer = nil)
|
|
70
70
|
packer ||= MessagePack::Packer.new
|
|
71
71
|
|
|
72
|
-
number_of_elements_to_write =
|
|
72
|
+
number_of_elements_to_write = 12
|
|
73
73
|
|
|
74
74
|
number_of_elements_to_write += 1 if span.events.any? && @native_events_supported
|
|
75
75
|
|
|
@@ -117,6 +117,8 @@ module Datadog
|
|
|
117
117
|
packer.write(span.meta)
|
|
118
118
|
packer.write('metrics')
|
|
119
119
|
packer.write(span.metrics)
|
|
120
|
+
packer.write('meta_struct')
|
|
121
|
+
packer.write(span.metastruct)
|
|
120
122
|
packer.write('span_links')
|
|
121
123
|
packer.write(span.links.map(&:to_hash))
|
|
122
124
|
packer.write('error')
|
|
@@ -59,6 +59,7 @@ module Datadog
|
|
|
59
59
|
tag_high_order_trace_id!
|
|
60
60
|
tag_sampling_priority!
|
|
61
61
|
tag_profiling_enabled!
|
|
62
|
+
tag_apm_tracing_disabled!
|
|
62
63
|
|
|
63
64
|
if first_span
|
|
64
65
|
tag_git_repository_url!
|
|
@@ -196,6 +197,12 @@ module Datadog
|
|
|
196
197
|
)
|
|
197
198
|
end
|
|
198
199
|
|
|
200
|
+
def tag_apm_tracing_disabled!
|
|
201
|
+
return if trace.apm_tracing_enabled
|
|
202
|
+
|
|
203
|
+
root_span.set_tag(Tracing::Metadata::Ext::TAG_APM_ENABLED, 0)
|
|
204
|
+
end
|
|
205
|
+
|
|
199
206
|
def tag_git_repository_url!
|
|
200
207
|
return if git_repository_url.nil?
|
|
201
208
|
|