ddtrace 1.4.2 → 1.23.3
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 +1177 -3
- data/LICENSE-3rdparty.csv +3 -1
- data/README.md +10 -12
- 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} +11 -4
- data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +24 -6
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +48 -12
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +1 -3
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +6 -23
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +1161 -0
- 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/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
- data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -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/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +244 -0
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.c +372 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.h +27 -0
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +1402 -0
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +15 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +114 -34
- data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
- data/ext/datadog_profiling_native_extension/helpers.h +23 -0
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +129 -88
- 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 +104 -29
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +331 -131
- data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +29 -1
- data/ext/datadog_profiling_native_extension/profiling.c +267 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +122 -0
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +115 -0
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +11 -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/blocked.html +98 -3
- data/lib/datadog/appsec/assets/blocked.json +1 -0
- data/lib/datadog/appsec/assets/blocked.text +5 -0
- data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +2861 -796
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +459 -122
- data/lib/datadog/appsec/assets.rb +10 -4
- data/lib/datadog/appsec/autoload.rb +4 -11
- data/lib/datadog/appsec/component.rb +94 -0
- data/lib/datadog/appsec/configuration/settings.rb +170 -162
- data/lib/datadog/appsec/configuration.rb +1 -70
- data/lib/datadog/appsec/contrib/auto_instrument.rb +3 -5
- 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/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +1 -3
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +104 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +112 -121
- data/lib/datadog/appsec/contrib/rack/integration.rb +0 -7
- data/lib/datadog/appsec/contrib/rack/patcher.rb +3 -1
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +33 -39
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +19 -23
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +25 -23
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +11 -8
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +153 -41
- data/lib/datadog/appsec/contrib/rails/ext.rb +2 -4
- data/lib/datadog/appsec/contrib/rails/framework.rb +2 -16
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +40 -52
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -8
- data/lib/datadog/appsec/contrib/rails/patcher.rb +23 -20
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +21 -23
- data/lib/datadog/appsec/contrib/rails/request.rb +4 -1
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -3
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +2 -16
- data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +78 -87
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +0 -7
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +33 -15
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +19 -21
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
- data/lib/datadog/appsec/event.rb +98 -50
- data/lib/datadog/appsec/ext.rb +10 -0
- data/lib/datadog/appsec/extensions.rb +2 -105
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +22 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +26 -6
- data/lib/datadog/appsec/instrumentation.rb +9 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +67 -0
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +58 -0
- data/lib/datadog/appsec/monitor.rb +11 -0
- data/lib/datadog/appsec/processor/actions.rb +49 -0
- data/lib/datadog/appsec/processor/rule_loader.rb +123 -0
- data/lib/datadog/appsec/processor/rule_merger.rb +152 -0
- data/lib/datadog/appsec/processor.rb +68 -61
- data/lib/datadog/appsec/rate_limiter.rb +1 -3
- data/lib/datadog/appsec/reactive/address_hash.rb +6 -2
- data/lib/datadog/appsec/reactive/engine.rb +10 -7
- data/lib/datadog/appsec/reactive/operation.rb +19 -2
- data/lib/datadog/appsec/reactive/subscriber.rb +2 -1
- data/lib/datadog/appsec/remote.rb +129 -0
- data/lib/datadog/appsec/response.rb +151 -0
- data/lib/datadog/appsec/sample_rate.rb +21 -0
- data/lib/datadog/appsec/scope.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
- data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
- data/lib/datadog/appsec/utils/http.rb +11 -0
- data/lib/datadog/appsec/utils.rb +9 -0
- data/lib/datadog/appsec.rb +41 -4
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/backport.rb +51 -0
- data/lib/datadog/core/buffer/cruby.rb +1 -1
- data/lib/datadog/core/buffer/random.rb +1 -1
- data/lib/datadog/core/buffer/thread_safe.rb +1 -1
- data/lib/datadog/core/chunker.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +96 -56
- data/lib/datadog/core/configuration/base.rb +7 -16
- data/lib/datadog/core/configuration/components.rb +46 -300
- data/lib/datadog/core/configuration/ext.rb +47 -0
- data/lib/datadog/core/configuration/option.rb +272 -22
- data/lib/datadog/core/configuration/option_definition.rb +81 -31
- data/lib/datadog/core/configuration/options.rb +26 -16
- data/lib/datadog/core/configuration/settings.rb +498 -302
- data/lib/datadog/core/configuration.rb +16 -10
- data/lib/datadog/core/diagnostics/environment_logger.rb +131 -231
- data/lib/datadog/core/diagnostics/health.rb +4 -22
- data/lib/datadog/core/encoding.rb +0 -4
- data/lib/datadog/core/environment/cgroup.rb +0 -4
- data/lib/datadog/core/environment/class_count.rb +7 -7
- data/lib/datadog/core/environment/container.rb +0 -4
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +12 -12
- data/lib/datadog/core/environment/gc.rb +1 -1
- data/lib/datadog/core/environment/git.rb +25 -0
- data/lib/datadog/core/environment/identity.rb +27 -1
- data/lib/datadog/core/environment/platform.rb +7 -3
- data/lib/datadog/core/environment/socket.rb +1 -1
- data/lib/datadog/core/environment/thread_count.rb +1 -1
- data/lib/datadog/core/environment/variable_helpers.rb +29 -44
- data/lib/datadog/core/environment/vm_cache.rb +18 -1
- data/lib/datadog/core/environment/yjit.rb +58 -0
- data/lib/datadog/core/error.rb +1 -2
- data/lib/datadog/core/extensions.rb +1 -1
- data/lib/datadog/core/git/ext.rb +5 -24
- data/lib/datadog/core/header_collection.rb +43 -0
- data/lib/datadog/core/logger.rb +0 -2
- data/lib/datadog/core/logging/ext.rb +3 -1
- data/lib/datadog/core/metrics/client.rb +3 -4
- data/lib/datadog/core/metrics/ext.rb +6 -8
- data/lib/datadog/core/metrics/helpers.rb +1 -1
- data/lib/datadog/core/metrics/logging.rb +0 -2
- data/lib/datadog/core/metrics/metric.rb +1 -1
- data/lib/datadog/core/metrics/options.rb +0 -2
- data/lib/datadog/core/pin.rb +0 -2
- data/lib/datadog/core/remote/client/capabilities.rb +62 -0
- data/lib/datadog/core/remote/client.rb +232 -0
- data/lib/datadog/core/remote/component.rb +162 -0
- data/lib/datadog/core/remote/configuration/content.rb +111 -0
- data/lib/datadog/core/remote/configuration/digest.rb +62 -0
- data/lib/datadog/core/remote/configuration/path.rb +90 -0
- data/lib/datadog/core/remote/configuration/repository.rb +294 -0
- data/lib/datadog/core/remote/configuration/target.rb +74 -0
- data/lib/datadog/core/remote/configuration.rb +18 -0
- data/lib/datadog/core/remote/dispatcher.rb +59 -0
- data/lib/datadog/core/remote/ext.rb +13 -0
- data/lib/datadog/core/remote/negotiation.rb +70 -0
- 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/remote/transport/negotiation.rb +62 -0
- data/lib/datadog/core/remote/worker.rb +102 -0
- data/lib/datadog/core/remote.rb +24 -0
- data/lib/datadog/core/runtime/ext.rb +21 -11
- data/lib/datadog/core/runtime/metrics.rb +64 -7
- data/lib/datadog/core/telemetry/component.rb +66 -0
- data/lib/datadog/core/telemetry/emitter.rb +9 -13
- data/lib/datadog/core/telemetry/event.rb +250 -47
- data/lib/datadog/core/telemetry/ext.rb +7 -2
- data/lib/datadog/core/telemetry/http/adapters/net.rb +1 -3
- data/lib/datadog/core/telemetry/http/env.rb +1 -1
- data/lib/datadog/core/telemetry/http/ext.rb +13 -8
- data/lib/datadog/core/telemetry/http/response.rb +4 -4
- data/lib/datadog/core/telemetry/http/transport.rb +12 -4
- data/lib/datadog/core/telemetry/request.rb +59 -0
- data/lib/datadog/core/telemetry/worker.rb +158 -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/compression.rb +6 -2
- data/lib/datadog/core/utils/duration.rb +52 -0
- data/lib/datadog/core/utils/forking.rb +0 -2
- data/lib/datadog/core/utils/hash.rb +79 -0
- data/lib/datadog/core/utils/network.rb +140 -0
- data/lib/datadog/core/utils/only_once.rb +0 -2
- data/lib/datadog/core/utils/only_once_successful.rb +76 -0
- data/lib/datadog/core/utils/safe_dup.rb +35 -12
- data/lib/datadog/core/utils/sequence.rb +1 -1
- data/lib/datadog/core/utils/time.rb +1 -3
- data/lib/datadog/core/utils/url.rb +25 -0
- data/lib/datadog/core/utils.rb +1 -24
- data/lib/datadog/core/vendor/ipaddr.rb +78 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +0 -2
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +7 -6
- data/lib/datadog/core/workers/interval_loop.rb +6 -2
- data/lib/datadog/core/workers/polling.rb +2 -4
- data/lib/datadog/core/workers/queue.rb +1 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +1 -1
- data/lib/datadog/core.rb +20 -55
- data/lib/datadog/kit/appsec/events.rb +169 -0
- data/lib/datadog/kit/enable_core_dumps.rb +8 -9
- data/lib/datadog/kit/identity.rb +90 -49
- data/lib/datadog/kit.rb +1 -1
- data/lib/datadog/opentelemetry/api/context.rb +193 -0
- data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +92 -0
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +134 -0
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
- data/lib/datadog/opentelemetry/trace.rb +58 -0
- data/lib/datadog/opentelemetry.rb +51 -0
- data/lib/datadog/opentracer/binary_propagator.rb +1 -1
- data/lib/datadog/opentracer/carrier.rb +1 -1
- data/lib/datadog/opentracer/distributed_headers.rb +7 -11
- data/lib/datadog/opentracer/global_tracer.rb +1 -1
- data/lib/datadog/opentracer/propagator.rb +1 -1
- data/lib/datadog/opentracer/rack_propagator.rb +0 -5
- data/lib/datadog/opentracer/scope.rb +1 -1
- data/lib/datadog/opentracer/scope_manager.rb +1 -1
- data/lib/datadog/opentracer/span.rb +0 -2
- data/lib/datadog/opentracer/span_context.rb +1 -1
- data/lib/datadog/opentracer/span_context_factory.rb +1 -1
- data/lib/datadog/opentracer/text_map_propagator.rb +6 -9
- data/lib/datadog/opentracer/thread_local_scope.rb +1 -1
- data/lib/datadog/opentracer/thread_local_scope_manager.rb +0 -2
- data/lib/datadog/opentracer/tracer.rb +0 -2
- data/lib/datadog/opentracer.rb +10 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +10 -6
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +82 -19
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
- data/lib/datadog/profiling/collectors/info.rb +101 -0
- data/lib/datadog/profiling/collectors/stack.rb +1 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +61 -0
- data/lib/datadog/profiling/component.rb +426 -0
- data/lib/datadog/profiling/exporter.rb +32 -10
- data/lib/datadog/profiling/ext/forking.rb +0 -2
- data/lib/datadog/profiling/ext.rb +22 -32
- data/lib/datadog/profiling/flush.rb +11 -6
- data/lib/datadog/profiling/http_transport.rb +23 -8
- data/lib/datadog/profiling/load_native_extension.rb +25 -8
- data/lib/datadog/profiling/native_extension.rb +2 -23
- data/lib/datadog/profiling/preload.rb +1 -1
- data/lib/datadog/profiling/profiler.rb +42 -14
- data/lib/datadog/profiling/scheduler.rb +27 -25
- data/lib/datadog/profiling/stack_recorder.rb +36 -8
- data/lib/datadog/profiling/tag_builder.rb +6 -1
- data/lib/datadog/profiling/tasks/exec.rb +3 -5
- data/lib/datadog/profiling/tasks/help.rb +3 -5
- data/lib/datadog/profiling/tasks/setup.rb +0 -35
- data/lib/datadog/profiling.rb +65 -75
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +0 -5
- data/lib/datadog/tracing/client_ip.rb +61 -0
- data/lib/datadog/tracing/component.rb +235 -0
- 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 +72 -15
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +502 -0
- data/lib/datadog/tracing/context.rb +1 -1
- data/lib/datadog/tracing/context_provider.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +20 -19
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +0 -2
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +20 -19
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -26
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +23 -9
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +10 -9
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +10 -8
- data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/events.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/ext.rb +12 -11
- data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/utils.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/active_job/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/ext.rb +25 -24
- data/lib/datadog/tracing/contrib/active_job/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +2 -2
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +0 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +0 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +12 -11
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +29 -17
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +17 -9
- data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +0 -2
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +3 -6
- data/lib/datadog/tracing/contrib/active_record/events.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/ext.rb +17 -16
- data/lib/datadog/tracing/contrib/active_record/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -3
- data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +0 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +107 -201
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +19 -8
- data/lib/datadog/tracing/contrib/active_support/ext.rb +18 -17
- data/lib/datadog/tracing/contrib/active_support/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +0 -2
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/analytics.rb +1 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +25 -8
- data/lib/datadog/tracing/contrib/aws/ext.rb +37 -14
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +28 -3
- data/lib/datadog/tracing/contrib/aws/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +4 -2
- data/lib/datadog/tracing/contrib/aws/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +16 -0
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +22 -0
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +22 -0
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +32 -0
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +22 -0
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +30 -0
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +27 -0
- data/lib/datadog/tracing/contrib/aws/service/states.rb +40 -0
- data/lib/datadog/tracing/contrib/aws/services.rb +17 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +4 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +15 -15
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +4 -11
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +20 -4
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configurable.rb +2 -2
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -5
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +30 -8
- data/lib/datadog/tracing/contrib/dalli/ext.rb +26 -10
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +23 -7
- data/lib/datadog/tracing/contrib/dalli/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +0 -2
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +16 -15
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +9 -1
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +3 -1
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +25 -8
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +21 -13
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +105 -95
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +0 -4
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +28 -10
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +52 -7
- data/lib/datadog/tracing/contrib/ethon/ext.rb +19 -11
- data/lib/datadog/tracing/contrib/ethon/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +10 -3
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +1 -2
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +30 -11
- data/lib/datadog/tracing/contrib/excon/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/excon/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/excon/middleware.rb +27 -4
- data/lib/datadog/tracing/contrib/excon/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/ext.rb +55 -0
- data/lib/datadog/tracing/contrib/extensions.rb +38 -4
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +37 -11
- data/lib/datadog/tracing/contrib/faraday/connection.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/faraday/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +25 -7
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +1 -1
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +10 -7
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +0 -4
- data/lib/datadog/tracing/contrib/grape/ext.rb +16 -15
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -8
- data/lib/datadog/tracing/contrib/graphql/ext.rb +7 -6
- data/lib/datadog/tracing/contrib/graphql/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +51 -10
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +45 -19
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +43 -26
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -6
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +42 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +16 -11
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +8 -3
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +1 -4
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +23 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +6 -9
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +48 -10
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +32 -12
- data/lib/datadog/tracing/contrib/http/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/http/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/http_annotation_helper.rb +1 -1
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +48 -10
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +17 -8
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +27 -8
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +48 -10
- data/lib/datadog/tracing/contrib/httprb/ext.rb +16 -8
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +27 -9
- data/lib/datadog/tracing/contrib/httprb/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +2 -1
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +2 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -2
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -2
- data/lib/datadog/tracing/contrib/kafka/events.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/ext.rb +42 -39
- data/lib/datadog/tracing/contrib/kafka/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +4 -3
- data/lib/datadog/tracing/contrib/lograge/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +3 -18
- data/lib/datadog/tracing/contrib/lograge/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +25 -8
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +25 -14
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +0 -2
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +22 -4
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +36 -8
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +15 -9
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +38 -4
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +1 -1
- 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/patchable.rb +1 -1
- data/lib/datadog/tracing/contrib/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +37 -8
- data/lib/datadog/tracing/contrib/pg/ext.rb +22 -18
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +122 -39
- data/lib/datadog/tracing/contrib/pg/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/pg/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +24 -8
- data/lib/datadog/tracing/contrib/presto/ext.rb +25 -19
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +17 -5
- data/lib/datadog/tracing/contrib/presto/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/presto/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +53 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +14 -9
- data/lib/datadog/tracing/contrib/qless/ext.rb +14 -13
- data/lib/datadog/tracing/contrib/qless/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
- data/lib/datadog/tracing/contrib/qless/qless_job.rb +3 -2
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +1 -1
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +22 -14
- data/lib/datadog/tracing/contrib/que/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/que/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/que/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/que/tracer.rb +4 -2
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +19 -8
- data/lib/datadog/tracing/contrib/racecar/event.rb +7 -4
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +4 -3
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +0 -2
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +4 -3
- data/lib/datadog/tracing/contrib/racecar/events.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/ext.rb +20 -18
- data/lib/datadog/tracing/contrib/racecar/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +17 -14
- data/lib/datadog/tracing/contrib/rack/ext.rb +18 -12
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +38 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +138 -82
- data/lib/datadog/tracing/contrib/rack/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -4
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +29 -19
- data/lib/datadog/tracing/contrib/rails/ext.rb +7 -6
- data/lib/datadog/tracing/contrib/rails/framework.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -12
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -43
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -5
- data/lib/datadog/tracing/contrib/rails/utils.rb +2 -2
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +15 -11
- data/lib/datadog/tracing/contrib/rake/ext.rb +14 -13
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +0 -2
- data/lib/datadog/tracing/contrib/rake/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/rake/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +27 -10
- data/lib/datadog/tracing/contrib/redis/ext.rb +22 -13
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +13 -39
- data/lib/datadog/tracing/contrib/redis/integration.rb +34 -3
- data/lib/datadog/tracing/contrib/redis/patcher.rb +66 -11
- data/lib/datadog/tracing/contrib/redis/quantize.rb +11 -10
- data/lib/datadog/tracing/contrib/redis/tags.rb +24 -9
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +83 -0
- data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/registerable.rb +1 -1
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +15 -8
- data/lib/datadog/tracing/contrib/resque/ext.rb +9 -8
- data/lib/datadog/tracing/contrib/resque/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/resque/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -1
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +28 -10
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +15 -8
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +1 -2
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +28 -3
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/roda/ext.rb +19 -0
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
- data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
- data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/roda}/patcher.rb +10 -7
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +4 -3
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +6 -21
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/sequel/database.rb +4 -3
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +5 -2
- data/lib/datadog/tracing/contrib/sequel/ext.rb +10 -9
- data/lib/datadog/tracing/contrib/sequel/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -6
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +16 -9
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +14 -12
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +5 -1
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +18 -4
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +20 -11
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +32 -31
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +8 -2
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +15 -3
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +14 -5
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +3 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +3 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +5 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +24 -3
- data/lib/datadog/tracing/contrib/sidekiq/{tracing.rb → utils.rb} +2 -2
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +12 -11
- data/lib/datadog/tracing/contrib/sinatra/env.rb +11 -41
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +24 -19
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +2 -3
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +8 -82
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +14 -20
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +15 -10
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +0 -2
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +5 -2
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +92 -0
- data/lib/datadog/tracing/contrib/status_code_matcher.rb +0 -3
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/stripe/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +15 -14
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +0 -2
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +1 -2
- 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/tracing/contrib/trilogy/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/utils/database.rb +4 -4
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +0 -2
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -14
- data/lib/datadog/tracing/contrib.rb +6 -1
- data/lib/datadog/tracing/correlation.rb +42 -14
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
- data/lib/datadog/{core → tracing}/diagnostics/ext.rb +21 -26
- data/lib/datadog/tracing/diagnostics/health.rb +40 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
- data/lib/datadog/tracing/distributed/datadog.rb +199 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
- data/lib/datadog/tracing/distributed/headers/ext.rb +19 -16
- data/lib/datadog/tracing/distributed/helpers.rb +26 -39
- data/lib/datadog/tracing/distributed/none.rb +18 -0
- data/lib/datadog/tracing/distributed/propagation.rb +127 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +415 -0
- data/lib/datadog/tracing/event.rb +0 -4
- data/lib/datadog/tracing/flush.rb +58 -36
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/errors.rb +1 -1
- data/lib/datadog/tracing/metadata/ext.rb +29 -14
- data/lib/datadog/tracing/metadata/tagging.rb +17 -4
- data/lib/datadog/tracing/metadata.rb +1 -1
- data/lib/datadog/tracing/pipeline/span_filter.rb +1 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +1 -1
- data/lib/datadog/tracing/pipeline.rb +0 -4
- data/lib/datadog/tracing/propagation/http.rb +4 -99
- data/lib/datadog/tracing/remote.rb +78 -0
- data/lib/datadog/tracing/runtime/metrics.rb +1 -3
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +30 -1
- data/lib/datadog/tracing/sampling/matcher.rb +24 -4
- data/lib/datadog/tracing/sampling/priority_sampler.rb +58 -5
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +8 -11
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +29 -8
- data/lib/datadog/tracing/sampling/rate_limiter.rb +3 -2
- data/lib/datadog/tracing/sampling/rate_sampler.rb +23 -10
- data/lib/datadog/tracing/sampling/rule.rb +7 -6
- data/lib/datadog/tracing/sampling/rule_sampler.rb +35 -7
- data/lib/datadog/tracing/sampling/sampler.rb +0 -2
- data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +9 -0
- data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
- data/lib/datadog/tracing/sampling/span/sampler.rb +77 -0
- data/lib/datadog/tracing/span.rb +3 -21
- data/lib/datadog/tracing/span_operation.rb +8 -24
- data/lib/datadog/tracing/sync_writer.rb +4 -6
- data/lib/datadog/tracing/trace_digest.rb +120 -3
- data/lib/datadog/tracing/trace_operation.rb +62 -15
- data/lib/datadog/tracing/trace_segment.rb +20 -7
- data/lib/datadog/tracing/tracer.rb +46 -10
- data/lib/datadog/tracing/transport/http/api/instance.rb +37 -0
- data/lib/datadog/tracing/transport/http/api/spec.rb +19 -0
- data/lib/datadog/tracing/transport/http/api.rb +43 -0
- data/lib/datadog/tracing/transport/http/builder.rb +162 -0
- 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/utils.rb +83 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +6 -7
- data/lib/datadog/tracing/workers.rb +4 -6
- data/lib/datadog/tracing/writer.rb +12 -6
- data/lib/datadog/tracing.rb +9 -3
- data/lib/ddtrace/auto_instrument.rb +1 -1
- data/lib/ddtrace/auto_instrument_base.rb +1 -1
- data/lib/ddtrace/profiling/preload.rb +0 -2
- data/lib/ddtrace/transport/ext.rb +21 -15
- data/lib/ddtrace/version.rb +14 -15
- data/lib/ddtrace.rb +3 -5
- metadata +278 -148
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +0 -390
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +0 -6
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +0 -391
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +0 -282
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +0 -9
- data/ext/ddtrace_profiling_native_extension/helpers.h +0 -12
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +0 -14
- data/ext/ddtrace_profiling_native_extension/profiling.c +0 -36
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -25
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +0 -65
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +0 -422
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +0 -38
- data/lib/datadog/appsec/assets/waf_rules/risky.json +0 -1499
- data/lib/datadog/appsec/contrib/configuration/settings.rb +0 -20
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +0 -22
- data/lib/datadog/appsec/contrib/rack/request.rb +0 -58
- data/lib/datadog/appsec/contrib/rack/response.rb +0 -24
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +0 -22
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +0 -22
- 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 -22
- 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 -49
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
- data/lib/datadog/ci/contrib/rspec/example.rb +0 -70
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -21
- data/lib/datadog/ci/contrib/rspec/integration.rb +0 -50
- data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
- data/lib/datadog/ci/ext/app_types.rb +0 -11
- data/lib/datadog/ci/ext/environment.rb +0 -505
- data/lib/datadog/ci/ext/settings.rb +0 -12
- data/lib/datadog/ci/ext/test.rb +0 -37
- data/lib/datadog/ci/extensions.rb +0 -19
- data/lib/datadog/ci/flush.rb +0 -38
- data/lib/datadog/ci/test.rb +0 -83
- 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/client.rb +0 -79
- data/lib/datadog/core/telemetry/collector.rb +0 -234
- data/lib/datadog/core/telemetry/heartbeat.rb +0 -37
- data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
- data/lib/datadog/core/telemetry/v1/application.rb +0 -86
- data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
- data/lib/datadog/core/telemetry/v1/dependency.rb +0 -36
- data/lib/datadog/core/telemetry/v1/host.rb +0 -51
- data/lib/datadog/core/telemetry/v1/integration.rb +0 -58
- data/lib/datadog/core/telemetry/v1/product.rb +0 -28
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -100
- data/lib/datadog/core/utils/object_set.rb +0 -43
- data/lib/datadog/core/utils/string_table.rb +0 -49
- data/lib/datadog/profiling/backtrace_location.rb +0 -34
- data/lib/datadog/profiling/buffer.rb +0 -43
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +0 -27
- data/lib/datadog/profiling/collectors/old_stack.rb +0 -298
- data/lib/datadog/profiling/encoding/profile.rb +0 -43
- data/lib/datadog/profiling/event.rb +0 -15
- data/lib/datadog/profiling/events/stack.rb +0 -82
- data/lib/datadog/profiling/old_ext.rb +0 -42
- data/lib/datadog/profiling/old_recorder.rb +0 -101
- data/lib/datadog/profiling/pprof/builder.rb +0 -127
- data/lib/datadog/profiling/pprof/converter.rb +0 -104
- 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 -83
- data/lib/datadog/profiling/pprof/stack_sample.rb +0 -141
- data/lib/datadog/profiling/pprof/string_table.rb +0 -12
- data/lib/datadog/profiling/pprof/template.rb +0 -120
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -45
- data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -47
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -85
- data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
- data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
- data/lib/datadog/profiling/transport/http/api.rb +0 -45
- data/lib/datadog/profiling/transport/http/builder.rb +0 -30
- data/lib/datadog/profiling/transport/http/client.rb +0 -37
- data/lib/datadog/profiling/transport/http/response.rb +0 -21
- data/lib/datadog/profiling/transport/http.rb +0 -118
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
- data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
- data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -52
- data/lib/datadog/tracing/distributed/headers/parser.rb +0 -37
- data/lib/datadog/tracing/distributed/metadata/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/metadata/b3_single.rb +0 -66
- data/lib/datadog/tracing/distributed/metadata/datadog.rb +0 -73
- data/lib/datadog/tracing/distributed/metadata/parser.rb +0 -34
- data/lib/datadog/tracing/propagation/grpc.rb +0 -98
- data/lib/ddtrace/transport/http/adapters/net.rb +0 -158
- data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
- data/lib/ddtrace/transport/http/adapters/test.rb +0 -87
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -79
- 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 -41
- data/lib/ddtrace/transport/http/builder.rb +0 -178
- data/lib/ddtrace/transport/http/client.rb +0 -54
- 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 -45
- data/lib/ddtrace/transport/http/traces.rb +0 -146
- data/lib/ddtrace/transport/http.rb +0 -121
- data/lib/ddtrace/transport/io/client.rb +0 -87
- data/lib/ddtrace/transport/io/response.rb +0 -25
- data/lib/ddtrace/transport/io/traces.rb +0 -101
- data/lib/ddtrace/transport/io.rb +0 -28
- data/lib/ddtrace/transport/parcel.rb +0 -22
- data/lib/ddtrace/transport/request.rb +0 -15
- data/lib/ddtrace/transport/response.rb +0 -62
- data/lib/ddtrace/transport/serializable_trace.rb +0 -118
- data/lib/ddtrace/transport/statistics.rb +0 -75
- data/lib/ddtrace/transport/trace_formatter.rb +0 -187
- data/lib/ddtrace/transport/traces.rb +0 -216
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# typed: false
|
|
2
|
-
|
|
3
1
|
require_relative '../../core/utils/only_once'
|
|
4
2
|
require_relative '../ext/forking'
|
|
5
3
|
|
|
@@ -13,7 +11,6 @@ module Datadog
|
|
|
13
11
|
def run
|
|
14
12
|
ACTIVATE_EXTENSIONS_ONLY_ONCE.run do
|
|
15
13
|
begin
|
|
16
|
-
check_if_cpu_time_profiling_is_supported
|
|
17
14
|
activate_forking_extensions
|
|
18
15
|
setup_at_fork_hooks
|
|
19
16
|
rescue StandardError, ScriptError => e
|
|
@@ -40,28 +37,10 @@ module Datadog
|
|
|
40
37
|
end
|
|
41
38
|
end
|
|
42
39
|
|
|
43
|
-
def check_if_cpu_time_profiling_is_supported
|
|
44
|
-
unsupported = cpu_time_profiling_unsupported_reason
|
|
45
|
-
|
|
46
|
-
if unsupported
|
|
47
|
-
Datadog.logger.info do
|
|
48
|
-
'CPU time profiling skipped because native CPU time is not supported: ' \
|
|
49
|
-
"#{unsupported}. Profiles containing 'Wall time' data will still be reported."
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
40
|
def setup_at_fork_hooks
|
|
55
41
|
if Process.respond_to?(:at_fork)
|
|
56
42
|
Process.at_fork(:child) do
|
|
57
43
|
begin
|
|
58
|
-
# When Ruby forks, clock IDs for each of the threads
|
|
59
|
-
# will change. We can only update these IDs from the
|
|
60
|
-
# execution context of the thread that owns it.
|
|
61
|
-
# This hook will update the IDs for the main thread
|
|
62
|
-
# after a fork occurs.
|
|
63
|
-
Thread.current.send(:update_native_ids) if Thread.current.respond_to?(:update_native_ids, true)
|
|
64
|
-
|
|
65
44
|
# Restart profiler, if enabled
|
|
66
45
|
Profiling.start_if_enabled
|
|
67
46
|
rescue StandardError => e
|
|
@@ -73,20 +52,6 @@ module Datadog
|
|
|
73
52
|
end
|
|
74
53
|
end
|
|
75
54
|
end
|
|
76
|
-
|
|
77
|
-
def cpu_time_profiling_unsupported_reason
|
|
78
|
-
# NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons
|
|
79
|
-
|
|
80
|
-
if RUBY_ENGINE == 'jruby'
|
|
81
|
-
'JRuby is not supported'
|
|
82
|
-
elsif RUBY_PLATFORM.include?('darwin')
|
|
83
|
-
'Feature requires Linux; macOS is not supported'
|
|
84
|
-
elsif RUBY_PLATFORM =~ /(mswin|mingw)/
|
|
85
|
-
'Feature requires Linux; Windows is not supported'
|
|
86
|
-
elsif !RUBY_PLATFORM.include?('linux')
|
|
87
|
-
"Feature requires Linux; #{RUBY_PLATFORM} is not supported"
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
55
|
end
|
|
91
56
|
end
|
|
92
57
|
end
|
data/lib/datadog/profiling.rb
CHANGED
|
@@ -1,28 +1,19 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
1
|
require_relative 'core'
|
|
4
2
|
require_relative 'core/environment/variable_helpers'
|
|
5
3
|
require_relative 'core/utils/only_once'
|
|
6
4
|
|
|
7
5
|
module Datadog
|
|
8
|
-
#
|
|
9
|
-
module Profiling
|
|
10
|
-
GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
11
|
-
private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
12
|
-
|
|
6
|
+
# Datadog Continuous Profiler implementation: https://docs.datadoghq.com/profiler/
|
|
7
|
+
module Profiling
|
|
13
8
|
def self.supported?
|
|
14
9
|
unsupported_reason.nil?
|
|
15
10
|
end
|
|
16
11
|
|
|
17
12
|
def self.unsupported_reason
|
|
18
13
|
# NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users
|
|
19
|
-
# first that they can't use this on JRuby before telling them that
|
|
14
|
+
# first that they can't use this on JRuby before telling them that something else failed
|
|
20
15
|
|
|
21
|
-
native_library_compilation_skipped? ||
|
|
22
|
-
native_library_failed_to_load? ||
|
|
23
|
-
protobuf_gem_unavailable? ||
|
|
24
|
-
protobuf_version_unsupported? ||
|
|
25
|
-
protobuf_failed_to_load?
|
|
16
|
+
native_library_compilation_skipped? || native_library_failed_to_load?
|
|
26
17
|
end
|
|
27
18
|
|
|
28
19
|
# Starts the profiler, if the profiler is supported by in
|
|
@@ -41,6 +32,54 @@ module Datadog
|
|
|
41
32
|
!!profiler
|
|
42
33
|
end
|
|
43
34
|
|
|
35
|
+
# Returns an ever-increasing counter of the number of allocations observed by the profiler in this thread.
|
|
36
|
+
#
|
|
37
|
+
# Note 1: This counter may not start from zero on new threads. It should only be used to measure how many
|
|
38
|
+
# allocations have happened between two calls to this API:
|
|
39
|
+
# ```
|
|
40
|
+
# allocations_before = Datadog::Profiling.allocation_count
|
|
41
|
+
# do_some_work()
|
|
42
|
+
# allocations_after = Datadog::Profiling.allocation_count
|
|
43
|
+
# puts "Allocations during do_some_work: #{allocations_after - allocations_before}"
|
|
44
|
+
# ```
|
|
45
|
+
# (This is similar to some OS-based time representations.)
|
|
46
|
+
#
|
|
47
|
+
# Note 2: All fibers in the same thread will share the same counter values.
|
|
48
|
+
#
|
|
49
|
+
# Only available when the profiler is running, and allocation-related features are not disabled via configuration.
|
|
50
|
+
#
|
|
51
|
+
# @return [Integer] number of allocations observed in the current thread.
|
|
52
|
+
# @return [nil] when not available.
|
|
53
|
+
# @public_api
|
|
54
|
+
def self.allocation_count
|
|
55
|
+
# This no-op implementation is used when profiling failed to load.
|
|
56
|
+
# It gets replaced inside #replace_noop_allocation_count.
|
|
57
|
+
nil
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.enabled?
|
|
61
|
+
profiler = Datadog.send(:components).profiler
|
|
62
|
+
# Use .send(...) to avoid exposing the attr_reader as an API to the outside
|
|
63
|
+
!!(profiler.send(:scheduler).running? if profiler)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def self.wait_until_running(timeout_seconds: 5)
|
|
67
|
+
profiler = Datadog.send(:components).profiler
|
|
68
|
+
if profiler
|
|
69
|
+
# Use .send(...) to avoid exposing the attr_reader as an API to the outside
|
|
70
|
+
worker = profiler.send(:worker)
|
|
71
|
+
worker.wait_until_running(timeout_seconds: timeout_seconds)
|
|
72
|
+
else
|
|
73
|
+
raise 'Profiler not enabled or available'
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private_class_method def self.replace_noop_allocation_count
|
|
78
|
+
def self.allocation_count # rubocop:disable Lint/NestedMethodDefinition (On purpose!)
|
|
79
|
+
Datadog::Profiling::Collectors::CpuAndWallTimeWorker._native_allocation_count
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
44
83
|
private_class_method def self.native_library_compilation_skipped?
|
|
45
84
|
skipped_reason = try_reading_skipped_reason_file
|
|
46
85
|
|
|
@@ -49,7 +88,7 @@ module Datadog
|
|
|
49
88
|
|
|
50
89
|
private_class_method def self.try_reading_skipped_reason_file(file_api = File)
|
|
51
90
|
# This file, if it exists, is recorded by extconf.rb during compilation of the native extension
|
|
52
|
-
skipped_reason_file = "#{__dir__}/../../ext/
|
|
91
|
+
skipped_reason_file = "#{__dir__}/../../ext/datadog_profiling_native_extension/skipped_reason.txt"
|
|
53
92
|
|
|
54
93
|
begin
|
|
55
94
|
return unless file_api.exist?(skipped_reason_file)
|
|
@@ -61,68 +100,13 @@ module Datadog
|
|
|
61
100
|
end
|
|
62
101
|
end
|
|
63
102
|
|
|
64
|
-
private_class_method def self.protobuf_gem_unavailable?
|
|
65
|
-
# NOTE: On environments where protobuf is already loaded, we skip the check. This allows us to support environments
|
|
66
|
-
# where no Gem.loaded_version is NOT available but customers are able to load protobuf; see for instance
|
|
67
|
-
# https://github.com/teamcapybara/capybara/commit/caf3bcd7664f4f2691d0ca9ef3be9a2a954fecfb
|
|
68
|
-
if !defined?(::Google::Protobuf) && Gem.loaded_specs['google-protobuf'].nil?
|
|
69
|
-
"Missing google-protobuf dependency; please add `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
private_class_method def self.protobuf_version_unsupported?
|
|
74
|
-
# See above for why we skip the check when protobuf is already loaded; note that when protobuf was already loaded
|
|
75
|
-
# we skip the version check to avoid the call to Gem.loaded_specs. Unfortunately, protobuf does not seem to
|
|
76
|
-
# expose the gem version constant elsewhere, so in that setup we are not able to check the version.
|
|
77
|
-
if !defined?(::Google::Protobuf) && Gem.loaded_specs['google-protobuf'].version < GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
78
|
-
'Your google-protobuf is too old; ensure that you have google-protobuf >= 3.0 by ' \
|
|
79
|
-
"adding `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
private_class_method def self.protobuf_failed_to_load?
|
|
84
|
-
unless protobuf_loaded_successfully?
|
|
85
|
-
'There was an error loading the google-protobuf library; see previous warning message for details'
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# The `google-protobuf` gem depends on a native component, and its creators helpfully tried to provide precompiled
|
|
90
|
-
# versions of this extension on rubygems.org.
|
|
91
|
-
#
|
|
92
|
-
# Unfortunately, for a long time, the supported Ruby versions metadata on these precompiled versions of the extension
|
|
93
|
-
# was not correctly set. (This is fixed in newer versions -- but not all Ruby versions we want to support can use
|
|
94
|
-
# these.)
|
|
95
|
-
#
|
|
96
|
-
# Thus, the gem can still be installed, but can be in a broken state. To avoid breaking customer applications, we
|
|
97
|
-
# use this helper to load it and gracefully handle failures.
|
|
98
|
-
private_class_method def self.protobuf_loaded_successfully?
|
|
99
|
-
return @protobuf_loaded if defined?(@protobuf_loaded)
|
|
100
|
-
|
|
101
|
-
begin
|
|
102
|
-
require 'google/protobuf'
|
|
103
|
-
@protobuf_loaded = true
|
|
104
|
-
rescue LoadError => e
|
|
105
|
-
# NOTE: We use Kernel#warn here because this code gets run BEFORE Datadog.logger is actually set up.
|
|
106
|
-
# In the future it'd be nice to shuffle the logger startup to happen first to avoid this special case.
|
|
107
|
-
Kernel.warn(
|
|
108
|
-
'[DDTRACE] Error while loading google-protobuf gem. ' \
|
|
109
|
-
"Cause: '#{e.class.name} #{e.message}' Location: '#{Array(e.backtrace).first}'. " \
|
|
110
|
-
'This can happen when google-protobuf is missing its native components. ' \
|
|
111
|
-
'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
|
|
112
|
-
'`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
|
|
113
|
-
'If the error persists, please contact Datadog support at <https://docs.datadoghq.com/help/>.'
|
|
114
|
-
)
|
|
115
|
-
@protobuf_loaded = false
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
103
|
private_class_method def self.native_library_failed_to_load?
|
|
120
104
|
success, exception = try_loading_native_library
|
|
121
105
|
|
|
122
106
|
unless success
|
|
123
107
|
if exception
|
|
124
108
|
'There was an error loading the profiling native extension due to ' \
|
|
125
|
-
"'#{exception.class.name} #{exception.message}' at '#{exception.backtrace.first}'"
|
|
109
|
+
"'#{exception.class.name} #{exception.message}' at '#{Array(exception.backtrace).first}'"
|
|
126
110
|
else
|
|
127
111
|
'The profiling native extension did not load correctly. ' \
|
|
128
112
|
'For help solving this issue, please contact Datadog support at <https://docs.datadoghq.com/help/>.' \
|
|
@@ -142,27 +126,33 @@ module Datadog
|
|
|
142
126
|
end
|
|
143
127
|
end
|
|
144
128
|
|
|
129
|
+
# All requires for the profiler should be directly added here; and everything should be loaded eagerly.
|
|
130
|
+
# (Currently there's a leftovers that need to be cleaned up, but we should avoid other exceptions.)
|
|
131
|
+
#
|
|
132
|
+
# All of the profiler should be loaded and ready to go when this method returns `true`.
|
|
145
133
|
private_class_method def self.load_profiling
|
|
146
134
|
return false unless supported?
|
|
147
135
|
|
|
148
136
|
require_relative 'profiling/ext/forking'
|
|
137
|
+
require_relative 'profiling/collectors/info'
|
|
149
138
|
require_relative 'profiling/collectors/code_provenance'
|
|
150
|
-
require_relative 'profiling/collectors/cpu_and_wall_time'
|
|
151
139
|
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
|
152
|
-
require_relative 'profiling/collectors/
|
|
140
|
+
require_relative 'profiling/collectors/dynamic_sampling_rate'
|
|
141
|
+
require_relative 'profiling/collectors/idle_sampling_helper'
|
|
153
142
|
require_relative 'profiling/collectors/stack'
|
|
143
|
+
require_relative 'profiling/collectors/thread_context'
|
|
154
144
|
require_relative 'profiling/stack_recorder'
|
|
155
|
-
require_relative 'profiling/old_recorder'
|
|
156
145
|
require_relative 'profiling/exporter'
|
|
146
|
+
require_relative 'profiling/flush'
|
|
157
147
|
require_relative 'profiling/scheduler'
|
|
158
148
|
require_relative 'profiling/tasks/setup'
|
|
159
149
|
require_relative 'profiling/profiler'
|
|
160
150
|
require_relative 'profiling/native_extension'
|
|
161
|
-
require_relative 'profiling/trace_identifiers/helper'
|
|
162
|
-
require_relative 'profiling/pprof/pprof_pb'
|
|
163
151
|
require_relative 'profiling/tag_builder'
|
|
164
152
|
require_relative 'profiling/http_transport'
|
|
165
153
|
|
|
154
|
+
replace_noop_allocation_count
|
|
155
|
+
|
|
166
156
|
true
|
|
167
157
|
end
|
|
168
158
|
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../core'
|
|
4
1
|
require_relative '../core/environment/ext'
|
|
5
2
|
require_relative '../core/buffer/thread_safe'
|
|
6
3
|
require_relative '../core/buffer/cruby'
|
|
@@ -10,8 +7,6 @@ module Datadog
|
|
|
10
7
|
module Tracing
|
|
11
8
|
# Health metrics for trace buffers.
|
|
12
9
|
module MeasuredBuffer
|
|
13
|
-
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
14
|
-
|
|
15
10
|
def initialize(*_)
|
|
16
11
|
super
|
|
17
12
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../core/configuration'
|
|
4
|
+
require_relative '../core/utils/network'
|
|
5
|
+
require_relative 'metadata/ext'
|
|
6
|
+
require_relative 'span'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Tracing
|
|
10
|
+
# Common functions for supporting the `http.client_ip` span attribute.
|
|
11
|
+
module ClientIp
|
|
12
|
+
class << self
|
|
13
|
+
# Sets the `http.client_ip` tag on the given span.
|
|
14
|
+
#
|
|
15
|
+
# This function respects the user's settings: if they disable the client IP tagging,
|
|
16
|
+
# or provide a different IP header name.
|
|
17
|
+
#
|
|
18
|
+
# @param [Span] span The span that's associated with the request.
|
|
19
|
+
# @param [HeaderCollection, #get, nil] headers A collection with the request headers.
|
|
20
|
+
# @param [String, nil] remote_ip The remote IP the request associated with the span is sent to.
|
|
21
|
+
def set_client_ip_tag(span, headers: nil, remote_ip: nil)
|
|
22
|
+
return unless configuration.enabled
|
|
23
|
+
|
|
24
|
+
set_client_ip_tag!(span, headers: headers, remote_ip: remote_ip)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Forcefully sets the `http.client_ip` tag on the given span.
|
|
28
|
+
#
|
|
29
|
+
# This function ignores the user's `enabled` setting.
|
|
30
|
+
#
|
|
31
|
+
# @param [Span] span The span that's associated with the request.
|
|
32
|
+
# @param [HeaderCollection, #get, nil] headers A collection with the request headers.
|
|
33
|
+
# @param [String, nil] remote_ip The remote IP the request associated with the span is sent to.
|
|
34
|
+
def set_client_ip_tag!(span, headers: nil, remote_ip: nil)
|
|
35
|
+
ip = extract_client_ip(headers, remote_ip)
|
|
36
|
+
|
|
37
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_CLIENT_IP, ip) if ip
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def extract_client_ip(headers, remote_ip)
|
|
41
|
+
if headers && configuration.header_name
|
|
42
|
+
return Datadog::Core::Utils::Network.stripped_ip_from_request_headers(
|
|
43
|
+
headers,
|
|
44
|
+
ip_headers_to_check: Array(configuration.header_name)
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
ip_from_headers = Datadog::Core::Utils::Network.stripped_ip_from_request_headers(headers) if headers
|
|
49
|
+
|
|
50
|
+
ip_from_headers || Datadog::Core::Utils::Network.stripped_ip(remote_ip)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def configuration
|
|
56
|
+
Datadog.configuration.tracing.client_ip
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'tracer'
|
|
4
|
+
require_relative 'configuration/agent_settings_resolver'
|
|
5
|
+
require_relative 'flush'
|
|
6
|
+
require_relative 'sync_writer'
|
|
7
|
+
require_relative 'sampling/span/rule_parser'
|
|
8
|
+
require_relative 'sampling/span/sampler'
|
|
9
|
+
require_relative 'diagnostics/environment_logger'
|
|
10
|
+
|
|
11
|
+
module Datadog
|
|
12
|
+
module Tracing
|
|
13
|
+
# Tracing component
|
|
14
|
+
module Component
|
|
15
|
+
# Methods that interact with component instance fields.
|
|
16
|
+
module InstanceMethods
|
|
17
|
+
# Hot-swaps with a new sampler.
|
|
18
|
+
# This operation acquires the Components lock to ensure
|
|
19
|
+
# there is no concurrent modification of the sampler.
|
|
20
|
+
def reconfigure_live_sampler
|
|
21
|
+
sampler = self.class.build_sampler(Datadog.configuration)
|
|
22
|
+
Datadog.send(:safely_synchronize) { tracer.sampler.sampler = sampler }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def build_tracer(settings, logger:)
|
|
27
|
+
# If a custom tracer has been provided, use it instead.
|
|
28
|
+
# Ignore all other options (they should already be configured.)
|
|
29
|
+
tracer = settings.tracing.instance
|
|
30
|
+
return tracer unless tracer.nil?
|
|
31
|
+
|
|
32
|
+
agent_settings = Configuration::AgentSettingsResolver.call(settings, logger: logger)
|
|
33
|
+
|
|
34
|
+
# Apply test mode settings if test mode is activated
|
|
35
|
+
if settings.tracing.test_mode.enabled
|
|
36
|
+
trace_flush = build_test_mode_trace_flush(settings)
|
|
37
|
+
sampler = build_test_mode_sampler
|
|
38
|
+
writer = build_test_mode_writer(settings, agent_settings)
|
|
39
|
+
else
|
|
40
|
+
trace_flush = build_trace_flush(settings)
|
|
41
|
+
sampler = build_sampler(settings)
|
|
42
|
+
writer = build_writer(settings, agent_settings)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# The sampler instance is wrapped in a delegator,
|
|
46
|
+
# so dynamic instrumentation can hot-swap it.
|
|
47
|
+
# This prevents full tracer reinitialization on sampling changes.
|
|
48
|
+
sampler_delegator = SamplerDelegatorComponent.new(sampler)
|
|
49
|
+
|
|
50
|
+
subscribe_to_writer_events!(writer, sampler_delegator, settings.tracing.test_mode.enabled)
|
|
51
|
+
|
|
52
|
+
Tracing::Tracer.new(
|
|
53
|
+
default_service: settings.service,
|
|
54
|
+
enabled: settings.tracing.enabled,
|
|
55
|
+
trace_flush: trace_flush,
|
|
56
|
+
sampler: sampler_delegator,
|
|
57
|
+
span_sampler: build_span_sampler(settings),
|
|
58
|
+
writer: writer,
|
|
59
|
+
tags: build_tracer_tags(settings),
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def build_trace_flush(settings)
|
|
64
|
+
if settings.tracing.partial_flush.enabled
|
|
65
|
+
Tracing::Flush::Partial.new(
|
|
66
|
+
min_spans_before_partial_flush: settings.tracing.partial_flush.min_spans_threshold
|
|
67
|
+
)
|
|
68
|
+
else
|
|
69
|
+
Tracing::Flush::Finished.new
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# TODO: Sampler should be a top-level component.
|
|
74
|
+
# It is currently part of the Tracer initialization
|
|
75
|
+
# process, but can take a variety of options (including
|
|
76
|
+
# a fully custom instance) that makes the Tracer
|
|
77
|
+
# initialization process complex.
|
|
78
|
+
def build_sampler(settings)
|
|
79
|
+
if (sampler = settings.tracing.sampler)
|
|
80
|
+
if settings.tracing.priority_sampling == false
|
|
81
|
+
sampler
|
|
82
|
+
else
|
|
83
|
+
ensure_priority_sampling(sampler, settings)
|
|
84
|
+
end
|
|
85
|
+
elsif (rules = settings.tracing.sampling.rules)
|
|
86
|
+
post_sampler = Tracing::Sampling::RuleSampler.parse(
|
|
87
|
+
rules,
|
|
88
|
+
settings.tracing.sampling.rate_limit,
|
|
89
|
+
settings.tracing.sampling.default_rate
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
post_sampler ||= # Fallback RuleSampler in case `rules` parsing fails
|
|
93
|
+
Tracing::Sampling::RuleSampler.new(
|
|
94
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
95
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
99
|
+
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
100
|
+
post_sampler: post_sampler
|
|
101
|
+
)
|
|
102
|
+
elsif settings.tracing.priority_sampling == false
|
|
103
|
+
Tracing::Sampling::RuleSampler.new(
|
|
104
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
105
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
106
|
+
)
|
|
107
|
+
else
|
|
108
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
109
|
+
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
110
|
+
post_sampler: Tracing::Sampling::RuleSampler.new(
|
|
111
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
112
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def ensure_priority_sampling(sampler, settings)
|
|
119
|
+
if sampler.is_a?(Tracing::Sampling::PrioritySampler)
|
|
120
|
+
sampler
|
|
121
|
+
else
|
|
122
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
123
|
+
base_sampler: sampler,
|
|
124
|
+
post_sampler: Tracing::Sampling::RuleSampler.new(
|
|
125
|
+
rate_limit: settings.tracing.sampling.rate_limit,
|
|
126
|
+
default_sample_rate: settings.tracing.sampling.default_rate
|
|
127
|
+
)
|
|
128
|
+
)
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# TODO: Writer should be a top-level component.
|
|
133
|
+
# It is currently part of the Tracer initialization
|
|
134
|
+
# process, but can take a variety of options (including
|
|
135
|
+
# a fully custom instance) that makes the Tracer
|
|
136
|
+
# initialization process complex.
|
|
137
|
+
def build_writer(settings, agent_settings, options = settings.tracing.writer_options)
|
|
138
|
+
if (writer = settings.tracing.writer)
|
|
139
|
+
return writer
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
Tracing::Writer.new(agent_settings: agent_settings, **options)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def subscribe_to_writer_events!(writer, sampler_delegator, test_mode)
|
|
146
|
+
return unless writer.respond_to?(:events) # Check if it's a custom, external writer
|
|
147
|
+
|
|
148
|
+
writer.events.after_send.subscribe(&WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK)
|
|
149
|
+
|
|
150
|
+
# DEV: We need to ignore priority sampling updates coming from the agent in test mode
|
|
151
|
+
# because test mode wants to *unconditionally* sample all traces.
|
|
152
|
+
#
|
|
153
|
+
# This can cause trace metrics to be overestimated, but that's a trade-off we take
|
|
154
|
+
# here to achieve 100% sampling rate.
|
|
155
|
+
return if test_mode
|
|
156
|
+
|
|
157
|
+
writer.events.after_send.subscribe(&writer_update_priority_sampler_rates_callback(sampler_delegator))
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
WRITER_RECORD_ENVIRONMENT_INFORMATION_CALLBACK = lambda do |_, responses|
|
|
161
|
+
Tracing::Diagnostics::EnvironmentLogger.collect_and_log!(responses: responses)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Create new lambda for writer callback,
|
|
165
|
+
# capture the current sampler in the callback closure.
|
|
166
|
+
def writer_update_priority_sampler_rates_callback(sampler)
|
|
167
|
+
lambda do |_, responses|
|
|
168
|
+
response = responses.last
|
|
169
|
+
|
|
170
|
+
next unless response && !response.internal_error? && response.service_rates
|
|
171
|
+
|
|
172
|
+
sampler.update(response.service_rates, decision: Tracing::Sampling::Ext::Decision::AGENT_RATE)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def build_span_sampler(settings)
|
|
177
|
+
rules = Tracing::Sampling::Span::RuleParser.parse_json(settings.tracing.sampling.span_rules)
|
|
178
|
+
Tracing::Sampling::Span::Sampler.new(rules || [])
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Sampler wrapper component, to allow for hot-swapping
|
|
182
|
+
# the sampler instance used by the tracer.
|
|
183
|
+
# Swapping samplers happens during Dynamic Configuration.
|
|
184
|
+
class SamplerDelegatorComponent
|
|
185
|
+
attr_accessor :sampler
|
|
186
|
+
|
|
187
|
+
def initialize(sampler)
|
|
188
|
+
@sampler = sampler
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def sample!(trace)
|
|
192
|
+
@sampler.sample!(trace)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def update(*args, **kwargs)
|
|
196
|
+
return unless @sampler.respond_to?(:update)
|
|
197
|
+
|
|
198
|
+
@sampler.update(*args, **kwargs)
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
private
|
|
203
|
+
|
|
204
|
+
def build_tracer_tags(settings)
|
|
205
|
+
settings.tags.dup.tap do |tags|
|
|
206
|
+
tags[Core::Environment::Ext::TAG_ENV] = settings.env unless settings.env.nil?
|
|
207
|
+
tags[Core::Environment::Ext::TAG_VERSION] = settings.version unless settings.version.nil?
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def build_test_mode_trace_flush(settings)
|
|
212
|
+
# If context flush behavior is provided, use it instead.
|
|
213
|
+
settings.tracing.test_mode.trace_flush || build_trace_flush(settings)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def build_test_mode_sampler
|
|
217
|
+
# Do not sample any spans for tests; all must be preserved.
|
|
218
|
+
# Set priority sampler to ensure the agent doesn't drop any traces.
|
|
219
|
+
Tracing::Sampling::PrioritySampler.new(
|
|
220
|
+
base_sampler: Tracing::Sampling::AllSampler.new,
|
|
221
|
+
post_sampler: Tracing::Sampling::AllSampler.new
|
|
222
|
+
)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def build_test_mode_writer(settings, agent_settings)
|
|
226
|
+
writer_options = settings.tracing.test_mode.writer_options || {}
|
|
227
|
+
|
|
228
|
+
return build_writer(settings, agent_settings, writer_options) if settings.tracing.test_mode.async
|
|
229
|
+
|
|
230
|
+
# Flush traces synchronously, to guarantee they are written.
|
|
231
|
+
Tracing::SyncWriter.new(agent_settings: agent_settings, **writer_options)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../core/configuration/agent_settings_resolver'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Configuration
|
|
8
|
+
# This class encapsulates any tracing specific agent settings
|
|
9
|
+
class AgentSettingsResolver < Datadog::Core::Configuration::AgentSettingsResolver
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Configuration
|
|
6
|
+
module Dynamic
|
|
7
|
+
# Maps a remote dynamic configuration to a location configuration option.
|
|
8
|
+
class Option
|
|
9
|
+
attr_reader :name, :env_var
|
|
10
|
+
|
|
11
|
+
# @param name [String] dynamic configuration option name. This must match the remote configuration payload.
|
|
12
|
+
def initialize(name, env_var)
|
|
13
|
+
@name = name
|
|
14
|
+
@env_var = env_var
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Reconfigures the provided option, setting its value to `value`.
|
|
18
|
+
#
|
|
19
|
+
# @param value [Object,nil] the new value for this option
|
|
20
|
+
def call(value)
|
|
21
|
+
raise NotImplementedError
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# A dynamic configuration option that can directly mapped to a `Datadog.configuration`
|
|
26
|
+
# option and changing such option is the only requirement to apply the configuration locally.
|
|
27
|
+
class SimpleOption < Option
|
|
28
|
+
# @param name [String] dynamic configuration option name. This must match the remote configuration payload.
|
|
29
|
+
# @param env_var [String] the canonical environment variable that represents this option.
|
|
30
|
+
# This is used for telemetry reporting.
|
|
31
|
+
# @param setting_key [Symbol] option from `Datadog.configuration.tracing` that will be modified
|
|
32
|
+
#
|
|
33
|
+
# DEV: `Datadog.configuration` cannot be an argument default value because
|
|
34
|
+
# DEV: it is dynamic. Also, it is not yet declared when this method is parsed by Ruby.
|
|
35
|
+
def initialize(name, env_var, setting_key)
|
|
36
|
+
super(name, env_var)
|
|
37
|
+
@setting_key = setting_key
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Reconfigures the provided option, setting its value to `value`.
|
|
41
|
+
#
|
|
42
|
+
# @param value [Object,nil] the new value for this option
|
|
43
|
+
def call(value)
|
|
44
|
+
Datadog.logger.debug { "Reconfigured tracer option `#{@setting_key}` with value `#{value}`" }
|
|
45
|
+
|
|
46
|
+
if value.nil?
|
|
47
|
+
# Restore the local configuration value
|
|
48
|
+
configuration_object.unset_option(
|
|
49
|
+
@setting_key,
|
|
50
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
51
|
+
)
|
|
52
|
+
else
|
|
53
|
+
configuration_object.set_option(
|
|
54
|
+
@setting_key,
|
|
55
|
+
value,
|
|
56
|
+
precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
protected
|
|
62
|
+
|
|
63
|
+
# The base where `setting_key` will apply
|
|
64
|
+
def configuration_object
|
|
65
|
+
Datadog.configuration.tracing
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|