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
|
@@ -56,58 +56,28 @@ module Datadog
|
|
|
56
56
|
|
|
57
57
|
# Returns tracer version, comforming to https://semver.org/spec/v2.0.0.html
|
|
58
58
|
def tracer_version_semver2
|
|
59
|
-
|
|
60
|
-
# - transform .PRE to -PRE if present
|
|
61
|
-
# - transform .BUILD to +BUILD if present
|
|
62
|
-
# - keep triplet segments before that
|
|
59
|
+
major, minor, patch, rest = tracer_version.split('.', 4)
|
|
63
60
|
|
|
64
|
-
|
|
61
|
+
semver = "#{major}.#{minor}.#{patch}"
|
|
65
62
|
|
|
66
|
-
|
|
67
|
-
build = "+gha#{m[:gha_run_id]}.g#{m[:git_sha]}.#{m[:branch].tr('.', '-')}" if m[:build]
|
|
63
|
+
return semver unless rest
|
|
68
64
|
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
pre = ''
|
|
66
|
+
build = ''
|
|
67
|
+
|
|
68
|
+
rest.split('.').tap do |segments|
|
|
69
|
+
if segments.length >= 4
|
|
70
|
+
pre = "-#{segments.shift}"
|
|
71
|
+
build = "+#{segments.join('.')}"
|
|
72
|
+
elsif segments.length == 1
|
|
73
|
+
pre = "-#{segments.shift}"
|
|
74
|
+
else
|
|
75
|
+
build = "+#{segments.join('.')}"
|
|
76
|
+
end
|
|
77
|
+
end
|
|
71
78
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
# mandatory segments
|
|
75
|
-
(?<major>\d+)
|
|
76
|
-
\.
|
|
77
|
-
(?<minor>\d+)
|
|
78
|
-
\.
|
|
79
|
-
(?<patch>\d+)
|
|
80
|
-
|
|
81
|
-
# pre segments start with a value
|
|
82
|
-
# - containing at least one alpha
|
|
83
|
-
# - that is not part of our build segments expected values
|
|
84
|
-
# and stop with a value that is not part of our build segments expected values
|
|
85
|
-
(?:
|
|
86
|
-
\.
|
|
87
|
-
(?<pre>
|
|
88
|
-
(?!gha)
|
|
89
|
-
[a-zA-Z0-9]*[a-zA-Z][a-zA-Z0-9]*
|
|
90
|
-
(?:
|
|
91
|
-
\.
|
|
92
|
-
(?!gha)
|
|
93
|
-
[a-zA-Z0-9]+
|
|
94
|
-
)*
|
|
95
|
-
)
|
|
96
|
-
)?
|
|
97
|
-
|
|
98
|
-
# build segments: ours include CI info (`gha`), then git (`g`), then branch name
|
|
99
|
-
(?:
|
|
100
|
-
\.
|
|
101
|
-
(?<build>
|
|
102
|
-
gha(?<gha_run_id>\d+)
|
|
103
|
-
\.
|
|
104
|
-
g(?<git_sha>[a-f0-9]+)
|
|
105
|
-
\.
|
|
106
|
-
(?<branch>(?:[a-zA-Z0-9.])+)
|
|
107
|
-
)
|
|
108
|
-
)?
|
|
109
|
-
$
|
|
110
|
-
/xm.freeze
|
|
79
|
+
semver + pre + build
|
|
80
|
+
end
|
|
111
81
|
end
|
|
112
82
|
end
|
|
113
83
|
end
|
|
@@ -9,12 +9,18 @@ module Datadog
|
|
|
9
9
|
module Platform
|
|
10
10
|
module_function
|
|
11
11
|
|
|
12
|
+
# @return [String] ISA of host; `uname -m`
|
|
13
|
+
def architecture
|
|
14
|
+
Identity.lang_version >= '2.2' ? Etc.uname[:machine] : Gem::Platform.local.cpu
|
|
15
|
+
end
|
|
16
|
+
|
|
12
17
|
# @return [String] name of host; `uname -n`
|
|
13
18
|
def hostname
|
|
14
19
|
Identity.lang_version >= '2.2' ? Etc.uname[:nodename] : nil
|
|
15
20
|
end
|
|
16
21
|
|
|
17
|
-
#
|
|
22
|
+
# System name, normally `Linux` or `Darwin` (but 'Mac OS X' on JRuby);
|
|
23
|
+
# @return [String] name of kernel; `uname -s`.
|
|
18
24
|
def kernel_name
|
|
19
25
|
Identity.lang_version >= '2.2' ? Etc.uname[:sysname] : Gem::Platform.local.os.capitalize
|
|
20
26
|
end
|
|
@@ -29,75 +29,6 @@ module Datadog
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
# Reads an environment variable as an Integer.
|
|
33
|
-
#
|
|
34
|
-
# @param [String] var environment variable
|
|
35
|
-
# @param [Array<String>] var list of environment variables
|
|
36
|
-
# @param [Integer] default the default value if the keys in `var` are not present in the environment
|
|
37
|
-
# @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
|
|
38
|
-
# the first key in `var` is not used.
|
|
39
|
-
# @return [Integer] if the environment value is a valid Integer
|
|
40
|
-
# @return [default] if the environment value is not found
|
|
41
|
-
def env_to_int(var, default = nil, deprecation_warning: true)
|
|
42
|
-
var = decode_array(var, deprecation_warning)
|
|
43
|
-
var && ENV.key?(var) ? ENV[var].to_i : default
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Reads an environment variable as a Float.
|
|
47
|
-
#
|
|
48
|
-
# @param [String] var environment variable
|
|
49
|
-
# @param [Array<String>] var list of environment variables
|
|
50
|
-
# @param [Float] default the default value if the keys in `var` are not present in the environment
|
|
51
|
-
# @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
|
|
52
|
-
# the first key in `var` is not used.
|
|
53
|
-
# @return [Float] if the environment value is a valid Float
|
|
54
|
-
# @return [default] if the environment value is not found
|
|
55
|
-
def env_to_float(var, default = nil, deprecation_warning: true)
|
|
56
|
-
var = decode_array(var, deprecation_warning)
|
|
57
|
-
var && ENV.key?(var) ? ENV[var].to_f : default
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# Parses comma- or space-separated lists.
|
|
61
|
-
#
|
|
62
|
-
# If a comma is present, then the list is considered comma-separated.
|
|
63
|
-
# Otherwise, it is considered space-separated.
|
|
64
|
-
#
|
|
65
|
-
# After the entries are separated, commas and whitespaces that are
|
|
66
|
-
# either trailing or leading are trimmed.
|
|
67
|
-
#
|
|
68
|
-
# Empty entries, after trimmed, are also removed from the result.
|
|
69
|
-
#
|
|
70
|
-
# @param [String] var environment variable
|
|
71
|
-
# @param [Array<String>] var list of environment variables
|
|
72
|
-
# @param [Array<Object>] default the default value if the keys in `var` are not present in the environment
|
|
73
|
-
# @param [Boolean] deprecation_warning when `var` is a list, record a deprecation log when
|
|
74
|
-
# the first key in `var` is not used.
|
|
75
|
-
# @return [Array<Object>] if the environment value is a valid list
|
|
76
|
-
# @return [default] if the environment value is not found
|
|
77
|
-
def env_to_list(var, default = [], comma_separated_only:, deprecation_warning: true)
|
|
78
|
-
var = decode_array(var, deprecation_warning)
|
|
79
|
-
if var && ENV.key?(var)
|
|
80
|
-
value = ENV[var]
|
|
81
|
-
|
|
82
|
-
values = if value.include?(',') || comma_separated_only
|
|
83
|
-
value.split(',')
|
|
84
|
-
else
|
|
85
|
-
value.split(' ') # rubocop:disable Style/RedundantArgument
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
values.map! do |v|
|
|
89
|
-
v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
|
|
90
|
-
|
|
91
|
-
v.empty? ? nil : v
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
values.compact!
|
|
95
|
-
values
|
|
96
|
-
else
|
|
97
|
-
default
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
32
|
private
|
|
102
33
|
|
|
103
34
|
def decode_array(var, deprecation_warning)
|
|
@@ -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,15 @@
|
|
|
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
|
-
TAG_TAG = 'git.tag'.freeze
|
|
9
|
-
|
|
10
|
-
TAG_COMMIT_AUTHOR_DATE = 'git.commit.author.date'.freeze
|
|
11
|
-
TAG_COMMIT_AUTHOR_EMAIL = 'git.commit.author.email'.freeze
|
|
12
|
-
TAG_COMMIT_AUTHOR_NAME = 'git.commit.author.name'.freeze
|
|
13
|
-
TAG_COMMIT_COMMITTER_DATE = 'git.commit.committer.date'.freeze
|
|
14
|
-
TAG_COMMIT_COMMITTER_EMAIL = 'git.commit.committer.email'.freeze
|
|
15
|
-
TAG_COMMIT_COMMITTER_NAME = 'git.commit.committer.name'.freeze
|
|
16
|
-
TAG_COMMIT_MESSAGE = 'git.commit.message'.freeze
|
|
17
|
-
TAG_COMMIT_SHA = 'git.commit.sha'.freeze
|
|
8
|
+
TAG_REPOSITORY_URL = '_dd.git.repository_url'
|
|
9
|
+
TAG_COMMIT_SHA = '_dd.git.commit.sha'
|
|
18
10
|
|
|
19
|
-
ENV_REPOSITORY_URL = 'DD_GIT_REPOSITORY_URL'
|
|
20
|
-
ENV_COMMIT_SHA = 'DD_GIT_COMMIT_SHA'
|
|
21
|
-
ENV_BRANCH = 'DD_GIT_BRANCH'.freeze
|
|
22
|
-
ENV_TAG = 'DD_GIT_TAG'.freeze
|
|
23
|
-
ENV_COMMIT_MESSAGE = 'DD_GIT_COMMIT_MESSAGE'.freeze
|
|
24
|
-
ENV_COMMIT_AUTHOR_NAME = 'DD_GIT_COMMIT_AUTHOR_NAME'.freeze
|
|
25
|
-
ENV_COMMIT_AUTHOR_EMAIL = 'DD_GIT_COMMIT_AUTHOR_EMAIL'.freeze
|
|
26
|
-
ENV_COMMIT_AUTHOR_DATE = 'DD_GIT_COMMIT_AUTHOR_DATE'.freeze
|
|
27
|
-
ENV_COMMIT_COMMITTER_NAME = 'DD_GIT_COMMIT_COMMITTER_NAME'.freeze
|
|
28
|
-
ENV_COMMIT_COMMITTER_EMAIL = 'DD_GIT_COMMIT_COMMITTER_EMAIL'.freeze
|
|
29
|
-
ENV_COMMIT_COMMITTER_DATE = 'DD_GIT_COMMIT_COMMITTER_DATE'.freeze
|
|
11
|
+
ENV_REPOSITORY_URL = 'DD_GIT_REPOSITORY_URL'
|
|
12
|
+
ENV_COMMIT_SHA = 'DD_GIT_COMMIT_SHA'
|
|
30
13
|
end
|
|
31
14
|
end
|
|
32
15
|
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)
|
|
@@ -48,7 +53,7 @@ module Datadog
|
|
|
48
53
|
cap_to_hexs = capabilities.reduce(:|).to_s(16).tap { |s| s.size.odd? && s.prepend('0') }.scan(/\h\h/)
|
|
49
54
|
binary = cap_to_hexs.each_with_object([]) { |hex, acc| acc << hex }.map { |e| e.to_i(16) }.pack('C*')
|
|
50
55
|
|
|
51
|
-
Base64.
|
|
56
|
+
Base64.strict_encode64(binary)
|
|
52
57
|
end
|
|
53
58
|
end
|
|
54
59
|
end
|
|
@@ -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
|
|
|
@@ -13,25 +13,23 @@ module Datadog
|
|
|
13
13
|
# Configures the HTTP transport to communicate with the agent
|
|
14
14
|
# to fetch and sync the remote configuration
|
|
15
15
|
class Component
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
attr_reader :client
|
|
16
|
+
attr_reader :client, :healthy
|
|
19
17
|
|
|
20
18
|
def initialize(settings, capabilities, agent_settings)
|
|
21
19
|
transport_options = {}
|
|
22
20
|
transport_options[:agent_settings] = agent_settings if agent_settings
|
|
23
21
|
|
|
24
22
|
negotiation = Negotiation.new(settings, agent_settings)
|
|
25
|
-
transport_v7 = Datadog::Core::Transport::HTTP.v7(**transport_options.dup)
|
|
23
|
+
transport_v7 = Datadog::Core::Remote::Transport::HTTP.v7(**transport_options.dup)
|
|
26
24
|
|
|
27
|
-
@barrier = Barrier.new(
|
|
25
|
+
@barrier = Barrier.new(settings.remote.boot_timeout_seconds)
|
|
28
26
|
|
|
29
27
|
@client = Client.new(transport_v7, capabilities)
|
|
30
|
-
healthy = false
|
|
28
|
+
@healthy = false
|
|
31
29
|
Datadog.logger.debug { "new remote configuration client: #{@client.id}" }
|
|
32
30
|
|
|
33
31
|
@worker = Worker.new(interval: settings.remote.poll_interval_seconds) do
|
|
34
|
-
unless healthy || negotiation.endpoint?('/v0.7/config')
|
|
32
|
+
unless @healthy || negotiation.endpoint?('/v0.7/config')
|
|
35
33
|
@barrier.lift
|
|
36
34
|
|
|
37
35
|
next
|
|
@@ -39,12 +37,17 @@ module Datadog
|
|
|
39
37
|
|
|
40
38
|
begin
|
|
41
39
|
@client.sync
|
|
42
|
-
healthy ||= true
|
|
40
|
+
@healthy ||= true
|
|
43
41
|
rescue Client::SyncError => e
|
|
44
42
|
Datadog.logger.error do
|
|
45
43
|
"remote worker client sync error: #{e.message} location: #{Array(e.backtrace).first}. skipping sync"
|
|
46
44
|
end
|
|
47
45
|
rescue StandardError => e
|
|
46
|
+
# In case of unexpected errors, reset the negotiation object
|
|
47
|
+
# given external conditions have changed and the negotiation
|
|
48
|
+
# negotiation object stores error logging state that should be reset.
|
|
49
|
+
negotiation = Negotiation.new(settings, agent_settings)
|
|
50
|
+
|
|
48
51
|
Datadog.logger.error do
|
|
49
52
|
"remote worker error: #{e.class.name} #{e.message} location: #{Array(e.backtrace).first}. "\
|
|
50
53
|
'reseting client state'
|
|
@@ -52,7 +55,7 @@ module Datadog
|
|
|
52
55
|
|
|
53
56
|
# client state is unknown, state might be corrupted
|
|
54
57
|
@client = Client.new(transport_v7, capabilities)
|
|
55
|
-
healthy = false
|
|
58
|
+
@healthy = false
|
|
56
59
|
Datadog.logger.debug { "new remote configuration client: #{@client.id}" }
|
|
57
60
|
|
|
58
61
|
# TODO: bail out if too many errors?
|
|
@@ -62,13 +65,22 @@ module Datadog
|
|
|
62
65
|
end
|
|
63
66
|
end
|
|
64
67
|
|
|
65
|
-
|
|
68
|
+
# Starts the Remote Configuration worker without waiting for first run
|
|
69
|
+
def start
|
|
66
70
|
@worker.start
|
|
71
|
+
end
|
|
67
72
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
# Is the Remote Configuration worker running?
|
|
74
|
+
def started?
|
|
75
|
+
@worker.started?
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# If the worker is not initialized, initialize it.
|
|
79
|
+
#
|
|
80
|
+
# Then, waits for one client sync to be executed if `kind` is `:once`.
|
|
81
|
+
def barrier(_kind)
|
|
82
|
+
start
|
|
83
|
+
@barrier.wait_once
|
|
72
84
|
end
|
|
73
85
|
|
|
74
86
|
def shutdown!
|
|
@@ -89,34 +101,37 @@ module Datadog
|
|
|
89
101
|
def wait_once(timeout = nil)
|
|
90
102
|
# TTAS (Test and Test-And-Set) optimisation
|
|
91
103
|
# Since @once only ever goes from false to true, this is semantically valid
|
|
92
|
-
return if @once
|
|
104
|
+
return :pass if @once
|
|
93
105
|
|
|
94
106
|
begin
|
|
95
107
|
@mutex.lock
|
|
96
108
|
|
|
97
|
-
return if @once
|
|
109
|
+
return :pass if @once
|
|
98
110
|
|
|
99
111
|
timeout ||= @timeout
|
|
100
112
|
|
|
101
|
-
#
|
|
102
|
-
|
|
113
|
+
# - starting with Ruby 3.2, ConditionVariable#wait returns nil on
|
|
114
|
+
# timeout and an integer otherwise
|
|
115
|
+
# - before Ruby 3.2, ConditionVariable returns itself
|
|
116
|
+
# so we have to rely on @once having been set
|
|
117
|
+
if RUBY_VERSION >= '3.2'
|
|
118
|
+
lifted = @condition.wait(@mutex, timeout)
|
|
119
|
+
else
|
|
120
|
+
@condition.wait(@mutex, timeout)
|
|
121
|
+
lifted = @once
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
if lifted
|
|
125
|
+
:lift
|
|
126
|
+
else
|
|
127
|
+
@once = true
|
|
128
|
+
:timeout
|
|
129
|
+
end
|
|
103
130
|
ensure
|
|
104
131
|
@mutex.unlock
|
|
105
132
|
end
|
|
106
133
|
end
|
|
107
134
|
|
|
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
135
|
# Release all current waiters
|
|
121
136
|
def lift
|
|
122
137
|
@mutex.lock
|
|
@@ -130,26 +145,15 @@ module Datadog
|
|
|
130
145
|
end
|
|
131
146
|
|
|
132
147
|
class << self
|
|
148
|
+
# Because the agent might not be available yet, we can't perform agent-specific checks yet, as they
|
|
149
|
+
# would prevent remote configuration from ever running.
|
|
150
|
+
#
|
|
151
|
+
# Those checks are instead performed inside the worker loop.
|
|
152
|
+
# This allows users to upgrade their agent while keeping their application running.
|
|
133
153
|
def build(settings, agent_settings)
|
|
134
154
|
return unless settings.remote.enabled
|
|
135
155
|
|
|
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)
|
|
156
|
+
new(settings, Client::Capabilities.new(settings), agent_settings)
|
|
153
157
|
end
|
|
154
158
|
end
|
|
155
159
|
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)
|
|
@@ -5,7 +5,8 @@ module Datadog
|
|
|
5
5
|
module Remote
|
|
6
6
|
module Ext
|
|
7
7
|
ENV_ENABLED = 'DD_REMOTE_CONFIGURATION_ENABLED'
|
|
8
|
-
ENV_POLL_INTERVAL_SECONDS = '
|
|
8
|
+
ENV_POLL_INTERVAL_SECONDS = 'DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS'
|
|
9
|
+
ENV_BOOT_TIMEOUT_SECONDS = 'DD_REMOTE_CONFIG_BOOT_TIMEOUT_SECONDS'
|
|
9
10
|
end
|
|
10
11
|
end
|
|
11
12
|
end
|