ddtrace 1.12.1 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +388 -10
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +3 -5
- data/ext/ddtrace_profiling_native_extension/clock_id.h +0 -3
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +3 -22
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +0 -1
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +41 -6
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +76 -24
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +1 -1
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +292 -27
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +1 -1
- data/ext/ddtrace_profiling_native_extension/extconf.rb +40 -10
- data/ext/ddtrace_profiling_native_extension/http_transport.c +48 -16
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.c +42 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +6 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +1 -1
- data/ext/ddtrace_profiling_native_extension/pid_controller.c +57 -0
- data/ext/ddtrace_profiling_native_extension/pid_controller.h +45 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +136 -32
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +12 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +1 -2
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +81 -50
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +13 -3
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +40 -4
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +14 -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 +49 -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 +36 -17
- 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/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 +15 -3
- data/lib/datadog/core/configuration/ext.rb +28 -5
- data/lib/datadog/core/configuration/option.rb +269 -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 +182 -102
- data/lib/datadog/core/configuration.rb +4 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +130 -234
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +13 -11
- 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 +26 -22
- 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 +6 -1
- data/lib/datadog/core/remote/client.rb +3 -0
- data/lib/datadog/core/remote/component.rb +27 -36
- 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 +1 -1
- data/lib/datadog/core/remote/negotiation.rb +19 -6
- 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 +4 -1
- 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 +12 -2
- data/lib/datadog/core/telemetry/collector.rb +13 -4
- data/lib/datadog/core/telemetry/emitter.rb +4 -2
- data/lib/datadog/core/telemetry/event.rb +19 -4
- data/lib/datadog/core/telemetry/ext.rb +4 -1
- data/lib/datadog/core/telemetry/heartbeat.rb +2 -4
- data/lib/datadog/core/telemetry/http/ext.rb +10 -8
- data/lib/datadog/core/telemetry/http/transport.rb +2 -0
- data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
- data/lib/datadog/core/telemetry/v2/request.rb +29 -0
- data/lib/datadog/core/transport/ext.rb +47 -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.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 +2 -1
- 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 +1 -0
- data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
- data/lib/datadog/opentracer.rb +9 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +16 -17
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +69 -94
- data/lib/datadog/profiling/diagnostics/environment_logger.rb +39 -0
- data/lib/datadog/profiling/exporter.rb +5 -1
- data/lib/datadog/profiling/ext.rb +0 -12
- data/lib/datadog/profiling/flush.rb +7 -5
- data/lib/datadog/profiling/http_transport.rb +19 -6
- data/lib/datadog/profiling/load_native_extension.rb +7 -1
- data/lib/datadog/profiling/native_extension.rb +0 -21
- data/lib/datadog/profiling/profiler.rb +36 -13
- data/lib/datadog/profiling/scheduler.rb +16 -9
- data/lib/datadog/profiling.rb +16 -78
- 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 -32
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +134 -98
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/action_view/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/active_job/ext.rb +25 -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 +9 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +12 -10
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +18 -11
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
- data/lib/datadog/tracing/contrib/active_record/ext.rb +17 -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 +9 -7
- data/lib/datadog/tracing/contrib/active_support/ext.rb +18 -16
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/aws/ext.rb +37 -24
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
- 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 +8 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +20 -7
- data/lib/datadog/tracing/contrib/dalli/ext.rb +26 -11
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +13 -7
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +21 -15
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
- data/lib/datadog/tracing/contrib/ethon/ext.rb +19 -11
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +19 -10
- data/lib/datadog/tracing/contrib/excon/ext.rb +16 -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 +32 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +20 -10
- data/lib/datadog/tracing/contrib/faraday/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +21 -5
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/grape/ext.rb +16 -14
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +8 -6
- data/lib/datadog/tracing/contrib/graphql/ext.rb +7 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +39 -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 +16 -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 +33 -11
- data/lib/datadog/tracing/contrib/http/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +17 -9
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +33 -11
- data/lib/datadog/tracing/contrib/httprb/ext.rb +16 -9
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/kafka/ext.rb +42 -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 +14 -7
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +20 -16
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -14
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +15 -10
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -6
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +52 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +37 -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 +22 -14
- data/lib/datadog/tracing/contrib/pg/ext.rb +22 -19
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +38 -5
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +14 -7
- data/lib/datadog/tracing/contrib/presto/ext.rb +25 -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 +12 -8
- data/lib/datadog/tracing/contrib/qless/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +21 -12
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +9 -7
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +16 -12
- data/lib/datadog/tracing/contrib/rack/ext.rb +18 -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 +8 -49
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +19 -15
- data/lib/datadog/tracing/contrib/rails/ext.rb +7 -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 +13 -10
- data/lib/datadog/tracing/contrib/rake/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/redis/ext.rb +22 -15
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +3 -38
- 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 +13 -7
- data/lib/datadog/tracing/contrib/resque/ext.rb +9 -7
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +15 -8
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +9 -6
- 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 +9 -6
- data/lib/datadog/tracing/contrib/sequel/ext.rb +10 -8
- data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +18 -11
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +32 -30
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +11 -9
- data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +21 -19
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +14 -8
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -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 +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +15 -13
- 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 +1 -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/rule_sampler.rb +29 -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 +16 -3
- 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 +124 -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 +209 -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/ddtrace/transport/ext.rb +22 -14
- data/lib/ddtrace/version.rb +9 -12
- data/lib/ddtrace.rb +1 -1
- metadata +101 -93
- 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/cucumber/patcher.rb +0 -27
- 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/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
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Environment
|
|
6
|
+
# Reports YJIT primitive runtime statistics.
|
|
7
|
+
module YJIT
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
# Inline code size
|
|
11
|
+
def inline_code_size
|
|
12
|
+
::RubyVM::YJIT.runtime_stats[:inline_code_size]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Outlined code size
|
|
16
|
+
def outlined_code_size
|
|
17
|
+
::RubyVM::YJIT.runtime_stats[:outlined_code_size]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# GCed pages
|
|
21
|
+
def freed_page_count
|
|
22
|
+
::RubyVM::YJIT.runtime_stats[:freed_page_count]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# GCed code size
|
|
26
|
+
def freed_code_size
|
|
27
|
+
::RubyVM::YJIT.runtime_stats[:freed_code_size]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Live pages
|
|
31
|
+
def live_page_count
|
|
32
|
+
::RubyVM::YJIT.runtime_stats[:live_page_count]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Code GC count
|
|
36
|
+
def code_gc_count
|
|
37
|
+
::RubyVM::YJIT.runtime_stats[:code_gc_count]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Size of memory region allocated for JIT code
|
|
41
|
+
def code_region_size
|
|
42
|
+
::RubyVM::YJIT.runtime_stats[:code_region_size]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Total number of object shapes
|
|
46
|
+
def object_shape_count
|
|
47
|
+
::RubyVM::YJIT.runtime_stats[:object_shape_count]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def available?
|
|
51
|
+
defined?(::RubyVM::YJIT) \
|
|
52
|
+
&& ::RubyVM::YJIT.enabled? \
|
|
53
|
+
&& ::RubyVM::YJIT.respond_to?(:runtime_stats)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
data/lib/datadog/core/error.rb
CHANGED
data/lib/datadog/core/git/ext.rb
CHANGED
|
@@ -1,32 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Core
|
|
3
5
|
module Git
|
|
4
6
|
# Defines constants for Git tags
|
|
5
7
|
module Ext
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
GIT_SHA_LENGTH = 40
|
|
9
|
+
|
|
10
|
+
TAG_BRANCH = 'git.branch'
|
|
11
|
+
TAG_REPOSITORY_URL = 'git.repository_url'
|
|
12
|
+
TAG_TAG = 'git.tag'
|
|
9
13
|
|
|
10
|
-
TAG_COMMIT_AUTHOR_DATE = 'git.commit.author.date'
|
|
11
|
-
TAG_COMMIT_AUTHOR_EMAIL = 'git.commit.author.email'
|
|
12
|
-
TAG_COMMIT_AUTHOR_NAME = 'git.commit.author.name'
|
|
13
|
-
TAG_COMMIT_COMMITTER_DATE = 'git.commit.committer.date'
|
|
14
|
-
TAG_COMMIT_COMMITTER_EMAIL = 'git.commit.committer.email'
|
|
15
|
-
TAG_COMMIT_COMMITTER_NAME = 'git.commit.committer.name'
|
|
16
|
-
TAG_COMMIT_MESSAGE = 'git.commit.message'
|
|
17
|
-
TAG_COMMIT_SHA = 'git.commit.sha'
|
|
14
|
+
TAG_COMMIT_AUTHOR_DATE = 'git.commit.author.date'
|
|
15
|
+
TAG_COMMIT_AUTHOR_EMAIL = 'git.commit.author.email'
|
|
16
|
+
TAG_COMMIT_AUTHOR_NAME = 'git.commit.author.name'
|
|
17
|
+
TAG_COMMIT_COMMITTER_DATE = 'git.commit.committer.date'
|
|
18
|
+
TAG_COMMIT_COMMITTER_EMAIL = 'git.commit.committer.email'
|
|
19
|
+
TAG_COMMIT_COMMITTER_NAME = 'git.commit.committer.name'
|
|
20
|
+
TAG_COMMIT_MESSAGE = 'git.commit.message'
|
|
21
|
+
TAG_COMMIT_SHA = 'git.commit.sha'
|
|
18
22
|
|
|
19
|
-
ENV_REPOSITORY_URL = 'DD_GIT_REPOSITORY_URL'
|
|
20
|
-
ENV_COMMIT_SHA = 'DD_GIT_COMMIT_SHA'
|
|
21
|
-
ENV_BRANCH = 'DD_GIT_BRANCH'
|
|
22
|
-
ENV_TAG = 'DD_GIT_TAG'
|
|
23
|
-
ENV_COMMIT_MESSAGE = 'DD_GIT_COMMIT_MESSAGE'
|
|
24
|
-
ENV_COMMIT_AUTHOR_NAME = 'DD_GIT_COMMIT_AUTHOR_NAME'
|
|
25
|
-
ENV_COMMIT_AUTHOR_EMAIL = 'DD_GIT_COMMIT_AUTHOR_EMAIL'
|
|
26
|
-
ENV_COMMIT_AUTHOR_DATE = 'DD_GIT_COMMIT_AUTHOR_DATE'
|
|
27
|
-
ENV_COMMIT_COMMITTER_NAME = 'DD_GIT_COMMIT_COMMITTER_NAME'
|
|
28
|
-
ENV_COMMIT_COMMITTER_EMAIL = 'DD_GIT_COMMIT_COMMITTER_EMAIL'
|
|
29
|
-
ENV_COMMIT_COMMITTER_DATE = 'DD_GIT_COMMIT_COMMITTER_DATE'
|
|
23
|
+
ENV_REPOSITORY_URL = 'DD_GIT_REPOSITORY_URL'
|
|
24
|
+
ENV_COMMIT_SHA = 'DD_GIT_COMMIT_SHA'
|
|
25
|
+
ENV_BRANCH = 'DD_GIT_BRANCH'
|
|
26
|
+
ENV_TAG = 'DD_GIT_TAG'
|
|
27
|
+
ENV_COMMIT_MESSAGE = 'DD_GIT_COMMIT_MESSAGE'
|
|
28
|
+
ENV_COMMIT_AUTHOR_NAME = 'DD_GIT_COMMIT_AUTHOR_NAME'
|
|
29
|
+
ENV_COMMIT_AUTHOR_EMAIL = 'DD_GIT_COMMIT_AUTHOR_EMAIL'
|
|
30
|
+
ENV_COMMIT_AUTHOR_DATE = 'DD_GIT_COMMIT_AUTHOR_DATE'
|
|
31
|
+
ENV_COMMIT_COMMITTER_NAME = 'DD_GIT_COMMIT_COMMITTER_NAME'
|
|
32
|
+
ENV_COMMIT_COMMITTER_EMAIL = 'DD_GIT_COMMIT_COMMITTER_EMAIL'
|
|
33
|
+
ENV_COMMIT_COMMITTER_DATE = 'DD_GIT_COMMIT_COMMITTER_DATE'
|
|
30
34
|
end
|
|
31
35
|
end
|
|
32
36
|
end
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Core
|
|
3
5
|
module Logging
|
|
4
6
|
module Ext
|
|
5
7
|
# The technology from which the log originated.
|
|
6
8
|
# @see https://docs.datadoghq.com/api/latest/logs/#send-logs
|
|
7
|
-
DD_SOURCE = 'ruby'
|
|
9
|
+
DD_SOURCE = 'ruby'
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
end
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Core
|
|
3
5
|
module Metrics
|
|
4
6
|
# @public_api
|
|
5
7
|
module Ext
|
|
6
|
-
DEFAULT_HOST = '127.0.0.1'
|
|
8
|
+
DEFAULT_HOST = '127.0.0.1'
|
|
7
9
|
DEFAULT_PORT = 8125
|
|
8
10
|
|
|
9
|
-
TAG_LANG = 'language'
|
|
10
|
-
TAG_LANG_INTERPRETER = 'language-interpreter'
|
|
11
|
-
TAG_LANG_VERSION = 'language-version'
|
|
12
|
-
TAG_TRACER_VERSION = 'tracer-version'
|
|
11
|
+
TAG_LANG = 'language'
|
|
12
|
+
TAG_LANG_INTERPRETER = 'language-interpreter'
|
|
13
|
+
TAG_LANG_VERSION = 'language-version'
|
|
14
|
+
TAG_TRACER_VERSION = 'tracer-version'
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
end
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative '../../../appsec/remote'
|
|
4
|
+
require_relative '../../../tracing/remote'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Core
|
|
7
8
|
module Remote
|
|
8
9
|
class Client
|
|
9
|
-
#
|
|
10
|
+
# Capabilities
|
|
10
11
|
class Capabilities
|
|
11
12
|
attr_reader :products, :capabilities, :receivers, :base64_capabilities
|
|
12
13
|
|
|
@@ -28,6 +29,10 @@ module Datadog
|
|
|
28
29
|
register_products(Datadog::AppSec::Remote.products)
|
|
29
30
|
register_receivers(Datadog::AppSec::Remote.receivers)
|
|
30
31
|
end
|
|
32
|
+
|
|
33
|
+
register_capabilities(Datadog::Tracing::Remote.capabilities)
|
|
34
|
+
register_products(Datadog::Tracing::Remote.products)
|
|
35
|
+
register_receivers(Datadog::Tracing::Remote.receivers)
|
|
31
36
|
end
|
|
32
37
|
|
|
33
38
|
def register_capabilities(capabilities)
|
|
@@ -10,6 +10,7 @@ module Datadog
|
|
|
10
10
|
module Remote
|
|
11
11
|
# Client communicates with the agent and sync remote configuration
|
|
12
12
|
class Client
|
|
13
|
+
class TransportError < StandardError; end
|
|
13
14
|
class SyncError < StandardError; end
|
|
14
15
|
|
|
15
16
|
attr_reader :transport, :repository, :id, :dispatcher
|
|
@@ -107,6 +108,8 @@ module Datadog
|
|
|
107
108
|
else
|
|
108
109
|
dispatcher.dispatch(changes, repository)
|
|
109
110
|
end
|
|
111
|
+
elsif response.internal_error?
|
|
112
|
+
raise TransportError, response.to_s
|
|
110
113
|
end
|
|
111
114
|
end
|
|
112
115
|
# rubocop:enable Metrics/AbcSize,Metrics/PerceivedComplexity,Metrics/MethodLength,Metrics/CyclomaticComplexity
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
require_relative 'worker'
|
|
4
4
|
require_relative 'client/capabilities'
|
|
5
5
|
require_relative 'client'
|
|
6
|
-
require_relative '
|
|
6
|
+
require_relative 'transport/http'
|
|
7
7
|
require_relative '../remote'
|
|
8
8
|
require_relative 'negotiation'
|
|
9
9
|
|
|
@@ -22,7 +22,7 @@ module Datadog
|
|
|
22
22
|
transport_options[:agent_settings] = agent_settings if agent_settings
|
|
23
23
|
|
|
24
24
|
negotiation = Negotiation.new(settings, agent_settings)
|
|
25
|
-
transport_v7 = Datadog::Core::Transport::HTTP.v7(**transport_options.dup)
|
|
25
|
+
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options.dup)
|
|
26
26
|
|
|
27
27
|
@barrier = Barrier.new(BARRIER_TIMEOUT)
|
|
28
28
|
|
|
@@ -45,6 +45,11 @@ module Datadog
|
|
|
45
45
|
"remote worker client sync error: #{e.message} location: #{Array(e.backtrace).first}. skipping sync"
|
|
46
46
|
end
|
|
47
47
|
rescue StandardError => e
|
|
48
|
+
# In case of unexpected errors, reset the negotiation object
|
|
49
|
+
# given external conditions have changed and the negotiation
|
|
50
|
+
# negotiation object stores error logging state that should be reset.
|
|
51
|
+
negotiation = Negotiation.new(settings, agent_settings)
|
|
52
|
+
|
|
48
53
|
Datadog.logger.error do
|
|
49
54
|
"remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. "\
|
|
50
55
|
'reseting client state'
|
|
@@ -62,13 +67,22 @@ module Datadog
|
|
|
62
67
|
end
|
|
63
68
|
end
|
|
64
69
|
|
|
65
|
-
|
|
70
|
+
# Starts the Remote Configuration worker without waiting for first run
|
|
71
|
+
def start
|
|
66
72
|
@worker.start
|
|
73
|
+
end
|
|
67
74
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
75
|
+
# Is the Remote Configuration worker running?
|
|
76
|
+
def started?
|
|
77
|
+
@worker.started?
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# If the worker is not initialized, initialize it.
|
|
81
|
+
#
|
|
82
|
+
# Then, waits for one client sync to be executed if `kind` is `:once`.
|
|
83
|
+
def barrier(_kind)
|
|
84
|
+
start
|
|
85
|
+
@barrier.wait_once
|
|
72
86
|
end
|
|
73
87
|
|
|
74
88
|
def shutdown!
|
|
@@ -105,18 +119,6 @@ module Datadog
|
|
|
105
119
|
end
|
|
106
120
|
end
|
|
107
121
|
|
|
108
|
-
# Wait for next lift to happen
|
|
109
|
-
def wait_next(timeout = nil)
|
|
110
|
-
@mutex.lock
|
|
111
|
-
|
|
112
|
-
timeout ||= @timeout
|
|
113
|
-
|
|
114
|
-
# rbs/core has a bug, timeout type is incorrectly ?Integer
|
|
115
|
-
@condition.wait(@mutex, _ = timeout)
|
|
116
|
-
ensure
|
|
117
|
-
@mutex.unlock
|
|
118
|
-
end
|
|
119
|
-
|
|
120
122
|
# Release all current waiters
|
|
121
123
|
def lift
|
|
122
124
|
@mutex.lock
|
|
@@ -130,26 +132,15 @@ module Datadog
|
|
|
130
132
|
end
|
|
131
133
|
|
|
132
134
|
class << self
|
|
135
|
+
# Because the agent might not be available yet, we can't perform agent-specific checks yet, as they
|
|
136
|
+
# would prevent remote configuration from ever running.
|
|
137
|
+
#
|
|
138
|
+
# Those checks are instead performed inside the worker loop.
|
|
139
|
+
# This allows users to upgrade their agent while keeping their application running.
|
|
133
140
|
def build(settings, agent_settings)
|
|
134
141
|
return unless settings.remote.enabled
|
|
135
142
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return if capabilities.products.empty?
|
|
139
|
-
|
|
140
|
-
negotiation = Negotiation.new(settings, agent_settings)
|
|
141
|
-
|
|
142
|
-
unless negotiation.endpoint?('/v0.7/config')
|
|
143
|
-
Datadog.logger.error do
|
|
144
|
-
'endpoint unavailable: disabling remote configuration for this process.'
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
return
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
Datadog.logger.debug { 'agent reachable and reports remote configuration endpoint' }
|
|
151
|
-
|
|
152
|
-
new(settings, capabilities, agent_settings)
|
|
143
|
+
new(settings, Client::Capabilities.new(settings), agent_settings)
|
|
153
144
|
end
|
|
154
145
|
end
|
|
155
146
|
end
|
|
@@ -18,12 +18,14 @@ module Datadog
|
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
attr_reader :path, :data, :hashes
|
|
21
|
+
attr_reader :path, :data, :hashes, :apply_state, :apply_error
|
|
22
22
|
attr_accessor :version
|
|
23
23
|
|
|
24
24
|
def initialize(path:, data:)
|
|
25
25
|
@path = path
|
|
26
26
|
@data = data
|
|
27
|
+
@apply_state = ApplyState::UNACKNOWLEDGED
|
|
28
|
+
@apply_error = nil
|
|
27
29
|
@hashes = {}
|
|
28
30
|
@version = 0
|
|
29
31
|
end
|
|
@@ -36,6 +38,31 @@ module Datadog
|
|
|
36
38
|
@length ||= @data.size
|
|
37
39
|
end
|
|
38
40
|
|
|
41
|
+
# Sets this configuration as successfully applied.
|
|
42
|
+
def applied
|
|
43
|
+
@apply_state = ApplyState::ACKNOWLEDGED
|
|
44
|
+
@apply_error = nil
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Sets this configuration as not successfully applied, with
|
|
48
|
+
# a message describing the error.
|
|
49
|
+
def errored(error_message)
|
|
50
|
+
@apply_state = ApplyState::ERROR
|
|
51
|
+
@apply_error = error_message
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
module ApplyState
|
|
55
|
+
# Default state of configurations.
|
|
56
|
+
# Set until the component consuming the configuration has acknowledged it was applied.
|
|
57
|
+
UNACKNOWLEDGED = 1
|
|
58
|
+
|
|
59
|
+
# Set when the configuration has been successfully applied.
|
|
60
|
+
ACKNOWLEDGED = 2
|
|
61
|
+
|
|
62
|
+
# Set when the configuration has been unsuccessfully applied.
|
|
63
|
+
ERROR = 3
|
|
64
|
+
end
|
|
65
|
+
|
|
39
66
|
private
|
|
40
67
|
|
|
41
68
|
def compute_and_store_hash(type)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
3
|
+
require_relative 'transport/http'
|
|
4
4
|
|
|
5
5
|
module Datadog
|
|
6
6
|
module Core
|
|
@@ -11,32 +11,45 @@ module Datadog
|
|
|
11
11
|
transport_options = {}
|
|
12
12
|
transport_options[:agent_settings] = agent_settings if agent_settings
|
|
13
13
|
|
|
14
|
-
@transport_root = Datadog::Core::Transport::HTTP.root(**transport_options.dup)
|
|
14
|
+
@transport_root = Datadog::Core::Remote::Transport::HTTP.root(**transport_options.dup)
|
|
15
|
+
@logged = {}
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def endpoint?(path)
|
|
18
19
|
res = @transport_root.send_info
|
|
19
20
|
|
|
20
21
|
if res.internal_error? && network_error?(res.error)
|
|
21
|
-
|
|
22
|
+
unless @logged[:agent_unreachable]
|
|
23
|
+
Datadog.logger.error { "agent unreachable: cannot negotiate #{path}" }
|
|
24
|
+
@logged[:agent_unreachable] = true
|
|
25
|
+
end
|
|
22
26
|
|
|
23
27
|
return false
|
|
24
28
|
end
|
|
25
29
|
|
|
26
30
|
if res.not_found?
|
|
27
|
-
|
|
31
|
+
unless @logged[:no_info_endpoint]
|
|
32
|
+
Datadog.logger.error { "agent reachable but has no /info endpoint: cannot negotiate #{path}" }
|
|
33
|
+
@logged[:no_info_endpoint] = true
|
|
34
|
+
end
|
|
28
35
|
|
|
29
36
|
return false
|
|
30
37
|
end
|
|
31
38
|
|
|
32
39
|
unless res.ok?
|
|
33
|
-
|
|
40
|
+
unless @logged[:unexpected_response]
|
|
41
|
+
Datadog.logger.error { "agent reachable but unexpected response: cannot negotiate #{path}" }
|
|
42
|
+
@logged[:unexpected_response] = true
|
|
43
|
+
end
|
|
34
44
|
|
|
35
45
|
return false
|
|
36
46
|
end
|
|
37
47
|
|
|
38
48
|
unless res.endpoints.include?(path)
|
|
39
|
-
|
|
49
|
+
unless @logged[:no_config_endpoint]
|
|
50
|
+
Datadog.logger.error { "agent reachable but does not report #{path}" }
|
|
51
|
+
@logged[:no_config_endpoint] = true
|
|
52
|
+
end
|
|
40
53
|
|
|
41
54
|
return false
|
|
42
55
|
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../core/transport/request'
|
|
4
|
+
require_relative '../../../core/transport/parcel'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Core
|
|
8
|
+
module Remote
|
|
9
|
+
module Transport
|
|
10
|
+
module Config
|
|
11
|
+
# Data transfer object for encoded traces
|
|
12
|
+
class EncodedParcel
|
|
13
|
+
include Datadog::Core::Transport::Parcel
|
|
14
|
+
|
|
15
|
+
def count
|
|
16
|
+
data.length
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Config request
|
|
21
|
+
class Request < Datadog::Core::Transport::Request
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Config response
|
|
25
|
+
module Response
|
|
26
|
+
attr_reader :roots, :targets, :target_files, :client_configs
|
|
27
|
+
|
|
28
|
+
def empty?
|
|
29
|
+
@empty
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Config transport
|
|
34
|
+
class Transport
|
|
35
|
+
attr_reader :client, :apis, :default_api, :current_api_id
|
|
36
|
+
|
|
37
|
+
def initialize(apis, default_api)
|
|
38
|
+
@apis = apis
|
|
39
|
+
|
|
40
|
+
@client = HTTP::Client.new(current_api)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
##### there is only one transport! it's negotiation!
|
|
44
|
+
def send_config(payload)
|
|
45
|
+
json = JSON.dump(payload)
|
|
46
|
+
parcel = EncodedParcel.new(json)
|
|
47
|
+
request = Request.new(parcel)
|
|
48
|
+
|
|
49
|
+
@client.send_config_payload(request)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def current_api
|
|
53
|
+
@apis[HTTP::API::V7]
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Remote
|
|
6
|
+
module Transport
|
|
7
|
+
module HTTP
|
|
8
|
+
module API
|
|
9
|
+
# An API configured with adapter and routes
|
|
10
|
+
class Instance
|
|
11
|
+
attr_reader \
|
|
12
|
+
:adapter,
|
|
13
|
+
:headers,
|
|
14
|
+
:spec
|
|
15
|
+
|
|
16
|
+
def initialize(spec, adapter, options = {})
|
|
17
|
+
@spec = spec
|
|
18
|
+
@adapter = adapter
|
|
19
|
+
@headers = options.fetch(:headers, {})
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def encoder
|
|
23
|
+
spec.encoder
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def call(env)
|
|
27
|
+
# Add headers to request env, unless empty.
|
|
28
|
+
env.headers.merge!(headers) unless headers.empty?
|
|
29
|
+
|
|
30
|
+
# Send request env to the adapter.
|
|
31
|
+
adapter.call(env)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Core
|
|
5
|
+
module Remote
|
|
6
|
+
module Transport
|
|
7
|
+
module HTTP
|
|
8
|
+
module API
|
|
9
|
+
# Specification for an HTTP API
|
|
10
|
+
# Defines behaviors without specific configuration details.
|
|
11
|
+
class Spec
|
|
12
|
+
def initialize
|
|
13
|
+
yield(self) if block_given?
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../encoding'
|
|
4
|
+
require_relative '../../../transport/http/api/map'
|
|
5
|
+
|
|
6
|
+
# TODO: Decouple standard transport/http/api/instance
|
|
7
|
+
#
|
|
8
|
+
# Separate classes are needed because transport/http/traces includes
|
|
9
|
+
# Trace::API::Instance which closes over and uses a single spec, which is
|
|
10
|
+
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
|
11
|
+
# need an independent toplevel path at the endpoint level.
|
|
12
|
+
#
|
|
13
|
+
# Separate classes are needed because of `include Trace::API::Instance`.
|
|
14
|
+
#
|
|
15
|
+
# Below should be:
|
|
16
|
+
# require_relative '../../../../ddtrace/transport/http/api/spec'
|
|
17
|
+
require_relative 'api/spec'
|
|
18
|
+
|
|
19
|
+
# TODO: only needed for Negotiation::API::Endpoint
|
|
20
|
+
require_relative 'negotiation'
|
|
21
|
+
|
|
22
|
+
# TODO: only needed for Config::API::Endpoint
|
|
23
|
+
require_relative 'config'
|
|
24
|
+
|
|
25
|
+
module Datadog
|
|
26
|
+
module Core
|
|
27
|
+
module Remote
|
|
28
|
+
module Transport
|
|
29
|
+
module HTTP
|
|
30
|
+
# Namespace for API components
|
|
31
|
+
module API
|
|
32
|
+
# Default API versions
|
|
33
|
+
ROOT = 'root'
|
|
34
|
+
V7 = 'v0.7'
|
|
35
|
+
|
|
36
|
+
module_function
|
|
37
|
+
|
|
38
|
+
def defaults
|
|
39
|
+
Datadog::Core::Transport::HTTP::API::Map[
|
|
40
|
+
ROOT => Spec.new do |s|
|
|
41
|
+
s.info = Negotiation::API::Endpoint.new(
|
|
42
|
+
'/info',
|
|
43
|
+
)
|
|
44
|
+
end,
|
|
45
|
+
V7 => Spec.new do |s|
|
|
46
|
+
s.config = Config::API::Endpoint.new(
|
|
47
|
+
'/v0.7/config',
|
|
48
|
+
Core::Encoding::JSONEncoder,
|
|
49
|
+
)
|
|
50
|
+
end,
|
|
51
|
+
]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|