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,280 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'base64'
|
|
5
|
+
|
|
6
|
+
require_relative '../config'
|
|
7
|
+
require_relative 'client'
|
|
8
|
+
require_relative '../../../transport/http/response'
|
|
9
|
+
require_relative '../../../transport/http/api/endpoint'
|
|
10
|
+
|
|
11
|
+
# TODO: Decouple standard transport/http/api/instance
|
|
12
|
+
#
|
|
13
|
+
# Separate classes are needed because transport/http/trace includes
|
|
14
|
+
# Trace::API::Instance which closes over and uses a single spec, which is
|
|
15
|
+
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
|
16
|
+
# need an independent toplevel path at the endpoint level.
|
|
17
|
+
#
|
|
18
|
+
# Separate classes are needed because of `include Trace::API::Instance`.
|
|
19
|
+
#
|
|
20
|
+
# Below should be:
|
|
21
|
+
# require_relative '../../../core/transport/http/api/instance'
|
|
22
|
+
require_relative 'api/instance'
|
|
23
|
+
# Below should be:
|
|
24
|
+
# require_relative '../../../core/transport/http/api/spec'
|
|
25
|
+
require_relative 'api/spec'
|
|
26
|
+
|
|
27
|
+
module Datadog
|
|
28
|
+
module Core
|
|
29
|
+
module Remote
|
|
30
|
+
module Transport
|
|
31
|
+
module HTTP
|
|
32
|
+
# HTTP transport behavior for remote configuration
|
|
33
|
+
module Config
|
|
34
|
+
# Response from HTTP transport for remote configuration
|
|
35
|
+
class Response
|
|
36
|
+
include Datadog::Core::Transport::HTTP::Response
|
|
37
|
+
include Core::Remote::Transport::Config::Response
|
|
38
|
+
|
|
39
|
+
def initialize(http_response, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
|
|
40
|
+
super(http_response)
|
|
41
|
+
|
|
42
|
+
begin
|
|
43
|
+
payload = JSON.parse(http_response.payload, symbolize_names: true)
|
|
44
|
+
rescue JSON::ParserError => e
|
|
45
|
+
raise ParseError.new(:roots, e)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
raise TypeError.new(Hash, payload) unless payload.is_a?(Hash)
|
|
49
|
+
|
|
50
|
+
@empty = true if payload.empty?
|
|
51
|
+
|
|
52
|
+
# TODO: these fallbacks should be improved
|
|
53
|
+
roots = payload[:roots] || []
|
|
54
|
+
targets = payload[:targets] || Base64.strict_encode64('{}')
|
|
55
|
+
target_files = payload[:target_files] || []
|
|
56
|
+
client_configs = payload[:client_configs] || []
|
|
57
|
+
|
|
58
|
+
raise TypeError.new(Array, roots) unless roots.is_a?(Array)
|
|
59
|
+
|
|
60
|
+
@roots = roots.map do |root|
|
|
61
|
+
raise TypeError.new(String, root) unless root.is_a?(String)
|
|
62
|
+
|
|
63
|
+
decoded = begin
|
|
64
|
+
Base64.strict_decode64(root) # TODO: unprocessed, don't symbolize_names
|
|
65
|
+
rescue ArgumentError
|
|
66
|
+
raise DecodeError.new(:roots, root)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
parsed = begin
|
|
70
|
+
JSON.parse(decoded)
|
|
71
|
+
rescue JSON::ParserError
|
|
72
|
+
raise ParseError.new(:roots, decoded)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# TODO: perform more processing to validate content. til then, no freeze
|
|
76
|
+
|
|
77
|
+
parsed
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
raise TypeError.new(String, targets) unless targets.is_a?(String)
|
|
81
|
+
|
|
82
|
+
@targets = begin
|
|
83
|
+
decoded = begin
|
|
84
|
+
Base64.strict_decode64(targets)
|
|
85
|
+
rescue ArgumentError
|
|
86
|
+
raise DecodeError.new(:targets, targets)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
parsed = begin
|
|
90
|
+
JSON.parse(decoded) # TODO: unprocessed, don't symbolize_names
|
|
91
|
+
rescue JSON::ParserError
|
|
92
|
+
raise ParseError.new(:targets, decoded)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# TODO: perform more processing to validate content. til then, no freeze
|
|
96
|
+
|
|
97
|
+
parsed
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
raise TypeError.new(Array, target_files) unless target_files.is_a?(Array)
|
|
101
|
+
|
|
102
|
+
@target_files = target_files.map do |h|
|
|
103
|
+
raise TypeError.new(Hash, h) unless h.is_a?(Hash)
|
|
104
|
+
raise KeyError.new(:raw) unless h.key?(:raw) # rubocop:disable Style/RaiseArgs
|
|
105
|
+
raise KeyError.new(:path) unless h.key?(:path) # rubocop:disable Style/RaiseArgs
|
|
106
|
+
|
|
107
|
+
raw = h[:raw]
|
|
108
|
+
|
|
109
|
+
raise TypeError.new(String, raw) unless raw.is_a?(String)
|
|
110
|
+
|
|
111
|
+
content = begin
|
|
112
|
+
Base64.strict_decode64(raw)
|
|
113
|
+
rescue ArgumentError
|
|
114
|
+
raise DecodeError.new(:target_files, raw)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
{
|
|
118
|
+
path: h[:path].freeze,
|
|
119
|
+
content: StringIO.new(content.freeze),
|
|
120
|
+
}
|
|
121
|
+
end.freeze
|
|
122
|
+
|
|
123
|
+
@client_configs = client_configs.map do |s|
|
|
124
|
+
raise TypeError.new(String, s) unless s.is_a?(String)
|
|
125
|
+
|
|
126
|
+
s.freeze
|
|
127
|
+
end.freeze
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def inspect
|
|
131
|
+
"#{super}, #{
|
|
132
|
+
{
|
|
133
|
+
roots: @roots,
|
|
134
|
+
targets: @targets,
|
|
135
|
+
target_files: @target_files,
|
|
136
|
+
client_configs: @client_configs,
|
|
137
|
+
}}"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# When an expected key is missing
|
|
141
|
+
class KeyError < StandardError
|
|
142
|
+
def initialize(key)
|
|
143
|
+
message = "key not found: #{key.inspect}"
|
|
144
|
+
|
|
145
|
+
super(message)
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# When an expected value type is incorrect
|
|
150
|
+
class TypeError < StandardError
|
|
151
|
+
def initialize(type, value)
|
|
152
|
+
message = "not a #{type}: #{value.inspect}"
|
|
153
|
+
|
|
154
|
+
super(message)
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# When value decoding fails
|
|
159
|
+
class DecodeError < StandardError
|
|
160
|
+
def initialize(key, value)
|
|
161
|
+
message = "could not decode key #{key.inspect}: #{value.inspect}"
|
|
162
|
+
|
|
163
|
+
super(message)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# When value parsing fails
|
|
168
|
+
class ParseError < StandardError
|
|
169
|
+
def initialize(key, value)
|
|
170
|
+
message = "could not parse key #{key.inspect}: #{value.inspect}"
|
|
171
|
+
|
|
172
|
+
super(message)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# Extensions for HTTP client
|
|
178
|
+
module Client
|
|
179
|
+
def send_config_payload(request)
|
|
180
|
+
send_request(request) do |api, env|
|
|
181
|
+
api.send_config(env)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
module API
|
|
187
|
+
# Extensions for HTTP API Spec
|
|
188
|
+
module Spec
|
|
189
|
+
attr_reader :config
|
|
190
|
+
|
|
191
|
+
def config=(endpoint)
|
|
192
|
+
@config = endpoint
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def send_config(env, &block)
|
|
196
|
+
raise NoConfigEndpointDefinedError, self if config.nil?
|
|
197
|
+
|
|
198
|
+
config.call(env, &block)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Raised when traces sent but no traces endpoint is defined
|
|
202
|
+
class NoConfigEndpointDefinedError < StandardError
|
|
203
|
+
attr_reader :spec
|
|
204
|
+
|
|
205
|
+
def initialize(spec)
|
|
206
|
+
super()
|
|
207
|
+
|
|
208
|
+
@spec = spec
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def message
|
|
212
|
+
'No config endpoint is defined for API specification!'
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Extensions for HTTP API Instance
|
|
218
|
+
module Instance
|
|
219
|
+
def send_config(env)
|
|
220
|
+
raise ConfigNotSupportedError, spec unless spec.is_a?(Config::API::Spec)
|
|
221
|
+
|
|
222
|
+
spec.send_config(env) do |request_env|
|
|
223
|
+
call(request_env)
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# Raised when traces sent to API that does not support traces
|
|
228
|
+
class ConfigNotSupportedError < StandardError
|
|
229
|
+
attr_reader :spec
|
|
230
|
+
|
|
231
|
+
def initialize(spec)
|
|
232
|
+
super()
|
|
233
|
+
|
|
234
|
+
@spec = spec
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def message
|
|
238
|
+
'Config not supported for this API!'
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Endpoint for remote configuration
|
|
244
|
+
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
245
|
+
HEADER_CONTENT_TYPE = 'Content-Type'
|
|
246
|
+
|
|
247
|
+
attr_reader :encoder
|
|
248
|
+
|
|
249
|
+
def initialize(path, encoder)
|
|
250
|
+
super(:post, path)
|
|
251
|
+
@encoder = encoder
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def call(env, &block)
|
|
255
|
+
# Encode body & type
|
|
256
|
+
env.headers[HEADER_CONTENT_TYPE] = encoder.content_type
|
|
257
|
+
env.body = env.request.parcel.data
|
|
258
|
+
|
|
259
|
+
# Query for response
|
|
260
|
+
http_response = super(env, &block)
|
|
261
|
+
|
|
262
|
+
response_options = {}
|
|
263
|
+
|
|
264
|
+
# Build and return a response
|
|
265
|
+
Config::Response.new(http_response, response_options)
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Add remote configuration behavior to transport components
|
|
271
|
+
###### overrides send_payload! which calls send_<endpoint>! kills any other possible endpoint!
|
|
272
|
+
HTTP::Client.include(Config::Client)
|
|
273
|
+
HTTP::API::Spec.include(Config::API::Spec)
|
|
274
|
+
HTTP::API::Instance.include(Config::API::Instance)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
require_relative '../negotiation'
|
|
6
|
+
require_relative 'client'
|
|
7
|
+
require_relative '../../../transport/http/response'
|
|
8
|
+
require_relative '../../../transport/http/api/endpoint'
|
|
9
|
+
|
|
10
|
+
# TODO: Decouple standard transport/http/api/instance
|
|
11
|
+
#
|
|
12
|
+
# Separate classes are needed because transport/http/trace includes
|
|
13
|
+
# Trace::API::Instance which closes over and uses a single spec, which is
|
|
14
|
+
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
|
15
|
+
# need an independent toplevel path at the endpoint level.
|
|
16
|
+
#
|
|
17
|
+
# Separate classes are needed because of `include Trace::API::Instance`.
|
|
18
|
+
#
|
|
19
|
+
# Below should be:
|
|
20
|
+
# require_relative '../../../../ddtrace/transport/http/api/instance'
|
|
21
|
+
require_relative 'api/instance'
|
|
22
|
+
# Below should be:
|
|
23
|
+
# require_relative '../../../../ddtrace/transport/http/api/spec'
|
|
24
|
+
require_relative 'api/spec'
|
|
25
|
+
|
|
26
|
+
module Datadog
|
|
27
|
+
module Core
|
|
28
|
+
module Remote
|
|
29
|
+
module Transport
|
|
30
|
+
module HTTP
|
|
31
|
+
# HTTP transport behavior for agent feature negotiation
|
|
32
|
+
module Negotiation
|
|
33
|
+
# Response from HTTP transport for agent feature negotiation
|
|
34
|
+
class Response
|
|
35
|
+
include Datadog::Core::Transport::HTTP::Response
|
|
36
|
+
include Core::Remote::Transport::Negotiation::Response
|
|
37
|
+
|
|
38
|
+
def initialize(http_response, options = {})
|
|
39
|
+
super(http_response)
|
|
40
|
+
|
|
41
|
+
# TODO: transform endpoint hash in a better object for negotiation
|
|
42
|
+
# TODO: transform config in a better object, notably config has max_request_bytes
|
|
43
|
+
@version = options[:version]
|
|
44
|
+
@endpoints = options[:endpoints]
|
|
45
|
+
@config = options[:config]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Extensions for HTTP client
|
|
50
|
+
module Client
|
|
51
|
+
def send_info_payload(request)
|
|
52
|
+
send_request(request) do |api, env|
|
|
53
|
+
api.send_info(env)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
module API
|
|
59
|
+
# Extensions for HTTP API Spec
|
|
60
|
+
module Spec
|
|
61
|
+
attr_reader :info
|
|
62
|
+
|
|
63
|
+
def info=(endpoint)
|
|
64
|
+
@info = endpoint
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def send_info(env, &block)
|
|
68
|
+
raise NoNegotiationEndpointDefinedError, self if info.nil?
|
|
69
|
+
|
|
70
|
+
info.call(env, &block)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Raised when traces sent but no traces endpoint is defined
|
|
74
|
+
class NoNegotiationEndpointDefinedError < StandardError
|
|
75
|
+
attr_reader :spec
|
|
76
|
+
|
|
77
|
+
def initialize(spec)
|
|
78
|
+
super()
|
|
79
|
+
|
|
80
|
+
@spec = spec
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def message
|
|
84
|
+
'No info endpoint is defined for API specification!'
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Extensions for HTTP API Instance
|
|
90
|
+
module Instance
|
|
91
|
+
def send_info(env)
|
|
92
|
+
raise NegotiationNotSupportedError, spec unless spec.is_a?(Negotiation::API::Spec)
|
|
93
|
+
|
|
94
|
+
spec.send_info(env) do |request_env|
|
|
95
|
+
call(request_env)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Raised when traces sent to API that does not support traces
|
|
100
|
+
class NegotiationNotSupportedError < StandardError
|
|
101
|
+
attr_reader :spec
|
|
102
|
+
|
|
103
|
+
def initialize(spec)
|
|
104
|
+
super()
|
|
105
|
+
|
|
106
|
+
@spec = spec
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def message
|
|
110
|
+
'Info not supported for this API!'
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Endpoint for negotiation
|
|
116
|
+
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
117
|
+
def initialize(path)
|
|
118
|
+
super(:get, path)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def call(env, &block)
|
|
122
|
+
# Query for response
|
|
123
|
+
http_response = super(env, &block)
|
|
124
|
+
|
|
125
|
+
# Process the response
|
|
126
|
+
body = JSON.parse(http_response.payload, symbolize_names: true) if http_response.ok?
|
|
127
|
+
|
|
128
|
+
# TODO: there should be more processing here to ensure a proper response_options
|
|
129
|
+
response_options = body.is_a?(Hash) ? body : {}
|
|
130
|
+
|
|
131
|
+
# Build and return a trace response
|
|
132
|
+
Negotiation::Response.new(http_response, response_options)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Add negotiation behavior to transport components
|
|
138
|
+
HTTP::Client.include(Negotiation::Client)
|
|
139
|
+
HTTP::API::Spec.include(Negotiation::API::Spec)
|
|
140
|
+
HTTP::API::Instance.include(Negotiation::API::Instance)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'uri'
|
|
4
|
+
|
|
5
|
+
require_relative '../../environment/container'
|
|
6
|
+
require_relative '../../environment/ext'
|
|
7
|
+
require_relative '../../transport/ext'
|
|
8
|
+
require_relative '../../transport/http/adapters/net'
|
|
9
|
+
require_relative '../../transport/http/adapters/unix_socket'
|
|
10
|
+
require_relative '../../transport/http/adapters/test'
|
|
11
|
+
|
|
12
|
+
# TODO: Improve negotiation to allow per endpoint selection
|
|
13
|
+
#
|
|
14
|
+
# Since endpoint negotiation happens at the `API::Spec` level there can not be
|
|
15
|
+
# a mix of endpoints at various versions or versionless without describing all
|
|
16
|
+
# the possible combinations as specs. See http/api.
|
|
17
|
+
#
|
|
18
|
+
# Below should be:
|
|
19
|
+
# require_relative '../../transport/http/api'
|
|
20
|
+
require_relative 'http/api'
|
|
21
|
+
|
|
22
|
+
# TODO: Decouple transport/http/builder
|
|
23
|
+
#
|
|
24
|
+
# See http/builder
|
|
25
|
+
#
|
|
26
|
+
# Below should be:
|
|
27
|
+
# require_relative '../../transport/http/builder'
|
|
28
|
+
require_relative 'http/builder'
|
|
29
|
+
|
|
30
|
+
# TODO: Decouple transport/http
|
|
31
|
+
#
|
|
32
|
+
# Because a new transport is required for every (API, Client, Transport)
|
|
33
|
+
# triplet and endpoints cannot be negotiated independently, there can not be a
|
|
34
|
+
# single `default` transport, but only endpoint-specific ones.
|
|
35
|
+
|
|
36
|
+
module Datadog
|
|
37
|
+
module Core
|
|
38
|
+
module Remote
|
|
39
|
+
module Transport
|
|
40
|
+
# Namespace for HTTP transport components
|
|
41
|
+
module HTTP
|
|
42
|
+
# NOTE: Due to... legacy reasons... This class likes having a default `AgentSettings` instance to fall back to.
|
|
43
|
+
# Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
|
|
44
|
+
# represents only settings specified via environment variables + the usual defaults.
|
|
45
|
+
#
|
|
46
|
+
# DO NOT USE THIS IN NEW CODE, as it ignores any settings specified by users via `Datadog.configure`.
|
|
47
|
+
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS = Datadog::Core::Configuration::AgentSettingsResolver.call(
|
|
48
|
+
Datadog::Core::Configuration::Settings.new,
|
|
49
|
+
logger: nil,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
module_function
|
|
53
|
+
|
|
54
|
+
# Builds a new Transport::HTTP::Client
|
|
55
|
+
def new(klass, &block)
|
|
56
|
+
Builder.new(&block).to_transport(klass)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Builds a new Transport::HTTP::Client with default settings
|
|
60
|
+
# Pass a block to override any settings.
|
|
61
|
+
def root(
|
|
62
|
+
agent_settings: DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS,
|
|
63
|
+
**options
|
|
64
|
+
)
|
|
65
|
+
new(Core::Remote::Transport::Negotiation::Transport) do |transport|
|
|
66
|
+
transport.adapter(agent_settings)
|
|
67
|
+
transport.headers(default_headers)
|
|
68
|
+
|
|
69
|
+
apis = API.defaults
|
|
70
|
+
|
|
71
|
+
transport.api API::ROOT, apis[API::ROOT]
|
|
72
|
+
|
|
73
|
+
# Apply any settings given by options
|
|
74
|
+
unless options.empty?
|
|
75
|
+
transport.default_api = options[:api_version] if options.key?(:api_version)
|
|
76
|
+
transport.headers options[:headers] if options.key?(:headers)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if agent_settings.deprecated_for_removal_transport_configuration_proc
|
|
80
|
+
agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Call block to apply any customization, if provided
|
|
84
|
+
yield(transport) if block_given?
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Builds a new Transport::HTTP::Client with default settings
|
|
89
|
+
# Pass a block to override any settings.
|
|
90
|
+
def v7(
|
|
91
|
+
agent_settings: DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS,
|
|
92
|
+
**options
|
|
93
|
+
)
|
|
94
|
+
new(Core::Remote::Transport::Config::Transport) do |transport|
|
|
95
|
+
transport.adapter(agent_settings)
|
|
96
|
+
transport.headers default_headers
|
|
97
|
+
|
|
98
|
+
apis = API.defaults
|
|
99
|
+
|
|
100
|
+
transport.api API::V7, apis[API::V7]
|
|
101
|
+
|
|
102
|
+
# Apply any settings given by options
|
|
103
|
+
unless options.empty?
|
|
104
|
+
transport.default_api = options[:api_version] if options.key?(:api_version)
|
|
105
|
+
transport.headers options[:headers] if options.key?(:headers)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
if agent_settings.deprecated_for_removal_transport_configuration_proc
|
|
109
|
+
agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Call block to apply any customization, if provided
|
|
113
|
+
yield(transport) if block_given?
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def default_headers
|
|
118
|
+
{
|
|
119
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
|
120
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
|
121
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION =>
|
|
122
|
+
Datadog::Core::Environment::Ext::LANG_VERSION,
|
|
123
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
|
124
|
+
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
|
125
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
|
126
|
+
Datadog::Core::Environment::Ext::TRACER_VERSION
|
|
127
|
+
}.tap do |headers|
|
|
128
|
+
# Add container ID, if present.
|
|
129
|
+
container_id = Datadog::Core::Environment::Container.container_id
|
|
130
|
+
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def default_adapter
|
|
135
|
+
Datadog::Core::Transport::Ext::HTTP::ADAPTER
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def default_hostname(logger: Datadog.logger)
|
|
139
|
+
logger.warn(
|
|
140
|
+
'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
|
|
141
|
+
'be removed on a future ddtrace release.'
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS.hostname
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def default_port(logger: Datadog.logger)
|
|
148
|
+
logger.warn(
|
|
149
|
+
'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
|
|
150
|
+
'be removed on a future ddtrace release.'
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
DO_NOT_USE_ENVIRONMENT_AGENT_SETTINGS.port
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def default_url(logger: Datadog.logger)
|
|
157
|
+
logger.warn(
|
|
158
|
+
'Deprecated for removal: Using #default_url for configuration is deprecated and will ' \
|
|
159
|
+
'be removed on a future ddtrace release.'
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
nil
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Add adapters to registry
|
|
166
|
+
Builder::REGISTRY.set(Datadog::Core::Transport::HTTP::Adapters::Net, Datadog::Core::Transport::Ext::HTTP::ADAPTER)
|
|
167
|
+
Builder::REGISTRY.set(
|
|
168
|
+
Datadog::Core::Transport::HTTP::Adapters::Test,
|
|
169
|
+
Datadog::Core::Transport::Ext::Test::ADAPTER
|
|
170
|
+
)
|
|
171
|
+
Builder::REGISTRY.set(
|
|
172
|
+
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
|
173
|
+
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
|
174
|
+
)
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../../../
|
|
3
|
+
require_relative '../../../core/transport/request'
|
|
4
4
|
|
|
5
5
|
# TODO: Resolve conceptual conundrum
|
|
6
6
|
#
|
|
@@ -23,35 +23,37 @@ require_relative '../../../ddtrace/transport/request'
|
|
|
23
23
|
|
|
24
24
|
module Datadog
|
|
25
25
|
module Core
|
|
26
|
-
module
|
|
27
|
-
module
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
module Remote
|
|
27
|
+
module Transport
|
|
28
|
+
module Negotiation
|
|
29
|
+
# Negotiation request
|
|
30
|
+
class Request < Datadog::Core::Transport::Request
|
|
31
|
+
end
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
# Negotiation response
|
|
34
|
+
module Response
|
|
35
|
+
attr_reader :version, :endpoints, :config
|
|
36
|
+
end
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
# Negotiation transport
|
|
39
|
+
class Transport
|
|
40
|
+
attr_reader :client, :apis, :default_api, :current_api_id
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
def initialize(apis, default_api)
|
|
43
|
+
@apis = apis
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
@client = HTTP::Client.new(current_api)
|
|
46
|
+
end
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
def send_info
|
|
49
|
+
request = Request.new
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
@client.send_info_payload(request)
|
|
52
|
+
end
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
def current_api
|
|
55
|
+
@apis[HTTP::API::ROOT]
|
|
56
|
+
end
|
|
55
57
|
end
|
|
56
58
|
end
|
|
57
59
|
end
|