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,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../core/encoding'
|
|
4
|
+
|
|
5
|
+
require_relative '../../../core/transport/http/api/map'
|
|
6
|
+
require_relative 'api/spec'
|
|
7
|
+
|
|
8
|
+
require_relative 'traces'
|
|
9
|
+
|
|
10
|
+
module Datadog
|
|
11
|
+
module Tracing
|
|
12
|
+
module Transport
|
|
13
|
+
module HTTP
|
|
14
|
+
# Namespace for API components
|
|
15
|
+
module API
|
|
16
|
+
# Default API versions
|
|
17
|
+
V4 = 'v0.4'
|
|
18
|
+
V3 = 'v0.3'
|
|
19
|
+
|
|
20
|
+
module_function
|
|
21
|
+
|
|
22
|
+
def defaults
|
|
23
|
+
Datadog::Core::Transport::HTTP::API::Map[
|
|
24
|
+
V4 => Spec.new do |s|
|
|
25
|
+
s.traces = Traces::API::Endpoint.new(
|
|
26
|
+
'/v0.4/traces',
|
|
27
|
+
Core::Encoding::MsgpackEncoder,
|
|
28
|
+
service_rates: true
|
|
29
|
+
)
|
|
30
|
+
end,
|
|
31
|
+
V3 => Spec.new do |s|
|
|
32
|
+
s.traces = Traces::API::Endpoint.new(
|
|
33
|
+
'/v0.3/traces',
|
|
34
|
+
Core::Encoding::MsgpackEncoder
|
|
35
|
+
)
|
|
36
|
+
end,
|
|
37
|
+
].with_fallbacks(V4 => V3)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -1,50 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
4
|
-
require_relative '
|
|
5
|
-
require_relative '
|
|
6
|
-
|
|
7
|
-
# TODO: Decouple standard transport/http/api/instance
|
|
8
|
-
#
|
|
9
|
-
# Separate classes are needed because transport/http/trace includes
|
|
10
|
-
# Trace::API::Instance which closes over and uses a single spec, which is
|
|
11
|
-
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
|
12
|
-
# need an independent toplevel path at the endpoint level.
|
|
13
|
-
#
|
|
14
|
-
# Separate classes are needed because of `include Trace::API::Instance`.
|
|
15
|
-
#
|
|
16
|
-
# Below should be:
|
|
17
|
-
# require_relative '../../../../ddtrace/transport/http/api/instance'
|
|
3
|
+
require_relative '../../../core/configuration/agent_settings_resolver'
|
|
4
|
+
require_relative '../../../core/transport/http/adapters/registry'
|
|
5
|
+
require_relative '../../../core/transport/http/api/map'
|
|
18
6
|
require_relative 'api/instance'
|
|
19
|
-
|
|
20
|
-
# TODO: Decouple transport/http/client
|
|
21
|
-
#
|
|
22
|
-
# The standard one does `include Transport::HTTP::Statistics` and performs
|
|
23
|
-
# stats updates, which may or may not be desirable in general.
|
|
24
|
-
#
|
|
25
|
-
# Below should be:
|
|
26
|
-
# require_relative '../../../../ddtrace/transport/http/client'
|
|
27
7
|
require_relative 'client'
|
|
28
8
|
|
|
29
|
-
# TODO: Decouple transport/http/builder
|
|
30
|
-
#
|
|
31
|
-
# This class is duplicated even though it is tantalisingly close to the
|
|
32
|
-
# one in ddtrace/transport mostly because it refers to a different
|
|
33
|
-
# `API::Instance` in `#api_instance_class` but also because it operates on a
|
|
34
|
-
# different `HTTP::Client`, as well as de-hardcoding the transport class
|
|
35
|
-
# `Transport::Traces::Transport` in `#to_transport`
|
|
36
|
-
#
|
|
37
|
-
# Additionally, its design makes it so there can be only one (API, Client,
|
|
38
|
-
# Transport) triplet, requiring a new transport instance for any varying
|
|
39
|
-
# element of the triplet.
|
|
40
|
-
|
|
41
9
|
module Datadog
|
|
42
|
-
module
|
|
10
|
+
module Tracing
|
|
43
11
|
module Transport
|
|
44
12
|
module HTTP
|
|
45
13
|
# Builds new instances of Transport::HTTP::Client
|
|
46
14
|
class Builder
|
|
47
|
-
REGISTRY = Datadog::Transport::HTTP::Adapters::Registry.new
|
|
15
|
+
REGISTRY = Datadog::Core::Transport::HTTP::Adapters::Registry.new
|
|
48
16
|
|
|
49
17
|
attr_reader \
|
|
50
18
|
:apis,
|
|
@@ -59,7 +27,7 @@ module Datadog
|
|
|
59
27
|
@default_headers = {}
|
|
60
28
|
|
|
61
29
|
# Client settings
|
|
62
|
-
@apis = Datadog::Transport::HTTP::API::Map.new
|
|
30
|
+
@apis = Datadog::Core::Transport::HTTP::API::Map.new
|
|
63
31
|
@default_api = nil
|
|
64
32
|
|
|
65
33
|
# API settings
|
|
@@ -114,16 +82,17 @@ module Datadog
|
|
|
114
82
|
@default_api = key
|
|
115
83
|
end
|
|
116
84
|
|
|
117
|
-
def to_transport
|
|
85
|
+
def to_transport
|
|
118
86
|
raise NoDefaultApiError if @default_api.nil?
|
|
119
87
|
|
|
120
|
-
|
|
88
|
+
# DEV: Should not be specific to traces
|
|
89
|
+
Transport::Traces::Transport.new(to_api_instances, @default_api)
|
|
121
90
|
end
|
|
122
91
|
|
|
123
92
|
def to_api_instances
|
|
124
93
|
raise NoApisError if @apis.empty?
|
|
125
94
|
|
|
126
|
-
@apis.inject(Datadog::Transport::HTTP::API::Map.new) do |instances, (key, spec)|
|
|
95
|
+
@apis.inject(Datadog::Core::Transport::HTTP::API::Map.new) do |instances, (key, spec)|
|
|
127
96
|
instances.tap do
|
|
128
97
|
api_options = @api_options[key].dup
|
|
129
98
|
|
|
@@ -154,46 +123,22 @@ module Datadog
|
|
|
154
123
|
|
|
155
124
|
# Raised when the API key does not match known APIs.
|
|
156
125
|
class UnknownApiError < StandardError
|
|
157
|
-
attr_reader :key
|
|
158
|
-
|
|
159
126
|
def initialize(key)
|
|
160
|
-
super()
|
|
161
|
-
|
|
162
|
-
@key = key
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def message
|
|
166
|
-
"Unknown transport API '#{key}'!"
|
|
127
|
+
super("Unknown transport API '#{key}'!")
|
|
167
128
|
end
|
|
168
129
|
end
|
|
169
130
|
|
|
170
131
|
# Raised when the identifier cannot be matched to an adapter.
|
|
171
132
|
class UnknownAdapterError < StandardError
|
|
172
|
-
attr_reader :type
|
|
173
|
-
|
|
174
133
|
def initialize(type)
|
|
175
|
-
super()
|
|
176
|
-
|
|
177
|
-
@type = type
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def message
|
|
181
|
-
"Unknown transport adapter '#{type}'!"
|
|
134
|
+
super("Unknown transport adapter '#{type}'!")
|
|
182
135
|
end
|
|
183
136
|
end
|
|
184
137
|
|
|
185
138
|
# Raised when an adapter cannot be resolved for an API instance.
|
|
186
139
|
class NoAdapterForApiError < StandardError
|
|
187
|
-
attr_reader :key
|
|
188
|
-
|
|
189
140
|
def initialize(key)
|
|
190
|
-
super()
|
|
191
|
-
|
|
192
|
-
@key = key
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def message
|
|
196
|
-
"No adapter resolved for transport API '#{key}'!"
|
|
141
|
+
super("No adapter resolved for transport API '#{key}'!")
|
|
197
142
|
end
|
|
198
143
|
end
|
|
199
144
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'statistics'
|
|
4
|
+
require_relative '../../../core/transport/http/env'
|
|
5
|
+
require_relative '../../../core/transport/http/response'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Tracing
|
|
9
|
+
module Transport
|
|
10
|
+
module HTTP
|
|
11
|
+
# Routes, encodes, and sends tracer data to the trace agent via HTTP.
|
|
12
|
+
class Client
|
|
13
|
+
include Datadog::Tracing::Transport::HTTP::Statistics
|
|
14
|
+
|
|
15
|
+
attr_reader :api
|
|
16
|
+
|
|
17
|
+
def initialize(api)
|
|
18
|
+
@api = api
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def send_request(request, &block)
|
|
22
|
+
# Build request into env
|
|
23
|
+
env = build_env(request)
|
|
24
|
+
|
|
25
|
+
# Get responses from API
|
|
26
|
+
response = yield(api, env)
|
|
27
|
+
|
|
28
|
+
# Update statistics
|
|
29
|
+
update_stats_from_response!(response)
|
|
30
|
+
|
|
31
|
+
response
|
|
32
|
+
rescue StandardError => e
|
|
33
|
+
message =
|
|
34
|
+
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
|
35
|
+
"Location: #{Array(e.backtrace).first}"
|
|
36
|
+
|
|
37
|
+
# Log error
|
|
38
|
+
if stats.consecutive_errors > 0
|
|
39
|
+
Datadog.logger.debug(message)
|
|
40
|
+
else
|
|
41
|
+
Datadog.logger.error(message)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Update statistics
|
|
45
|
+
update_stats_from_exception!(e)
|
|
46
|
+
|
|
47
|
+
Datadog::Core::Transport::InternalErrorResponse.new(e)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def build_env(request)
|
|
51
|
+
Datadog::Core::Transport::HTTP::Env.new(request)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../statistics'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Transport
|
|
8
|
+
module HTTP
|
|
9
|
+
# Tracks statistics for HTTP transports
|
|
10
|
+
module Statistics
|
|
11
|
+
def self.included(base)
|
|
12
|
+
base.include(Datadog::Tracing::Transport::Statistics)
|
|
13
|
+
base.include(InstanceMethods)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Instance methods for HTTP statistics
|
|
17
|
+
module InstanceMethods
|
|
18
|
+
# Decorate metrics for HTTP responses
|
|
19
|
+
def metrics_for_response(response)
|
|
20
|
+
super.tap do |metrics|
|
|
21
|
+
# Add status code tag to api.responses metric
|
|
22
|
+
if metrics.key?(:api_responses)
|
|
23
|
+
(metrics[:api_responses].options[:tags] ||= []).tap do |tags|
|
|
24
|
+
tags << metrics_tag_value(response.code)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# The most common status code on a healthy tracer
|
|
33
|
+
STATUS_CODE_200 = 'status_code:200'
|
|
34
|
+
|
|
35
|
+
def metrics_tag_value(status_code)
|
|
36
|
+
if status_code == 200
|
|
37
|
+
STATUS_CODE_200 # DEV Saves string concatenation/creation for common case
|
|
38
|
+
else
|
|
39
|
+
"status_code:#{status_code}"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
require_relative '../traces'
|
|
6
|
+
require_relative 'client'
|
|
7
|
+
require_relative '../../../core/transport/http/response'
|
|
8
|
+
require_relative '../../../core/transport/http/api/endpoint'
|
|
9
|
+
require_relative 'api/instance'
|
|
10
|
+
|
|
11
|
+
module Datadog
|
|
12
|
+
module Tracing
|
|
13
|
+
module Transport
|
|
14
|
+
module HTTP
|
|
15
|
+
# HTTP transport behavior for traces
|
|
16
|
+
module Traces
|
|
17
|
+
# Response from HTTP transport for traces
|
|
18
|
+
class Response
|
|
19
|
+
include Datadog::Core::Transport::HTTP::Response
|
|
20
|
+
include Datadog::Tracing::Transport::Traces::Response
|
|
21
|
+
|
|
22
|
+
def initialize(http_response, options = {})
|
|
23
|
+
super(http_response)
|
|
24
|
+
@service_rates = options.fetch(:service_rates, nil)
|
|
25
|
+
@trace_count = options.fetch(:trace_count, 0)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Extensions for HTTP client
|
|
30
|
+
module Client
|
|
31
|
+
def send_traces_payload(request)
|
|
32
|
+
send_request(request) do |api, env|
|
|
33
|
+
api.send_traces(env)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
module API
|
|
39
|
+
# Extensions for HTTP API Spec
|
|
40
|
+
module Spec
|
|
41
|
+
attr_reader :traces
|
|
42
|
+
|
|
43
|
+
def traces=(endpoint)
|
|
44
|
+
@traces = endpoint
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def send_traces(env, &block)
|
|
48
|
+
raise NoTraceEndpointDefinedError, self if traces.nil?
|
|
49
|
+
|
|
50
|
+
traces.call(env, &block)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def encoder
|
|
54
|
+
traces.encoder
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Raised when traces sent but no traces endpoint is defined
|
|
58
|
+
class NoTraceEndpointDefinedError < StandardError
|
|
59
|
+
attr_reader :spec
|
|
60
|
+
|
|
61
|
+
def initialize(spec)
|
|
62
|
+
super
|
|
63
|
+
|
|
64
|
+
@spec = spec
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def message
|
|
68
|
+
'No trace endpoint is defined for API specification!'
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Extensions for HTTP API Instance
|
|
74
|
+
module Instance
|
|
75
|
+
def send_traces(env)
|
|
76
|
+
raise TracesNotSupportedError, spec unless spec.is_a?(Traces::API::Spec)
|
|
77
|
+
|
|
78
|
+
spec.send_traces(env) do |request_env|
|
|
79
|
+
call(request_env)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Raised when traces sent to API that does not support traces
|
|
84
|
+
class TracesNotSupportedError < StandardError
|
|
85
|
+
attr_reader :spec
|
|
86
|
+
|
|
87
|
+
def initialize(spec)
|
|
88
|
+
super
|
|
89
|
+
|
|
90
|
+
@spec = spec
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def message
|
|
94
|
+
'Traces not supported for this API!'
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Endpoint for submitting trace data
|
|
100
|
+
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
101
|
+
HEADER_CONTENT_TYPE = 'Content-Type'
|
|
102
|
+
HEADER_TRACE_COUNT = 'X-Datadog-Trace-Count'
|
|
103
|
+
SERVICE_RATE_KEY = 'rate_by_service'
|
|
104
|
+
|
|
105
|
+
attr_reader \
|
|
106
|
+
:encoder
|
|
107
|
+
|
|
108
|
+
def initialize(path, encoder, options = {})
|
|
109
|
+
super(:post, path)
|
|
110
|
+
@encoder = encoder
|
|
111
|
+
@service_rates = options.fetch(:service_rates, false)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def service_rates?
|
|
115
|
+
@service_rates == true
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def call(env, &block)
|
|
119
|
+
# Add trace count header
|
|
120
|
+
env.headers[HEADER_TRACE_COUNT] = env.request.parcel.trace_count.to_s
|
|
121
|
+
|
|
122
|
+
# Encode body & type
|
|
123
|
+
env.headers[HEADER_CONTENT_TYPE] = encoder.content_type
|
|
124
|
+
env.body = env.request.parcel.data
|
|
125
|
+
|
|
126
|
+
# Query for response
|
|
127
|
+
http_response = super(env, &block)
|
|
128
|
+
|
|
129
|
+
# Process the response
|
|
130
|
+
response_options = { trace_count: env.request.parcel.trace_count }.tap do |options|
|
|
131
|
+
# Parse service rates, if configured to do so.
|
|
132
|
+
if service_rates? && !http_response.payload.to_s.empty?
|
|
133
|
+
body = JSON.parse(http_response.payload)
|
|
134
|
+
options[:service_rates] = body[SERVICE_RATE_KEY] if body.is_a?(Hash) && body.key?(SERVICE_RATE_KEY)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Build and return a trace response
|
|
139
|
+
Traces::Response.new(http_response, response_options)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Add traces behavior to transport components
|
|
145
|
+
HTTP::Client.include(Traces::Client)
|
|
146
|
+
HTTP::API::Spec.include(Traces::API::Spec)
|
|
147
|
+
HTTP::API::Instance.include(Traces::API::Instance)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
require_relative '../../core/environment/container'
|
|
6
|
+
require_relative '../../core/environment/ext'
|
|
7
|
+
require_relative '../../core/transport/ext'
|
|
8
|
+
require_relative '../../core/transport/http/adapters/net'
|
|
9
|
+
require_relative '../../core/transport/http/adapters/test'
|
|
10
|
+
require_relative '../../core/transport/http/adapters/unix_socket'
|
|
11
|
+
require_relative 'http/api'
|
|
12
|
+
require_relative 'http/builder'
|
|
13
|
+
require_relative '../../../ddtrace/version'
|
|
14
|
+
|
|
15
|
+
module Datadog
|
|
16
|
+
module Tracing
|
|
17
|
+
module Transport
|
|
18
|
+
# Namespace for HTTP transport components
|
|
19
|
+
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
|
+
module_function
|
|
31
|
+
|
|
32
|
+
# Builds a new Transport::HTTP::Client
|
|
33
|
+
def new(&block)
|
|
34
|
+
Builder.new(&block).to_transport
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Builds a new Transport::HTTP::Client with default settings
|
|
38
|
+
# Pass a block to override any settings.
|
|
39
|
+
def default(
|
|
40
|
+
agent_settings: DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS,
|
|
41
|
+
**options
|
|
42
|
+
)
|
|
43
|
+
new do |transport|
|
|
44
|
+
transport.adapter(agent_settings)
|
|
45
|
+
transport.headers default_headers
|
|
46
|
+
|
|
47
|
+
apis = API.defaults
|
|
48
|
+
|
|
49
|
+
transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
|
|
50
|
+
transport.api API::V3, apis[API::V3]
|
|
51
|
+
|
|
52
|
+
# Apply any settings given by options
|
|
53
|
+
unless options.empty?
|
|
54
|
+
transport.default_api = options[:api_version] if options.key?(:api_version)
|
|
55
|
+
transport.headers options[:headers] if options.key?(:headers)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if agent_settings.deprecated_for_removal_transport_configuration_proc
|
|
59
|
+
agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Call block to apply any customization, if provided
|
|
63
|
+
yield(transport) if block_given?
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def default_headers
|
|
68
|
+
{
|
|
69
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
|
70
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
|
71
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
|
72
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
|
73
|
+
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
|
74
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
|
75
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
|
76
|
+
Datadog::Core::Environment::Ext::TRACER_VERSION
|
|
77
|
+
}.tap do |headers|
|
|
78
|
+
# Add container ID, if present.
|
|
79
|
+
container_id = Datadog::Core::Environment::Container.container_id
|
|
80
|
+
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def default_adapter
|
|
85
|
+
Datadog::Core::Transport::Ext::HTTP::ADAPTER
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def default_hostname(logger: Datadog.logger)
|
|
89
|
+
logger.warn(
|
|
90
|
+
'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
|
|
91
|
+
'be removed on a future ddtrace release.'
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS.hostname
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def default_port(logger: Datadog.logger)
|
|
98
|
+
logger.warn(
|
|
99
|
+
'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
|
|
100
|
+
'be removed on a future ddtrace release.'
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS.port
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def default_url(logger: Datadog.logger)
|
|
107
|
+
logger.warn(
|
|
108
|
+
'Deprecated for removal: Using #default_url for configuration is deprecated and will ' \
|
|
109
|
+
'be removed on a future ddtrace release.'
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
nil
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Add adapters to registry
|
|
116
|
+
Builder::REGISTRY.set(Datadog::Core::Transport::HTTP::Adapters::Net, Datadog::Core::Transport::Ext::HTTP::ADAPTER)
|
|
117
|
+
Builder::REGISTRY.set(Datadog::Core::Transport::HTTP::Adapters::Test, Datadog::Core::Transport::Ext::Test::ADAPTER)
|
|
118
|
+
Builder::REGISTRY.set(
|
|
119
|
+
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
|
120
|
+
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
|
121
|
+
)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../statistics'
|
|
4
|
+
require_relative 'response'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Tracing
|
|
8
|
+
module Transport
|
|
9
|
+
module IO
|
|
10
|
+
# Encodes and writes tracer data to IO
|
|
11
|
+
class Client
|
|
12
|
+
include Transport::Statistics
|
|
13
|
+
|
|
14
|
+
attr_reader \
|
|
15
|
+
:encoder,
|
|
16
|
+
:out
|
|
17
|
+
|
|
18
|
+
def initialize(out, encoder, options = {})
|
|
19
|
+
@out = out
|
|
20
|
+
@encoder = encoder
|
|
21
|
+
|
|
22
|
+
@request_block = options.fetch(:request, method(:send_default_request))
|
|
23
|
+
@encode_block = options.fetch(:encode, method(:encode_data))
|
|
24
|
+
@write_block = options.fetch(:write, method(:write_data))
|
|
25
|
+
@response_block = options.fetch(:response, method(:build_response))
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def send_request(request)
|
|
29
|
+
# Write data to IO
|
|
30
|
+
# If block is given, allow it to handle writing
|
|
31
|
+
# Otherwise do a standard encode/write/response.
|
|
32
|
+
response = if block_given?
|
|
33
|
+
yield(out, request)
|
|
34
|
+
else
|
|
35
|
+
@request_block.call(out, request)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Update statistics
|
|
39
|
+
update_stats_from_response!(response)
|
|
40
|
+
|
|
41
|
+
# Return response
|
|
42
|
+
response
|
|
43
|
+
rescue StandardError => e
|
|
44
|
+
message =
|
|
45
|
+
"Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
|
|
46
|
+
"Location: #{Array(e.backtrace).first}"
|
|
47
|
+
|
|
48
|
+
# Log error
|
|
49
|
+
if stats.consecutive_errors > 0
|
|
50
|
+
Datadog.logger.debug(message)
|
|
51
|
+
else
|
|
52
|
+
Datadog.logger.error(message)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Update statistics
|
|
56
|
+
update_stats_from_exception!(e)
|
|
57
|
+
|
|
58
|
+
InternalErrorResponse.new(e)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def encode_data(encoder, request)
|
|
62
|
+
request.parcel.encode_with(encoder)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def write_data(out, data)
|
|
66
|
+
out.puts(data)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def build_response(_request, _data, result)
|
|
70
|
+
IO::Response.new(result)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def send_default_request(out, request)
|
|
76
|
+
# Encode data
|
|
77
|
+
data = @encode_block.call(encoder, request)
|
|
78
|
+
|
|
79
|
+
# Write to IO
|
|
80
|
+
result = @write_block.call(out, data)
|
|
81
|
+
|
|
82
|
+
# Generate a response
|
|
83
|
+
@response_block.call(request, data, result)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../core/transport/response'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Transport
|
|
8
|
+
module IO
|
|
9
|
+
# Response from HTTP transport for traces
|
|
10
|
+
class Response
|
|
11
|
+
include Datadog::Core::Transport::Response
|
|
12
|
+
|
|
13
|
+
attr_reader \
|
|
14
|
+
:result
|
|
15
|
+
|
|
16
|
+
def initialize(result)
|
|
17
|
+
@result = result
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def ok?
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|