ddtrace 1.12.1 → 1.23.2
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 +613 -9
- data/LICENSE-3rdparty.csv +1 -1
- data/bin/ddprofrb +15 -0
- data/bin/ddtracerb +3 -1
- data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
- data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +3 -5
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +3 -22
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -1
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +338 -108
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +22 -14
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +4 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +3 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +111 -118
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +11 -4
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +545 -144
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +3 -2
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +68 -17
- data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +6 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +60 -32
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +50 -4
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +155 -32
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +16 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +19 -3
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +33 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +1040 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
- data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
- data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
- data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +698 -75
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +98 -8
- data/lib/datadog/appsec/assets.rb +8 -0
- data/lib/datadog/appsec/component.rb +21 -2
- data/lib/datadog/appsec/configuration/settings.rb +167 -189
- data/lib/datadog/appsec/configuration.rb +0 -79
- data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -4
- data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
- data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
- data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
- data/lib/datadog/appsec/contrib/devise/tracking.rb +57 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -2
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +8 -6
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +3 -8
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +3 -6
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +3 -6
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +77 -27
- data/lib/datadog/appsec/contrib/rails/ext.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/framework.rb +1 -3
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -11
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +3 -6
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -3
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +6 -4
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +13 -7
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +3 -6
- data/lib/datadog/appsec/event.rb +106 -50
- data/lib/datadog/appsec/extensions.rb +1 -130
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +3 -6
- data/lib/datadog/appsec/processor/actions.rb +49 -0
- data/lib/datadog/appsec/processor/rule_loader.rb +60 -0
- data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
- data/lib/datadog/appsec/processor.rb +35 -7
- data/lib/datadog/appsec/rate_limiter.rb +1 -1
- data/lib/datadog/appsec/remote.rb +17 -11
- data/lib/datadog/appsec/response.rb +82 -4
- data/lib/datadog/appsec/sample_rate.rb +21 -0
- data/lib/datadog/appsec.rb +3 -4
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/backport.rb +51 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +38 -29
- data/lib/datadog/core/configuration/base.rb +6 -16
- data/lib/datadog/core/configuration/components.rb +20 -7
- data/lib/datadog/core/configuration/ext.rb +28 -5
- data/lib/datadog/core/configuration/option.rb +271 -21
- data/lib/datadog/core/configuration/option_definition.rb +73 -32
- data/lib/datadog/core/configuration/options.rb +27 -15
- data/lib/datadog/core/configuration/settings.rb +398 -119
- data/lib/datadog/core/configuration.rb +24 -4
- data/lib/datadog/core/diagnostics/environment_logger.rb +132 -235
- data/lib/datadog/core/environment/class_count.rb +6 -6
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +13 -11
- data/lib/datadog/core/environment/git.rb +25 -0
- data/lib/datadog/core/environment/identity.rb +18 -48
- data/lib/datadog/core/environment/platform.rb +7 -1
- data/lib/datadog/core/environment/variable_helpers.rb +0 -69
- data/lib/datadog/core/environment/yjit.rb +58 -0
- data/lib/datadog/core/error.rb +1 -0
- data/lib/datadog/core/git/ext.rb +6 -23
- data/lib/datadog/core/logging/ext.rb +3 -1
- data/lib/datadog/core/metrics/ext.rb +7 -5
- data/lib/datadog/core/remote/client/capabilities.rb +7 -2
- data/lib/datadog/core/remote/client.rb +3 -0
- data/lib/datadog/core/remote/component.rb +52 -48
- data/lib/datadog/core/remote/configuration/content.rb +28 -1
- data/lib/datadog/core/remote/configuration/repository.rb +3 -1
- data/lib/datadog/core/remote/ext.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +20 -7
- data/lib/datadog/core/remote/tie/tracing.rb +39 -0
- data/lib/datadog/core/remote/tie.rb +27 -0
- data/lib/datadog/core/remote/transport/config.rb +60 -0
- data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
- data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
- data/lib/datadog/core/remote/transport/http/api.rb +58 -0
- data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
- data/lib/datadog/core/remote/transport/http/client.rb +48 -0
- data/lib/datadog/core/remote/transport/http/config.rb +280 -0
- data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
- data/lib/datadog/core/remote/transport/http.rb +179 -0
- data/lib/datadog/core/{transport → remote/transport}/negotiation.rb +25 -23
- data/lib/datadog/core/remote/worker.rb +11 -5
- data/lib/datadog/core/runtime/ext.rb +22 -12
- data/lib/datadog/core/runtime/metrics.rb +43 -0
- data/lib/datadog/core/telemetry/client.rb +28 -10
- data/lib/datadog/core/telemetry/emitter.rb +9 -11
- data/lib/datadog/core/telemetry/event.rb +250 -44
- data/lib/datadog/core/telemetry/ext.rb +8 -1
- data/lib/datadog/core/telemetry/heartbeat.rb +3 -7
- data/lib/datadog/core/telemetry/http/ext.rb +13 -8
- data/lib/datadog/core/telemetry/http/response.rb +4 -0
- data/lib/datadog/core/telemetry/http/transport.rb +10 -3
- data/lib/datadog/core/telemetry/request.rb +59 -0
- data/lib/datadog/core/transport/ext.rb +49 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
- data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
- data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
- data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
- data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
- data/lib/datadog/core/transport/http/api/map.rb +18 -0
- data/lib/datadog/core/transport/http/env.rb +62 -0
- data/lib/datadog/core/transport/http/response.rb +60 -0
- data/lib/datadog/core/transport/parcel.rb +22 -0
- data/lib/datadog/core/transport/request.rb +17 -0
- data/lib/datadog/core/transport/response.rb +64 -0
- data/lib/datadog/core/utils/duration.rb +52 -0
- data/lib/datadog/core/utils/hash.rb +47 -0
- data/lib/datadog/core/utils/network.rb +1 -1
- data/lib/datadog/core/utils/safe_dup.rb +27 -20
- data/lib/datadog/core/utils/url.rb +25 -0
- data/lib/datadog/core/utils.rb +1 -1
- data/lib/datadog/core/workers/async.rb +3 -2
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/kit/appsec/events.rb +139 -89
- data/lib/datadog/kit/enable_core_dumps.rb +5 -6
- data/lib/datadog/kit/identity.rb +80 -65
- data/lib/datadog/opentelemetry/api/context.rb +10 -3
- data/lib/datadog/opentelemetry/sdk/propagator.rb +5 -3
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +48 -5
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
- data/lib/datadog/opentelemetry/trace.rb +58 -0
- data/lib/datadog/opentelemetry.rb +4 -0
- data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
- data/lib/datadog/opentracer.rb +9 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +10 -4
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +43 -20
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
- data/lib/datadog/profiling/collectors/info.rb +101 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +248 -97
- data/lib/datadog/profiling/exporter.rb +26 -5
- data/lib/datadog/profiling/ext.rb +2 -12
- data/lib/datadog/profiling/flush.rb +10 -5
- data/lib/datadog/profiling/http_transport.rb +23 -6
- data/lib/datadog/profiling/load_native_extension.rb +25 -6
- data/lib/datadog/profiling/native_extension.rb +1 -22
- data/lib/datadog/profiling/profiler.rb +36 -13
- data/lib/datadog/profiling/scheduler.rb +20 -15
- data/lib/datadog/profiling/stack_recorder.rb +19 -4
- data/lib/datadog/profiling/tag_builder.rb +5 -0
- data/lib/datadog/profiling/tasks/exec.rb +3 -3
- data/lib/datadog/profiling/tasks/help.rb +3 -3
- data/lib/datadog/profiling.rb +28 -79
- data/lib/datadog/tracing/component.rb +70 -11
- data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
- data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
- data/lib/datadog/tracing/configuration/ext.rb +40 -33
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +136 -99
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +11 -8
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/action_view/ext.rb +13 -10
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/active_job/ext.rb +26 -23
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +13 -10
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +29 -15
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
- data/lib/datadog/tracing/contrib/active_record/ext.rb +18 -15
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +106 -202
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/active_support/ext.rb +19 -16
- data/lib/datadog/tracing/contrib/analytics.rb +0 -1
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/aws/ext.rb +38 -24
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +14 -14
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +3 -10
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +19 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configurable.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +21 -7
- data/lib/datadog/tracing/contrib/dalli/ext.rb +27 -11
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +17 -14
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +22 -15
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
- data/lib/datadog/tracing/contrib/ethon/ext.rb +20 -11
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +20 -10
- data/lib/datadog/tracing/contrib/excon/ext.rb +17 -8
- data/lib/datadog/tracing/contrib/excon/middleware.rb +25 -5
- data/lib/datadog/tracing/contrib/ext.rb +26 -1
- data/lib/datadog/tracing/contrib/extensions.rb +38 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +27 -10
- data/lib/datadog/tracing/contrib/faraday/ext.rb +17 -8
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +22 -6
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/grape/ext.rb +17 -14
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/graphql/ext.rb +8 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +40 -9
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +39 -20
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +37 -18
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
- data/lib/datadog/tracing/contrib/grpc/ext.rb +17 -13
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/hanami/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +5 -8
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +2 -2
- data/lib/datadog/tracing/contrib/http/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +18 -9
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +34 -11
- data/lib/datadog/tracing/contrib/httprb/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/kafka/ext.rb +43 -39
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/lograge/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -17
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +21 -16
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +22 -14
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +16 -10
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +22 -7
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +53 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +23 -14
- data/lib/datadog/tracing/contrib/pg/ext.rb +23 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +49 -9
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +15 -7
- data/lib/datadog/tracing/contrib/presto/ext.rb +26 -20
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +14 -5
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +13 -8
- data/lib/datadog/tracing/contrib/qless/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +22 -12
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +17 -12
- data/lib/datadog/tracing/contrib/rack/ext.rb +19 -16
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +16 -50
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +20 -15
- data/lib/datadog/tracing/contrib/rails/ext.rb +8 -5
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -10
- data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -41
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +14 -10
- data/lib/datadog/tracing/contrib/rake/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +18 -9
- data/lib/datadog/tracing/contrib/redis/ext.rb +23 -15
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +5 -40
- data/lib/datadog/tracing/contrib/redis/patcher.rb +34 -21
- data/lib/datadog/tracing/contrib/redis/tags.rb +16 -7
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +46 -33
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/resque/ext.rb +10 -7
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +3 -2
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +3 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +4 -20
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/sequel/ext.rb +11 -8
- data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +15 -12
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +19 -11
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +33 -30
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +12 -9
- data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +22 -19
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +74 -10
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/stripe/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +10 -6
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +16 -13
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
- data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/trilogy}/patcher.rb +10 -6
- data/lib/datadog/tracing/contrib/utils/database.rb +5 -3
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +11 -11
- data/lib/datadog/tracing/contrib.rb +2 -0
- data/lib/datadog/tracing/correlation.rb +29 -12
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
- data/lib/datadog/tracing/diagnostics/ext.rb +21 -19
- data/lib/datadog/tracing/distributed/b3_multi.rb +2 -2
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/datadog.rb +0 -1
- data/lib/datadog/tracing/distributed/propagation.rb +35 -34
- data/lib/datadog/tracing/distributed/trace_context.rb +52 -17
- data/lib/datadog/tracing/metadata/ext.rb +9 -6
- data/lib/datadog/tracing/metadata/tagging.rb +3 -3
- data/lib/datadog/tracing/remote.rb +78 -0
- data/lib/datadog/tracing/sampling/matcher.rb +23 -3
- data/lib/datadog/tracing/sampling/rule.rb +7 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +31 -0
- data/lib/datadog/tracing/span_operation.rb +3 -15
- data/lib/datadog/tracing/sync_writer.rb +3 -3
- data/lib/datadog/tracing/trace_digest.rb +31 -0
- data/lib/datadog/tracing/trace_operation.rb +17 -5
- data/lib/datadog/tracing/trace_segment.rb +5 -2
- data/lib/datadog/tracing/tracer.rb +12 -1
- data/lib/datadog/{core → tracing}/transport/http/api/instance.rb +1 -1
- data/lib/datadog/{core → tracing}/transport/http/api/spec.rb +1 -1
- data/lib/datadog/tracing/transport/http/api.rb +43 -0
- data/lib/datadog/{core → tracing}/transport/http/builder.rb +13 -68
- data/lib/datadog/tracing/transport/http/client.rb +57 -0
- data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
- data/lib/datadog/tracing/transport/http/traces.rb +152 -0
- data/lib/datadog/tracing/transport/http.rb +125 -0
- data/lib/datadog/tracing/transport/io/client.rb +89 -0
- data/lib/datadog/tracing/transport/io/response.rb +27 -0
- data/lib/datadog/tracing/transport/io/traces.rb +101 -0
- data/lib/datadog/tracing/transport/io.rb +30 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
- data/lib/datadog/tracing/transport/statistics.rb +77 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
- data/lib/datadog/tracing/transport/traces.rb +224 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +6 -4
- data/lib/datadog/tracing/workers.rb +4 -2
- data/lib/datadog/tracing/writer.rb +5 -2
- data/lib/datadog/tracing.rb +8 -2
- data/lib/ddtrace/transport/ext.rb +22 -14
- data/lib/ddtrace/version.rb +9 -12
- data/lib/ddtrace.rb +1 -1
- metadata +157 -139
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +0 -25
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -110
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +0 -591
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +0 -14
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +0 -17
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +0 -10
- data/lib/datadog/ci/configuration/components.rb +0 -32
- data/lib/datadog/ci/configuration/settings.rb +0 -53
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
- data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -20
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
- data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -47
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
- data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -19
- data/lib/datadog/ci/contrib/rspec/integration.rb +0 -48
- data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
- data/lib/datadog/ci/ext/app_types.rb +0 -9
- data/lib/datadog/ci/ext/environment.rb +0 -575
- data/lib/datadog/ci/ext/settings.rb +0 -10
- data/lib/datadog/ci/ext/test.rb +0 -35
- data/lib/datadog/ci/extensions.rb +0 -19
- data/lib/datadog/ci/flush.rb +0 -38
- data/lib/datadog/ci/test.rb +0 -81
- data/lib/datadog/ci.rb +0 -20
- data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
- data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
- data/lib/datadog/core/configuration/option_set.rb +0 -10
- data/lib/datadog/core/telemetry/collector.rb +0 -231
- data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
- data/lib/datadog/core/telemetry/v1/application.rb +0 -92
- data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
- data/lib/datadog/core/telemetry/v1/dependency.rb +0 -43
- data/lib/datadog/core/telemetry/v1/host.rb +0 -59
- data/lib/datadog/core/telemetry/v1/integration.rb +0 -64
- data/lib/datadog/core/telemetry/v1/product.rb +0 -36
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -106
- data/lib/datadog/core/transport/config.rb +0 -58
- data/lib/datadog/core/transport/http/api.rb +0 -57
- data/lib/datadog/core/transport/http/client.rb +0 -45
- data/lib/datadog/core/transport/http/config.rb +0 -268
- data/lib/datadog/core/transport/http/negotiation.rb +0 -144
- data/lib/datadog/core/transport/http.rb +0 -169
- data/lib/datadog/core/utils/object_set.rb +0 -43
- data/lib/datadog/core/utils/string_table.rb +0 -47
- data/lib/datadog/profiling/backtrace_location.rb +0 -34
- data/lib/datadog/profiling/buffer.rb +0 -43
- data/lib/datadog/profiling/collectors/old_stack.rb +0 -301
- data/lib/datadog/profiling/encoding/profile.rb +0 -41
- data/lib/datadog/profiling/event.rb +0 -15
- data/lib/datadog/profiling/events/stack.rb +0 -82
- data/lib/datadog/profiling/old_recorder.rb +0 -107
- data/lib/datadog/profiling/pprof/builder.rb +0 -125
- data/lib/datadog/profiling/pprof/converter.rb +0 -102
- data/lib/datadog/profiling/pprof/message_set.rb +0 -16
- data/lib/datadog/profiling/pprof/payload.rb +0 -20
- data/lib/datadog/profiling/pprof/pprof.proto +0 -212
- data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -81
- data/lib/datadog/profiling/pprof/stack_sample.rb +0 -139
- data/lib/datadog/profiling/pprof/string_table.rb +0 -12
- data/lib/datadog/profiling/pprof/template.rb +0 -118
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -43
- data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -45
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
- data/lib/ddtrace/transport/http/adapters/net.rb +0 -168
- data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
- data/lib/ddtrace/transport/http/adapters/test.rb +0 -85
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -77
- data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
- data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
- data/lib/ddtrace/transport/http/api/instance.rb +0 -35
- data/lib/ddtrace/transport/http/api/map.rb +0 -16
- data/lib/ddtrace/transport/http/api/spec.rb +0 -17
- data/lib/ddtrace/transport/http/api.rb +0 -39
- data/lib/ddtrace/transport/http/builder.rb +0 -176
- data/lib/ddtrace/transport/http/client.rb +0 -52
- data/lib/ddtrace/transport/http/env.rb +0 -58
- data/lib/ddtrace/transport/http/response.rb +0 -58
- data/lib/ddtrace/transport/http/statistics.rb +0 -43
- data/lib/ddtrace/transport/http/traces.rb +0 -144
- data/lib/ddtrace/transport/http.rb +0 -117
- data/lib/ddtrace/transport/io/client.rb +0 -85
- data/lib/ddtrace/transport/io/response.rb +0 -25
- data/lib/ddtrace/transport/io/traces.rb +0 -99
- data/lib/ddtrace/transport/io.rb +0 -28
- data/lib/ddtrace/transport/parcel.rb +0 -20
- data/lib/ddtrace/transport/request.rb +0 -15
- data/lib/ddtrace/transport/response.rb +0 -60
- data/lib/ddtrace/transport/serializable_trace.rb +0 -122
- data/lib/ddtrace/transport/statistics.rb +0 -75
- data/lib/ddtrace/transport/trace_formatter.rb +0 -198
- data/lib/ddtrace/transport/traces.rb +0 -216
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
- /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module OpenTelemetry
|
|
5
|
+
module Trace
|
|
6
|
+
# Stores associated Datadog entities to the OpenTelemetry Span.
|
|
7
|
+
module Span
|
|
8
|
+
# Attributes are equivalent to span tags and metrics.
|
|
9
|
+
def set_attribute(key, value)
|
|
10
|
+
res = super
|
|
11
|
+
# Attributes can get dropped or their values truncated by `super`
|
|
12
|
+
datadog_set_attribute(key)
|
|
13
|
+
res
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# `alias` performed to match {OpenTelemetry::SDK::Trace::Span} aliasing upstream
|
|
17
|
+
alias []= set_attribute
|
|
18
|
+
|
|
19
|
+
# Attributes are equivalent to span tags and metrics.
|
|
20
|
+
def add_attributes(attributes)
|
|
21
|
+
res = super
|
|
22
|
+
# Attributes can get dropped or their values truncated by `super`
|
|
23
|
+
attributes.each { |key, _| datadog_set_attribute(key) }
|
|
24
|
+
res
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Captures changes to span error state.
|
|
28
|
+
def status=(s)
|
|
29
|
+
super
|
|
30
|
+
|
|
31
|
+
return unless status # Return if status are currently disabled by OpenTelemetry.
|
|
32
|
+
return unless (span = datadog_span)
|
|
33
|
+
|
|
34
|
+
# Status code can only change into an error state.
|
|
35
|
+
# Other change operations should be ignored.
|
|
36
|
+
span.set_error(status.description) if status && status.code == ::OpenTelemetry::Trace::Status::ERROR
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Serialize values into Datadog span tags and metrics.
|
|
40
|
+
# Notably, arrays are exploded into many keys, each with
|
|
41
|
+
# a numeric suffix representing the array index, for example:
|
|
42
|
+
# `'foo' => ['a','b']` becomes `'foo.0' => 'a', 'foo.1' => 'b'`
|
|
43
|
+
def self.serialize_attribute(key, value)
|
|
44
|
+
if value.is_a?(Array)
|
|
45
|
+
value.flat_map.with_index do |v, idx|
|
|
46
|
+
serialize_attribute("#{key}.#{idx}", v)
|
|
47
|
+
end
|
|
48
|
+
elsif value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
|
49
|
+
[[key, value.to_s]]
|
|
50
|
+
else
|
|
51
|
+
[[key, value]]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Create a meaningful Datadog operation name from the OpenTelemetry
|
|
56
|
+
# semantic convention for span kind and span attributes.
|
|
57
|
+
# @see https://opentelemetry.io/docs/specs/semconv/general/trace/
|
|
58
|
+
|
|
59
|
+
# rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
|
60
|
+
def self.enrich_name(kind, attrs)
|
|
61
|
+
if attrs.key?('http.request.method')
|
|
62
|
+
return 'http.server.request' if kind == :server
|
|
63
|
+
return 'http.client.request' if kind == :client
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
return "#{attrs['db.system']}.query" if attrs.key?('db.system') && kind == :client
|
|
67
|
+
|
|
68
|
+
if (attrs.key?('messaging.system') || attrs.key?('messaging.operation')) &&
|
|
69
|
+
[:consumer, :producer, :server, :client].include?(kind)
|
|
70
|
+
|
|
71
|
+
return "#{attrs['messaging.system']}.#{attrs['messaging.operation']}"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
if attrs.key?('rpc.system')
|
|
75
|
+
if attrs['rpc.system'] == 'aws-api' && kind == :client
|
|
76
|
+
service = attrs['rpc.service']
|
|
77
|
+
return "aws.#{service || 'client'}.request"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
if kind == :client
|
|
81
|
+
return "#{attrs['rpc.system']}.client.request"
|
|
82
|
+
elsif kind == :server
|
|
83
|
+
return "#{attrs['rpc.system']}.server.request"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
if attrs.key?('faas.invoked_provider') && attrs.key?('faas.invoked_name') && kind == :client
|
|
88
|
+
provider = attrs['faas.invoked_provider']
|
|
89
|
+
name = attrs['faas.invoked_name']
|
|
90
|
+
return "#{provider}.#{name}.invoke"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
return "#{attrs['faas.trigger']}.invoke" if attrs.key?('faas.trigger') && kind == :server
|
|
94
|
+
|
|
95
|
+
return 'graphql.server.request' if attrs.key?('graphql.operation.type')
|
|
96
|
+
|
|
97
|
+
if kind == :server
|
|
98
|
+
protocol = attrs['network.protocol.name']
|
|
99
|
+
return protocol ? "#{protocol}.server.request" : 'server.request'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
if kind == :client
|
|
103
|
+
protocol = attrs['network.protocol.name']
|
|
104
|
+
return protocol ? "#{protocol}.client.request" : 'client.request'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
kind.to_s
|
|
108
|
+
end
|
|
109
|
+
# rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
def datadog_set_attribute(key)
|
|
114
|
+
# Return if attributes are currently disabled by OpenTelemetry.
|
|
115
|
+
return unless defined?(@attributes) && @attributes
|
|
116
|
+
return unless (span = datadog_span)
|
|
117
|
+
|
|
118
|
+
# DEV: Accesses `@attributes` directly, since using `#attributes`
|
|
119
|
+
# DEV: clones the hash, causing unnecessary overhead.
|
|
120
|
+
if @attributes.key?(key)
|
|
121
|
+
# Try to find a richer operation name, unless an explicit override was provided.
|
|
122
|
+
if !@attributes.key?('operation.name') && (rich_name = Span.enrich_name(kind, @attributes))
|
|
123
|
+
span.name = rich_name.downcase
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
Span.serialize_attribute(key, @attributes[key]).each do |new_key, value|
|
|
127
|
+
override_datadog_values(span, new_key, value)
|
|
128
|
+
|
|
129
|
+
# When an attribute is used to override a Datadog Span property,
|
|
130
|
+
# it should NOT be set as a Datadog Span tag.
|
|
131
|
+
span.set_tag(new_key, value) unless DATADOG_SPAN_ATTRIBUTE_OVERRIDES.include?(new_key)
|
|
132
|
+
end
|
|
133
|
+
else
|
|
134
|
+
span.clear_tag(key)
|
|
135
|
+
|
|
136
|
+
if key == 'service.name'
|
|
137
|
+
# By removing the service name, we set it to the fallback default,
|
|
138
|
+
# effectively removing the `service` attribute from OpenTelemetry's perspective.
|
|
139
|
+
span.service = Datadog.send(:components).tracer.default_service
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Some special attributes can override Datadog Span fields beyond tags and metrics.
|
|
145
|
+
# @return [Boolean] true if the key is a Datadog Span override attribute, false otherwise
|
|
146
|
+
def override_datadog_values(span, key, value)
|
|
147
|
+
span.name = value if key == 'operation.name'
|
|
148
|
+
span.resource = value if key == 'resource.name'
|
|
149
|
+
span.service = value if key == 'service.name'
|
|
150
|
+
span.type = value if key == 'span.type'
|
|
151
|
+
|
|
152
|
+
if key == 'analytics.event' && value.respond_to?(:casecmp)
|
|
153
|
+
Datadog::Tracing::Analytics.set_sample_rate(
|
|
154
|
+
span,
|
|
155
|
+
value.casecmp('true') == 0 ? 1 : 0
|
|
156
|
+
)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
DATADOG_SPAN_ATTRIBUTE_OVERRIDES = ['analytics.event', 'operation.name', 'resource.name', 'service.name',
|
|
161
|
+
'span.type'].freeze
|
|
162
|
+
|
|
163
|
+
::OpenTelemetry::SDK::Trace::Span.prepend(self)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../tracing/trace_digest'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module OpenTelemetry
|
|
7
|
+
# OpenTelemetry utilities related to the respective Datadog trace.
|
|
8
|
+
module Trace
|
|
9
|
+
class << self
|
|
10
|
+
# Creates a new TraceOperation object that can be attached to a new
|
|
11
|
+
# OpenTelemetry span.
|
|
12
|
+
# If `parent_span` is provided, then that span is set as the currently
|
|
13
|
+
# active parent span.
|
|
14
|
+
#
|
|
15
|
+
# @return [TraceOperation]
|
|
16
|
+
def start_trace_copy(trace, parent_span: nil)
|
|
17
|
+
digest = if parent_span
|
|
18
|
+
digest_with_parent_span(trace, parent_span)
|
|
19
|
+
else
|
|
20
|
+
trace.to_digest
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Create a new TraceOperation, attached to the current Datadog Tracer.
|
|
24
|
+
Datadog::Tracing.continue_trace!(digest)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
# Creates a TraceDigest with the active span modified.
|
|
30
|
+
# This supports the implementation of `OpenTelemetry::Trace.context_with_span`,
|
|
31
|
+
# which allows you to specific any span as the arbitrary parent of a new span.
|
|
32
|
+
def digest_with_parent_span(trace, parent_span)
|
|
33
|
+
digest = trace.to_digest
|
|
34
|
+
|
|
35
|
+
Tracing::TraceDigest.new(
|
|
36
|
+
span_id: parent_span.id,
|
|
37
|
+
span_name: parent_span.name,
|
|
38
|
+
span_resource: parent_span.resource,
|
|
39
|
+
span_service: parent_span.service,
|
|
40
|
+
span_type: parent_span.type,
|
|
41
|
+
trace_distributed_tags: digest.trace_distributed_tags,
|
|
42
|
+
trace_hostname: digest.trace_hostname,
|
|
43
|
+
trace_id: digest.trace_id,
|
|
44
|
+
trace_name: digest.trace_name,
|
|
45
|
+
trace_origin: digest.trace_origin,
|
|
46
|
+
trace_process_id: digest.trace_process_id,
|
|
47
|
+
trace_resource: digest.trace_resource,
|
|
48
|
+
trace_runtime_id: digest.trace_runtime_id,
|
|
49
|
+
trace_sampling_priority: digest.trace_sampling_priority,
|
|
50
|
+
trace_service: digest.trace_service,
|
|
51
|
+
trace_state: digest.trace_state,
|
|
52
|
+
trace_state_unknown_fields: digest.trace_state_unknown_fields,
|
|
53
|
+
).freeze
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -8,7 +8,10 @@
|
|
|
8
8
|
# This file activates the integrations of all OpenTelemetry
|
|
9
9
|
# components supported by Datadog.
|
|
10
10
|
|
|
11
|
+
# Load Tracing
|
|
11
12
|
require_relative 'tracing'
|
|
13
|
+
require_relative 'tracing/contrib'
|
|
14
|
+
|
|
12
15
|
require_relative 'opentelemetry/api/context'
|
|
13
16
|
|
|
14
17
|
# DEV: Should this be a Contrib integration, that depends on the `opentelemetry-sdk`
|
|
@@ -16,6 +19,7 @@ require_relative 'opentelemetry/api/context'
|
|
|
16
19
|
# DEV: This is different from our existing OpenTracer API, but there are many safety
|
|
17
20
|
# DEV: features built into Contrib instrumentation today.
|
|
18
21
|
require_relative 'opentelemetry/sdk/configurator' if defined?(OpenTelemetry::SDK)
|
|
22
|
+
require_relative 'opentelemetry/sdk/trace/span' if defined?(OpenTelemetry::SDK)
|
|
19
23
|
|
|
20
24
|
module Datadog
|
|
21
25
|
# Datadog OpenTelemetry integration.
|
|
@@ -33,7 +33,8 @@ module Datadog
|
|
|
33
33
|
carrier[Tracing::Distributed::Datadog::ORIGIN_KEY] = digest.trace_origin
|
|
34
34
|
carrier[Tracing::Distributed::Datadog::PARENT_ID_KEY] = digest.span_id
|
|
35
35
|
carrier[Tracing::Distributed::Datadog::SAMPLING_PRIORITY_KEY] = digest.trace_sampling_priority
|
|
36
|
-
carrier[Tracing::Distributed::Datadog::TRACE_ID_KEY] =
|
|
36
|
+
carrier[Tracing::Distributed::Datadog::TRACE_ID_KEY] =
|
|
37
|
+
Datadog::Tracing::Utils::TraceId.to_low_order(digest.trace_id)
|
|
37
38
|
|
|
38
39
|
nil
|
|
39
40
|
end
|
data/lib/datadog/opentracer.rb
CHANGED
|
@@ -22,3 +22,12 @@ require_relative 'opentracer/global_tracer'
|
|
|
22
22
|
|
|
23
23
|
# Modify the OpenTracing module functions
|
|
24
24
|
::OpenTracing.singleton_class.prepend(Datadog::OpenTracer::GlobalTracer)
|
|
25
|
+
|
|
26
|
+
module Datadog
|
|
27
|
+
# Datadog OpenTracing integration.
|
|
28
|
+
# DEV: This module should be named `Datadog::OpenTracing` to match the gem (`opentracing`).
|
|
29
|
+
module OpenTracer
|
|
30
|
+
# Used by Telemetry to decide if OpenTracing instrumentation is enabled
|
|
31
|
+
LOADED = true
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -97,14 +97,20 @@ module Datadog
|
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
# Represents metadata we have for a ruby gem
|
|
101
|
+
class Library
|
|
102
|
+
attr_reader :kind, :name, :version, :path
|
|
103
|
+
|
|
101
104
|
def initialize(kind:, name:, version:, path:)
|
|
102
|
-
|
|
105
|
+
@kind = kind.freeze
|
|
106
|
+
@name = name.dup.freeze
|
|
107
|
+
@version = version.to_s.dup.freeze
|
|
108
|
+
@path = path.dup.freeze
|
|
103
109
|
freeze
|
|
104
110
|
end
|
|
105
111
|
|
|
106
|
-
def to_json(
|
|
107
|
-
{ kind: kind, name: name, version: version, paths: [path] }.to_json(
|
|
112
|
+
def to_json(arg = nil)
|
|
113
|
+
{ kind: @kind, name: @name, version: @version, paths: [@path] }.to_json(arg)
|
|
108
114
|
end
|
|
109
115
|
end
|
|
110
116
|
end
|
|
@@ -14,23 +14,16 @@ module Datadog
|
|
|
14
14
|
public
|
|
15
15
|
|
|
16
16
|
def initialize(
|
|
17
|
-
recorder:,
|
|
18
|
-
max_frames:,
|
|
19
|
-
tracer:,
|
|
20
|
-
endpoint_collection_enabled:,
|
|
21
17
|
gc_profiling_enabled:,
|
|
22
|
-
allocation_counting_enabled:,
|
|
23
18
|
no_signals_workaround_enabled:,
|
|
24
|
-
thread_context_collector
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
tracer: tracer,
|
|
28
|
-
endpoint_collection_enabled: endpoint_collection_enabled,
|
|
29
|
-
),
|
|
30
|
-
idle_sampling_helper: IdleSamplingHelper.new,
|
|
19
|
+
thread_context_collector:,
|
|
20
|
+
dynamic_sampling_rate_overhead_target_percentage:,
|
|
21
|
+
allocation_profiling_enabled:,
|
|
31
22
|
# **NOTE**: This should only be used for testing; disabling the dynamic sampling rate will increase the
|
|
32
23
|
# profiler overhead!
|
|
33
|
-
dynamic_sampling_rate_enabled: true
|
|
24
|
+
dynamic_sampling_rate_enabled: true,
|
|
25
|
+
skip_idle_samples_for_testing: false,
|
|
26
|
+
idle_sampling_helper: IdleSamplingHelper.new
|
|
34
27
|
)
|
|
35
28
|
unless dynamic_sampling_rate_enabled
|
|
36
29
|
Datadog.logger.warn(
|
|
@@ -43,17 +36,21 @@ module Datadog
|
|
|
43
36
|
thread_context_collector,
|
|
44
37
|
gc_profiling_enabled,
|
|
45
38
|
idle_sampling_helper,
|
|
46
|
-
allocation_counting_enabled,
|
|
47
39
|
no_signals_workaround_enabled,
|
|
48
40
|
dynamic_sampling_rate_enabled,
|
|
41
|
+
dynamic_sampling_rate_overhead_target_percentage,
|
|
42
|
+
allocation_profiling_enabled,
|
|
43
|
+
skip_idle_samples_for_testing,
|
|
49
44
|
)
|
|
50
45
|
@worker_thread = nil
|
|
51
46
|
@failure_exception = nil
|
|
52
47
|
@start_stop_mutex = Mutex.new
|
|
53
48
|
@idle_sampling_helper = idle_sampling_helper
|
|
49
|
+
@wait_until_running_mutex = Mutex.new
|
|
50
|
+
@wait_until_running_condition = ConditionVariable.new
|
|
54
51
|
end
|
|
55
52
|
|
|
56
|
-
def start
|
|
53
|
+
def start(on_failure_proc: nil)
|
|
57
54
|
@start_stop_mutex.synchronize do
|
|
58
55
|
return if @worker_thread && @worker_thread.alive?
|
|
59
56
|
|
|
@@ -74,18 +71,17 @@ module Datadog
|
|
|
74
71
|
'CpuAndWallTimeWorker thread error. ' \
|
|
75
72
|
"Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
76
73
|
)
|
|
74
|
+
on_failure_proc&.call
|
|
77
75
|
end
|
|
78
76
|
end
|
|
77
|
+
@worker_thread.name = self.class.name # Repeated from above to make sure thread gets named asap
|
|
78
|
+
@worker_thread.thread_variable_set(:fork_safe, true)
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
true
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
# Can be removed once we remove OldStack.
|
|
86
|
-
def enabled=(_); end
|
|
87
|
-
|
|
88
|
-
def stop(*_)
|
|
84
|
+
def stop
|
|
89
85
|
@start_stop_mutex.synchronize do
|
|
90
86
|
Datadog.logger.debug('Requesting CpuAndWallTimeWorker thread shut down')
|
|
91
87
|
|
|
@@ -108,6 +104,33 @@ module Datadog
|
|
|
108
104
|
def stats
|
|
109
105
|
self.class._native_stats(self)
|
|
110
106
|
end
|
|
107
|
+
|
|
108
|
+
def stats_and_reset_not_thread_safe
|
|
109
|
+
stats = self.stats
|
|
110
|
+
self.class._native_stats_reset_not_thread_safe(self)
|
|
111
|
+
stats
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Useful for testing, to e.g. make sure the profiler is running before we start running some code we want to observe
|
|
115
|
+
def wait_until_running(timeout_seconds: 5)
|
|
116
|
+
@wait_until_running_mutex.synchronize do
|
|
117
|
+
return true if self.class._native_is_running?(self)
|
|
118
|
+
|
|
119
|
+
@wait_until_running_condition.wait(@wait_until_running_mutex, timeout_seconds)
|
|
120
|
+
|
|
121
|
+
if self.class._native_is_running?(self)
|
|
122
|
+
true
|
|
123
|
+
else
|
|
124
|
+
raise "Timeout waiting for #{self.class.name} to start (waited for #{timeout_seconds} seconds)"
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
private
|
|
130
|
+
|
|
131
|
+
def signal_running
|
|
132
|
+
@wait_until_running_mutex.synchronize { @wait_until_running_condition.broadcast }
|
|
133
|
+
end
|
|
111
134
|
end
|
|
112
135
|
end
|
|
113
136
|
end
|
|
@@ -42,12 +42,14 @@ module Datadog
|
|
|
42
42
|
)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
|
+
@worker_thread.name = self.class.name # Repeated from above to make sure thread gets named asap
|
|
46
|
+
@worker_thread.thread_variable_set(:fork_safe, true)
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
true
|
|
48
50
|
end
|
|
49
51
|
|
|
50
|
-
def stop
|
|
52
|
+
def stop
|
|
51
53
|
@start_stop_mutex.synchronize do
|
|
52
54
|
Datadog.logger.debug('Requesting IdleSamplingHelper thread shut down')
|
|
53
55
|
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
require 'time'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Profiling
|
|
8
|
+
module Collectors
|
|
9
|
+
# Collects information of relevance for profiler. This will get sent alongside
|
|
10
|
+
# the profile and show up in the UI or potentially influence processing in some way.
|
|
11
|
+
#
|
|
12
|
+
# Information is currently collected and frozen at construction time. A full collector
|
|
13
|
+
# could be seen as overkill for this case but it allows us to centralize information
|
|
14
|
+
# gathering and easily support more flexible/dynamic info collection in the future.
|
|
15
|
+
class Info
|
|
16
|
+
def initialize(settings)
|
|
17
|
+
@profiler_info = nil
|
|
18
|
+
@info = {
|
|
19
|
+
platform: collect_platform_info,
|
|
20
|
+
runtime: collect_runtime_info,
|
|
21
|
+
application: collect_application_info(settings),
|
|
22
|
+
profiler: collect_profiler_info(settings),
|
|
23
|
+
}.freeze
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
attr_reader :info
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
# Instead of trying to figure out real process start time by checking
|
|
31
|
+
# /proc or some other complex/non-portable way, approximate start time
|
|
32
|
+
# by time of requirement of this file.
|
|
33
|
+
START_TIME = Time.now.utc.freeze
|
|
34
|
+
|
|
35
|
+
def collect_platform_info
|
|
36
|
+
@platform_info ||= {
|
|
37
|
+
container_id: Datadog::Core::Environment::Container.container_id,
|
|
38
|
+
hostname: Datadog::Core::Environment::Platform.hostname,
|
|
39
|
+
kernel_name: Datadog::Core::Environment::Platform.kernel_name,
|
|
40
|
+
kernel_release: Datadog::Core::Environment::Platform.kernel_release,
|
|
41
|
+
kernel_version: Datadog::Core::Environment::Platform.kernel_version
|
|
42
|
+
}.freeze
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def collect_runtime_info
|
|
46
|
+
@runtime_info ||= {
|
|
47
|
+
engine: Datadog::Core::Environment::Identity.lang_engine,
|
|
48
|
+
version: Datadog::Core::Environment::Identity.lang_version,
|
|
49
|
+
platform: Datadog::Core::Environment::Identity.lang_platform,
|
|
50
|
+
}.freeze
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def collect_application_info(settings)
|
|
54
|
+
@application_info ||= {
|
|
55
|
+
start_time: START_TIME.iso8601,
|
|
56
|
+
env: settings.env,
|
|
57
|
+
service: settings.service,
|
|
58
|
+
version: settings.version,
|
|
59
|
+
}.freeze
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def collect_profiler_info(settings)
|
|
63
|
+
unless @profiler_info
|
|
64
|
+
lib_datadog_gem = ::Gem.loaded_specs['libdatadog']
|
|
65
|
+
@profiler_info = {
|
|
66
|
+
version: Datadog::Core::Environment::Identity.tracer_version,
|
|
67
|
+
libdatadog: "#{lib_datadog_gem.version}-#{lib_datadog_gem.platform}",
|
|
68
|
+
settings: collect_settings_recursively(settings.profiling),
|
|
69
|
+
}.freeze
|
|
70
|
+
end
|
|
71
|
+
@profiler_info
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# The settings/option model isn't directly serializable because
|
|
75
|
+
# of subsettings and options that link to full blown custom object
|
|
76
|
+
# instances without proper serialization.
|
|
77
|
+
# This method navigates a settings object recursively, converting
|
|
78
|
+
# it into more basic types that are trivially convertible to JSON.
|
|
79
|
+
def collect_settings_recursively(v)
|
|
80
|
+
v = v.options_hash if v.respond_to?(:options_hash)
|
|
81
|
+
|
|
82
|
+
if v.nil? || v.is_a?(Symbol) || v.is_a?(Numeric) || v.is_a?(String) || v.equal?(true) || v.equal?(false)
|
|
83
|
+
Core::Utils::SafeDup.frozen_or_dup(v)
|
|
84
|
+
elsif v.is_a?(Hash)
|
|
85
|
+
collected_hash = v.each_with_object({}) do |(key, value), hash|
|
|
86
|
+
collected_value = collect_settings_recursively(value)
|
|
87
|
+
hash[key] = collected_value
|
|
88
|
+
end
|
|
89
|
+
collected_hash.freeze
|
|
90
|
+
elsif v.is_a?(Enumerable)
|
|
91
|
+
collected_list = v
|
|
92
|
+
.map { |value| collect_settings_recursively(value) }
|
|
93
|
+
collected_list.freeze
|
|
94
|
+
else
|
|
95
|
+
v.inspect
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -14,9 +14,24 @@ module Datadog
|
|
|
14
14
|
#
|
|
15
15
|
# Methods prefixed with _native_ are implemented in `collectors_thread_context.c`
|
|
16
16
|
class ThreadContext
|
|
17
|
-
def initialize(
|
|
17
|
+
def initialize(
|
|
18
|
+
recorder:,
|
|
19
|
+
max_frames:,
|
|
20
|
+
tracer:,
|
|
21
|
+
endpoint_collection_enabled:,
|
|
22
|
+
timeline_enabled:,
|
|
23
|
+
allocation_type_enabled: true
|
|
24
|
+
)
|
|
18
25
|
tracer_context_key = safely_extract_context_key_from(tracer)
|
|
19
|
-
self.class._native_initialize(
|
|
26
|
+
self.class._native_initialize(
|
|
27
|
+
self,
|
|
28
|
+
recorder,
|
|
29
|
+
max_frames,
|
|
30
|
+
tracer_context_key,
|
|
31
|
+
endpoint_collection_enabled,
|
|
32
|
+
timeline_enabled,
|
|
33
|
+
allocation_type_enabled,
|
|
34
|
+
)
|
|
20
35
|
end
|
|
21
36
|
|
|
22
37
|
def inspect
|