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
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <ruby/thread.h>
|
|
3
|
+
#include <errno.h>
|
|
4
|
+
#ifdef HAVE_MALLOC_STATS
|
|
5
|
+
#include <malloc.h>
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
#include "clock_id.h"
|
|
9
|
+
#include "helpers.h"
|
|
10
|
+
#include "private_vm_api_access.h"
|
|
11
|
+
#include "ruby_helpers.h"
|
|
12
|
+
#include "setup_signal_handler.h"
|
|
13
|
+
#include "time_helpers.h"
|
|
14
|
+
|
|
15
|
+
// Each class/module here is implemented in their separate file
|
|
16
|
+
void collectors_cpu_and_wall_time_worker_init(VALUE profiling_module);
|
|
17
|
+
void collectors_discrete_dynamic_sampler_init(VALUE profiling_module);
|
|
18
|
+
void collectors_dynamic_sampling_rate_init(VALUE profiling_module);
|
|
19
|
+
void collectors_idle_sampling_helper_init(VALUE profiling_module);
|
|
20
|
+
void collectors_stack_init(VALUE profiling_module);
|
|
21
|
+
void collectors_thread_context_init(VALUE profiling_module);
|
|
22
|
+
void http_transport_init(VALUE profiling_module);
|
|
23
|
+
void stack_recorder_init(VALUE profiling_module);
|
|
24
|
+
|
|
25
|
+
static VALUE native_working_p(VALUE self);
|
|
26
|
+
static VALUE _native_grab_gvl_and_raise(DDTRACE_UNUSED VALUE _self, VALUE exception_class, VALUE test_message, VALUE test_message_arg, VALUE release_gvl);
|
|
27
|
+
static void *trigger_grab_gvl_and_raise(void *trigger_args);
|
|
28
|
+
static VALUE _native_grab_gvl_and_raise_syserr(DDTRACE_UNUSED VALUE _self, VALUE syserr_errno, VALUE test_message, VALUE test_message_arg, VALUE release_gvl);
|
|
29
|
+
static void *trigger_grab_gvl_and_raise_syserr(void *trigger_args);
|
|
30
|
+
static VALUE _native_ddtrace_rb_ractor_main_p(DDTRACE_UNUSED VALUE _self);
|
|
31
|
+
static VALUE _native_is_current_thread_holding_the_gvl(DDTRACE_UNUSED VALUE _self);
|
|
32
|
+
static VALUE _native_release_gvl_and_call_is_current_thread_holding_the_gvl(DDTRACE_UNUSED VALUE _self);
|
|
33
|
+
static void *testing_is_current_thread_holding_the_gvl(DDTRACE_UNUSED void *_unused);
|
|
34
|
+
static VALUE _native_install_holding_the_gvl_signal_handler(DDTRACE_UNUSED VALUE _self);
|
|
35
|
+
static void holding_the_gvl_signal_handler(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext);
|
|
36
|
+
static VALUE _native_trigger_holding_the_gvl_signal_handler_on(DDTRACE_UNUSED VALUE _self, VALUE background_thread);
|
|
37
|
+
static VALUE _native_enforce_success(DDTRACE_UNUSED VALUE _self, VALUE syserr_errno, VALUE with_gvl);
|
|
38
|
+
static void *trigger_enforce_success(void *trigger_args);
|
|
39
|
+
static VALUE _native_malloc_stats(DDTRACE_UNUSED VALUE _self);
|
|
40
|
+
|
|
41
|
+
void DDTRACE_EXPORT Init_datadog_profiling_native_extension(void) {
|
|
42
|
+
VALUE datadog_module = rb_define_module("Datadog");
|
|
43
|
+
VALUE profiling_module = rb_define_module_under(datadog_module, "Profiling");
|
|
44
|
+
VALUE native_extension_module = rb_define_module_under(profiling_module, "NativeExtension");
|
|
45
|
+
|
|
46
|
+
rb_define_singleton_method(native_extension_module, "native_working?", native_working_p, 0);
|
|
47
|
+
rb_funcall(native_extension_module, rb_intern("private_class_method"), 1, ID2SYM(rb_intern("native_working?")));
|
|
48
|
+
|
|
49
|
+
ruby_helpers_init();
|
|
50
|
+
collectors_cpu_and_wall_time_worker_init(profiling_module);
|
|
51
|
+
collectors_discrete_dynamic_sampler_init(profiling_module);
|
|
52
|
+
collectors_dynamic_sampling_rate_init(profiling_module);
|
|
53
|
+
collectors_idle_sampling_helper_init(profiling_module);
|
|
54
|
+
collectors_stack_init(profiling_module);
|
|
55
|
+
collectors_thread_context_init(profiling_module);
|
|
56
|
+
http_transport_init(profiling_module);
|
|
57
|
+
stack_recorder_init(profiling_module);
|
|
58
|
+
|
|
59
|
+
// Hosts methods used for testing the native code using RSpec
|
|
60
|
+
VALUE testing_module = rb_define_module_under(native_extension_module, "Testing");
|
|
61
|
+
rb_define_singleton_method(testing_module, "_native_grab_gvl_and_raise", _native_grab_gvl_and_raise, 4);
|
|
62
|
+
rb_define_singleton_method(testing_module, "_native_grab_gvl_and_raise_syserr", _native_grab_gvl_and_raise_syserr, 4);
|
|
63
|
+
rb_define_singleton_method(testing_module, "_native_ddtrace_rb_ractor_main_p", _native_ddtrace_rb_ractor_main_p, 0);
|
|
64
|
+
rb_define_singleton_method(testing_module, "_native_is_current_thread_holding_the_gvl", _native_is_current_thread_holding_the_gvl, 0);
|
|
65
|
+
rb_define_singleton_method(
|
|
66
|
+
testing_module,
|
|
67
|
+
"_native_release_gvl_and_call_is_current_thread_holding_the_gvl",
|
|
68
|
+
_native_release_gvl_and_call_is_current_thread_holding_the_gvl,
|
|
69
|
+
0
|
|
70
|
+
);
|
|
71
|
+
rb_define_singleton_method(testing_module, "_native_install_holding_the_gvl_signal_handler", _native_install_holding_the_gvl_signal_handler, 0);
|
|
72
|
+
rb_define_singleton_method(testing_module, "_native_trigger_holding_the_gvl_signal_handler_on", _native_trigger_holding_the_gvl_signal_handler_on, 1);
|
|
73
|
+
rb_define_singleton_method(testing_module, "_native_enforce_success", _native_enforce_success, 2);
|
|
74
|
+
rb_define_singleton_method(testing_module, "_native_malloc_stats", _native_malloc_stats, 0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static VALUE native_working_p(DDTRACE_UNUSED VALUE _self) {
|
|
78
|
+
self_test_clock_id();
|
|
79
|
+
self_test_mn_enabled();
|
|
80
|
+
|
|
81
|
+
return Qtrue;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
struct trigger_grab_gvl_and_raise_arguments {
|
|
85
|
+
VALUE exception_class;
|
|
86
|
+
char *test_message;
|
|
87
|
+
int test_message_arg;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
static VALUE _native_grab_gvl_and_raise(DDTRACE_UNUSED VALUE _self, VALUE exception_class, VALUE test_message, VALUE test_message_arg, VALUE release_gvl) {
|
|
91
|
+
ENFORCE_TYPE(test_message, T_STRING);
|
|
92
|
+
|
|
93
|
+
struct trigger_grab_gvl_and_raise_arguments args;
|
|
94
|
+
|
|
95
|
+
args.exception_class = exception_class;
|
|
96
|
+
args.test_message = StringValueCStr(test_message);
|
|
97
|
+
args.test_message_arg = test_message_arg != Qnil ? NUM2INT(test_message_arg) : -1;
|
|
98
|
+
|
|
99
|
+
if (RTEST(release_gvl)) {
|
|
100
|
+
rb_thread_call_without_gvl(trigger_grab_gvl_and_raise, &args, NULL, NULL);
|
|
101
|
+
} else {
|
|
102
|
+
grab_gvl_and_raise(args.exception_class, "%s", args.test_message);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
rb_raise(rb_eRuntimeError, "Failed to raise exception in _native_grab_gvl_and_raise; this should never happen");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static void *trigger_grab_gvl_and_raise(void *trigger_args) {
|
|
109
|
+
struct trigger_grab_gvl_and_raise_arguments *args = (struct trigger_grab_gvl_and_raise_arguments *) trigger_args;
|
|
110
|
+
|
|
111
|
+
if (args->test_message_arg >= 0) {
|
|
112
|
+
grab_gvl_and_raise(args->exception_class, "%s%d", args->test_message, args->test_message_arg);
|
|
113
|
+
} else {
|
|
114
|
+
grab_gvl_and_raise(args->exception_class, "%s", args->test_message);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return NULL;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
struct trigger_grab_gvl_and_raise_syserr_arguments {
|
|
121
|
+
int syserr_errno;
|
|
122
|
+
char *test_message;
|
|
123
|
+
int test_message_arg;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
static VALUE _native_grab_gvl_and_raise_syserr(DDTRACE_UNUSED VALUE _self, VALUE syserr_errno, VALUE test_message, VALUE test_message_arg, VALUE release_gvl) {
|
|
127
|
+
ENFORCE_TYPE(test_message, T_STRING);
|
|
128
|
+
|
|
129
|
+
struct trigger_grab_gvl_and_raise_syserr_arguments args;
|
|
130
|
+
|
|
131
|
+
args.syserr_errno = NUM2INT(syserr_errno);
|
|
132
|
+
args.test_message = StringValueCStr(test_message);
|
|
133
|
+
args.test_message_arg = test_message_arg != Qnil ? NUM2INT(test_message_arg) : -1;
|
|
134
|
+
|
|
135
|
+
if (RTEST(release_gvl)) {
|
|
136
|
+
rb_thread_call_without_gvl(trigger_grab_gvl_and_raise_syserr, &args, NULL, NULL);
|
|
137
|
+
} else {
|
|
138
|
+
grab_gvl_and_raise_syserr(args.syserr_errno, "%s", args.test_message);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
rb_raise(rb_eRuntimeError, "Failed to raise exception in _native_grab_gvl_and_raise_syserr; this should never happen");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
static void *trigger_grab_gvl_and_raise_syserr(void *trigger_args) {
|
|
145
|
+
struct trigger_grab_gvl_and_raise_syserr_arguments *args = (struct trigger_grab_gvl_and_raise_syserr_arguments *) trigger_args;
|
|
146
|
+
|
|
147
|
+
if (args->test_message_arg >= 0) {
|
|
148
|
+
grab_gvl_and_raise_syserr(args->syserr_errno, "%s%d", args->test_message, args->test_message_arg);
|
|
149
|
+
} else {
|
|
150
|
+
grab_gvl_and_raise_syserr(args->syserr_errno, "%s", args->test_message);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return NULL;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
static VALUE _native_ddtrace_rb_ractor_main_p(DDTRACE_UNUSED VALUE _self) {
|
|
157
|
+
return ddtrace_rb_ractor_main_p() ? Qtrue : Qfalse;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
static VALUE _native_is_current_thread_holding_the_gvl(DDTRACE_UNUSED VALUE _self) {
|
|
161
|
+
return ((bool) testing_is_current_thread_holding_the_gvl(NULL)) ? Qtrue : Qfalse;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static VALUE _native_release_gvl_and_call_is_current_thread_holding_the_gvl(DDTRACE_UNUSED VALUE _self) {
|
|
165
|
+
return ((bool) rb_thread_call_without_gvl(testing_is_current_thread_holding_the_gvl, NULL, NULL, NULL)) ? Qtrue : Qfalse;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
static void *testing_is_current_thread_holding_the_gvl(DDTRACE_UNUSED void *_unused) {
|
|
169
|
+
return (void *) is_current_thread_holding_the_gvl();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
static VALUE _native_install_holding_the_gvl_signal_handler(DDTRACE_UNUSED VALUE _self) {
|
|
173
|
+
install_sigprof_signal_handler(holding_the_gvl_signal_handler, "holding_the_gvl_signal_handler");
|
|
174
|
+
return Qtrue;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
static pthread_mutex_t holding_the_gvl_signal_handler_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
178
|
+
static pthread_cond_t holding_the_gvl_signal_handler_executed = PTHREAD_COND_INITIALIZER;
|
|
179
|
+
static VALUE holding_the_gvl_signal_handler_result[3];
|
|
180
|
+
|
|
181
|
+
// Ruby VM API that is exported but not present in the header files. Only used by holding_the_gvl_signal_handler below and SHOULD NOT
|
|
182
|
+
// be used in any other situation. See the comments on is_current_thread_holding_the_gvl for details.
|
|
183
|
+
int ruby_thread_has_gvl_p(void);
|
|
184
|
+
|
|
185
|
+
static void holding_the_gvl_signal_handler(DDTRACE_UNUSED int _signal, DDTRACE_UNUSED siginfo_t *_info, DDTRACE_UNUSED void *_ucontext) {
|
|
186
|
+
pthread_mutex_lock(&holding_the_gvl_signal_handler_mutex);
|
|
187
|
+
|
|
188
|
+
VALUE test_executed = Qtrue;
|
|
189
|
+
VALUE ruby_thread_has_gvl_p_result = ruby_thread_has_gvl_p() ? Qtrue : Qfalse;
|
|
190
|
+
VALUE is_current_thread_holding_the_gvl_result = is_current_thread_holding_the_gvl() ? Qtrue : Qfalse;
|
|
191
|
+
|
|
192
|
+
holding_the_gvl_signal_handler_result[0] = test_executed;
|
|
193
|
+
holding_the_gvl_signal_handler_result[1] = ruby_thread_has_gvl_p_result;
|
|
194
|
+
holding_the_gvl_signal_handler_result[2] = is_current_thread_holding_the_gvl_result;
|
|
195
|
+
|
|
196
|
+
pthread_cond_broadcast(&holding_the_gvl_signal_handler_executed);
|
|
197
|
+
pthread_mutex_unlock(&holding_the_gvl_signal_handler_mutex);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
static VALUE _native_trigger_holding_the_gvl_signal_handler_on(DDTRACE_UNUSED VALUE _self, VALUE background_thread) {
|
|
201
|
+
holding_the_gvl_signal_handler_result[0] = Qfalse;
|
|
202
|
+
holding_the_gvl_signal_handler_result[1] = Qfalse;
|
|
203
|
+
holding_the_gvl_signal_handler_result[2] = Qfalse;
|
|
204
|
+
|
|
205
|
+
rb_nativethread_id_t thread = pthread_id_for(background_thread);
|
|
206
|
+
|
|
207
|
+
ENFORCE_SUCCESS_GVL(pthread_mutex_lock(&holding_the_gvl_signal_handler_mutex));
|
|
208
|
+
|
|
209
|
+
// We keep trying for ~5 seconds (500 x 10ms) to try to avoid any flakiness if the test machine is a bit slow
|
|
210
|
+
for (int tries = 0; holding_the_gvl_signal_handler_result[0] == Qfalse && tries < 500; tries++) {
|
|
211
|
+
pthread_kill(thread, SIGPROF);
|
|
212
|
+
|
|
213
|
+
// pthread_cond_timedwait is simply awful -- the deadline is based on wall-clock using a struct timespec, so we need
|
|
214
|
+
// all of the below complexity just to tell it "timeout is 10ms". The % limit dance below is needed because the
|
|
215
|
+
// `tv_nsec` part of a timespec can't go over the limit.
|
|
216
|
+
struct timespec deadline;
|
|
217
|
+
clock_gettime(CLOCK_REALTIME, &deadline);
|
|
218
|
+
|
|
219
|
+
unsigned int timeout_ns = MILLIS_AS_NS(10);
|
|
220
|
+
unsigned int tv_nsec_limit = SECONDS_AS_NS(1);
|
|
221
|
+
if ((deadline.tv_nsec + timeout_ns) < tv_nsec_limit) {
|
|
222
|
+
deadline.tv_nsec += timeout_ns;
|
|
223
|
+
} else {
|
|
224
|
+
deadline.tv_nsec = (deadline.tv_nsec + timeout_ns) % tv_nsec_limit;
|
|
225
|
+
deadline.tv_sec++;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
int error = pthread_cond_timedwait(&holding_the_gvl_signal_handler_executed, &holding_the_gvl_signal_handler_mutex, &deadline);
|
|
229
|
+
if (error && error != ETIMEDOUT) ENFORCE_SUCCESS_GVL(error);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
ENFORCE_SUCCESS_GVL(pthread_mutex_unlock(&holding_the_gvl_signal_handler_mutex));
|
|
233
|
+
|
|
234
|
+
replace_sigprof_signal_handler_with_empty_handler(holding_the_gvl_signal_handler);
|
|
235
|
+
|
|
236
|
+
if (holding_the_gvl_signal_handler_result[0] == Qfalse) rb_raise(rb_eRuntimeError, "Could not signal background_thread");
|
|
237
|
+
|
|
238
|
+
VALUE result = rb_hash_new();
|
|
239
|
+
rb_hash_aset(result, ID2SYM(rb_intern("ruby_thread_has_gvl_p")), holding_the_gvl_signal_handler_result[1]);
|
|
240
|
+
rb_hash_aset(result, ID2SYM(rb_intern("is_current_thread_holding_the_gvl")), holding_the_gvl_signal_handler_result[2]);
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
static VALUE _native_enforce_success(DDTRACE_UNUSED VALUE _self, VALUE syserr_errno, VALUE with_gvl) {
|
|
245
|
+
if (RTEST(with_gvl)) {
|
|
246
|
+
ENFORCE_SUCCESS_GVL(NUM2INT(syserr_errno));
|
|
247
|
+
} else {
|
|
248
|
+
rb_thread_call_without_gvl(trigger_enforce_success, (void *) (intptr_t) NUM2INT(syserr_errno), NULL, NULL);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return Qtrue;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
static void *trigger_enforce_success(void *trigger_args) {
|
|
255
|
+
intptr_t syserr_errno = (intptr_t) trigger_args;
|
|
256
|
+
ENFORCE_SUCCESS_NO_GVL(syserr_errno);
|
|
257
|
+
return NULL;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
static VALUE _native_malloc_stats(DDTRACE_UNUSED VALUE _self) {
|
|
261
|
+
#ifdef HAVE_MALLOC_STATS
|
|
262
|
+
malloc_stats();
|
|
263
|
+
return Qtrue;
|
|
264
|
+
#else
|
|
265
|
+
return Qfalse;
|
|
266
|
+
#endif
|
|
267
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <ruby/thread.h>
|
|
3
|
+
|
|
4
|
+
#include "ruby_helpers.h"
|
|
5
|
+
#include "private_vm_api_access.h"
|
|
6
|
+
|
|
7
|
+
// The following global variables are initialized at startup to save expensive lookups later.
|
|
8
|
+
// They are not expected to be mutated outside of init.
|
|
9
|
+
static VALUE module_object_space = Qnil;
|
|
10
|
+
static ID _id2ref_id = Qnil;
|
|
11
|
+
static ID inspect_id = Qnil;
|
|
12
|
+
static ID to_s_id = Qnil;
|
|
13
|
+
|
|
14
|
+
void ruby_helpers_init(void) {
|
|
15
|
+
rb_global_variable(&module_object_space);
|
|
16
|
+
|
|
17
|
+
module_object_space = rb_const_get(rb_cObject, rb_intern("ObjectSpace"));
|
|
18
|
+
_id2ref_id = rb_intern("_id2ref");
|
|
19
|
+
inspect_id = rb_intern("inspect");
|
|
20
|
+
to_s_id = rb_intern("to_s");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
void raise_unexpected_type(
|
|
24
|
+
VALUE value,
|
|
25
|
+
const char *value_name,
|
|
26
|
+
const char *type_name,
|
|
27
|
+
const char *file,
|
|
28
|
+
int line,
|
|
29
|
+
const char* function_name
|
|
30
|
+
) {
|
|
31
|
+
rb_exc_raise(
|
|
32
|
+
rb_exc_new_str(
|
|
33
|
+
rb_eTypeError,
|
|
34
|
+
rb_sprintf("wrong argument %"PRIsVALUE" for '%s' (expected a %s) at %s:%d:in `%s'",
|
|
35
|
+
rb_inspect(value),
|
|
36
|
+
value_name,
|
|
37
|
+
type_name,
|
|
38
|
+
file,
|
|
39
|
+
line,
|
|
40
|
+
function_name
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#define MAX_RAISE_MESSAGE_SIZE 256
|
|
47
|
+
|
|
48
|
+
struct raise_arguments {
|
|
49
|
+
VALUE exception_class;
|
|
50
|
+
char exception_message[MAX_RAISE_MESSAGE_SIZE];
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
static void *trigger_raise(void *raise_arguments) {
|
|
54
|
+
struct raise_arguments *args = (struct raise_arguments *) raise_arguments;
|
|
55
|
+
rb_raise(args->exception_class, "%s", args->exception_message);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void grab_gvl_and_raise(VALUE exception_class, const char *format_string, ...) {
|
|
59
|
+
struct raise_arguments args;
|
|
60
|
+
|
|
61
|
+
args.exception_class = exception_class;
|
|
62
|
+
|
|
63
|
+
va_list format_string_arguments;
|
|
64
|
+
va_start(format_string_arguments, format_string);
|
|
65
|
+
vsnprintf(args.exception_message, MAX_RAISE_MESSAGE_SIZE, format_string, format_string_arguments);
|
|
66
|
+
|
|
67
|
+
if (is_current_thread_holding_the_gvl()) {
|
|
68
|
+
rb_raise(
|
|
69
|
+
rb_eRuntimeError,
|
|
70
|
+
"grab_gvl_and_raise called by thread holding the global VM lock. exception_message: '%s'",
|
|
71
|
+
args.exception_message
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
rb_thread_call_with_gvl(trigger_raise, &args);
|
|
76
|
+
|
|
77
|
+
rb_bug("[ddtrace] Unexpected: Reached the end of grab_gvl_and_raise while raising '%s'\n", args.exception_message);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
struct syserr_raise_arguments {
|
|
81
|
+
int syserr_errno;
|
|
82
|
+
char exception_message[MAX_RAISE_MESSAGE_SIZE];
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
static void *trigger_syserr_raise(void *syserr_raise_arguments) {
|
|
86
|
+
struct syserr_raise_arguments *args = (struct syserr_raise_arguments *) syserr_raise_arguments;
|
|
87
|
+
rb_syserr_fail(args->syserr_errno, args->exception_message);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
void grab_gvl_and_raise_syserr(int syserr_errno, const char *format_string, ...) {
|
|
91
|
+
struct syserr_raise_arguments args;
|
|
92
|
+
|
|
93
|
+
args.syserr_errno = syserr_errno;
|
|
94
|
+
|
|
95
|
+
va_list format_string_arguments;
|
|
96
|
+
va_start(format_string_arguments, format_string);
|
|
97
|
+
vsnprintf(args.exception_message, MAX_RAISE_MESSAGE_SIZE, format_string, format_string_arguments);
|
|
98
|
+
|
|
99
|
+
if (is_current_thread_holding_the_gvl()) {
|
|
100
|
+
rb_raise(
|
|
101
|
+
rb_eRuntimeError,
|
|
102
|
+
"grab_gvl_and_raise_syserr called by thread holding the global VM lock. syserr_errno: %d, exception_message: '%s'",
|
|
103
|
+
syserr_errno,
|
|
104
|
+
args.exception_message
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
rb_thread_call_with_gvl(trigger_syserr_raise, &args);
|
|
109
|
+
|
|
110
|
+
rb_bug("[ddtrace] Unexpected: Reached the end of grab_gvl_and_raise_syserr while raising '%s'\n", args.exception_message);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
void raise_syserr(
|
|
114
|
+
int syserr_errno,
|
|
115
|
+
bool have_gvl,
|
|
116
|
+
const char *expression,
|
|
117
|
+
const char *file,
|
|
118
|
+
int line,
|
|
119
|
+
const char *function_name
|
|
120
|
+
) {
|
|
121
|
+
if (have_gvl) {
|
|
122
|
+
rb_exc_raise(rb_syserr_new_str(syserr_errno, rb_sprintf("Failure returned by '%s' at %s:%d:in `%s'", expression, file, line, function_name)));
|
|
123
|
+
} else {
|
|
124
|
+
grab_gvl_and_raise_syserr(syserr_errno, "Failure returned by '%s' at %s:%d:in `%s'", expression, file, line, function_name);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
char* ruby_strndup(const char *str, size_t size) {
|
|
129
|
+
char *dup;
|
|
130
|
+
|
|
131
|
+
dup = xmalloc(size + 1);
|
|
132
|
+
memcpy(dup, str, size);
|
|
133
|
+
dup[size] = '\0';
|
|
134
|
+
|
|
135
|
+
return dup;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
static VALUE _id2ref(VALUE obj_id) {
|
|
139
|
+
// Call ::ObjectSpace._id2ref natively. It will raise if the id is no longer valid
|
|
140
|
+
return rb_funcall(module_object_space, _id2ref_id, 1, obj_id);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static VALUE _id2ref_failure(DDTRACE_UNUSED VALUE _unused1, DDTRACE_UNUSED VALUE _unused2) {
|
|
144
|
+
return Qfalse;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Native wrapper to get an object ref from an id. Returns true on success and
|
|
148
|
+
// writes the ref to the value pointer parameter if !NULL. False if id doesn't
|
|
149
|
+
// reference a valid object (in which case value is not changed).
|
|
150
|
+
bool ruby_ref_from_id(VALUE obj_id, VALUE *value) {
|
|
151
|
+
// Call ::ObjectSpace._id2ref natively. It will raise if the id is no longer valid
|
|
152
|
+
// so we need to call it via rb_rescue2
|
|
153
|
+
// TODO: Benchmark rb_rescue2 vs rb_protect here
|
|
154
|
+
VALUE result = rb_rescue2(
|
|
155
|
+
_id2ref,
|
|
156
|
+
obj_id,
|
|
157
|
+
_id2ref_failure,
|
|
158
|
+
Qnil,
|
|
159
|
+
rb_eRangeError, // rb_eRangeError is the error used to flag invalid ids
|
|
160
|
+
0 // Required by API to be the last argument
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
if (result == Qfalse) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (value != NULL) {
|
|
168
|
+
(*value) = result;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Not part of public headers but is externed from Ruby
|
|
175
|
+
size_t rb_obj_memsize_of(VALUE obj);
|
|
176
|
+
|
|
177
|
+
// Wrapper around rb_obj_memsize_of to avoid hitting crashing paths.
|
|
178
|
+
//
|
|
179
|
+
// The crashing paths are due to calls to rb_bug so should hopefully
|
|
180
|
+
// be situations that can't happen. But given that rb_obj_memsize_of
|
|
181
|
+
// isn't fully public (it's externed but not part of public headers)
|
|
182
|
+
// there is a possibility that it is just assumed that whoever calls
|
|
183
|
+
// it, will do proper checking for those cases. We want to be cautious
|
|
184
|
+
// so we'll assume that's the case and will skip over known crashing
|
|
185
|
+
// paths in this wrapper.
|
|
186
|
+
size_t ruby_obj_memsize_of(VALUE obj) {
|
|
187
|
+
switch (rb_type(obj)) {
|
|
188
|
+
case T_OBJECT:
|
|
189
|
+
case T_MODULE:
|
|
190
|
+
case T_CLASS:
|
|
191
|
+
case T_ICLASS:
|
|
192
|
+
case T_STRING:
|
|
193
|
+
case T_ARRAY:
|
|
194
|
+
case T_HASH:
|
|
195
|
+
case T_REGEXP:
|
|
196
|
+
case T_DATA:
|
|
197
|
+
case T_MATCH:
|
|
198
|
+
case T_FILE:
|
|
199
|
+
case T_RATIONAL:
|
|
200
|
+
case T_COMPLEX:
|
|
201
|
+
case T_IMEMO:
|
|
202
|
+
case T_FLOAT:
|
|
203
|
+
case T_SYMBOL:
|
|
204
|
+
case T_BIGNUM:
|
|
205
|
+
// case T_NODE: -> Crashes the vm in rb_obj_memsize_of
|
|
206
|
+
case T_STRUCT:
|
|
207
|
+
case T_ZOMBIE:
|
|
208
|
+
#ifndef NO_T_MOVED
|
|
209
|
+
case T_MOVED:
|
|
210
|
+
#endif
|
|
211
|
+
return rb_obj_memsize_of(obj);
|
|
212
|
+
default:
|
|
213
|
+
// Unsupported, return 0 instead of erroring like rb_obj_memsize_of likes doing
|
|
214
|
+
return 0;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Inspired by rb_class_of but without actually returning classes or potentially doing assertions
|
|
219
|
+
static bool ruby_is_obj_with_class(VALUE obj) {
|
|
220
|
+
if (!RB_SPECIAL_CONST_P(obj)) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
if (obj == RUBY_Qfalse) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
else if (obj == RUBY_Qnil) {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
else if (obj == RUBY_Qtrue) {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
else if (RB_FIXNUM_P(obj)) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
else if (RB_STATIC_SYM_P(obj)) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
else if (RB_FLONUM_P(obj)) {
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
VALUE ruby_safe_inspect(VALUE obj) {
|
|
246
|
+
if (!ruby_is_obj_with_class(obj)) {
|
|
247
|
+
return rb_str_new_cstr("(Not an object)");
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (rb_respond_to(obj, inspect_id)) {
|
|
251
|
+
return rb_sprintf("%+"PRIsVALUE, obj);
|
|
252
|
+
} else if (rb_respond_to(obj, to_s_id)) {
|
|
253
|
+
return rb_sprintf("%"PRIsVALUE, obj);
|
|
254
|
+
} else {
|
|
255
|
+
return rb_str_new_cstr("(Not inspectable)");
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
VALUE ddtrace_version(void) {
|
|
260
|
+
VALUE ddtrace_module = rb_const_get(rb_cObject, rb_intern("DDTrace"));
|
|
261
|
+
ENFORCE_TYPE(ddtrace_module, T_MODULE);
|
|
262
|
+
VALUE version_module = rb_const_get(ddtrace_module, rb_intern("VERSION"));
|
|
263
|
+
ENFORCE_TYPE(version_module, T_MODULE);
|
|
264
|
+
VALUE version_string = rb_const_get(version_module, rb_intern("STRING"));
|
|
265
|
+
ENFORCE_TYPE(version_string, T_STRING);
|
|
266
|
+
return version_string;
|
|
267
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <ruby.h>
|
|
4
|
+
#include <stdbool.h>
|
|
5
|
+
|
|
6
|
+
#include "helpers.h"
|
|
7
|
+
|
|
8
|
+
// Initialize internal data needed by some ruby helpers. Should be called during start, before any actual
|
|
9
|
+
// usage of ruby helpers.
|
|
10
|
+
void ruby_helpers_init(void);
|
|
11
|
+
|
|
12
|
+
// Processes any pending interruptions, including exceptions to be raised.
|
|
13
|
+
// If there's an exception to be raised, it raises it. In that case, this function does not return.
|
|
14
|
+
static inline VALUE process_pending_interruptions(DDTRACE_UNUSED VALUE _) {
|
|
15
|
+
rb_thread_check_ints();
|
|
16
|
+
return Qnil;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// RB_UNLIKELY is not supported on Ruby 2.3
|
|
20
|
+
#ifndef RB_UNLIKELY
|
|
21
|
+
#define RB_UNLIKELY(x) x
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
// Calls process_pending_interruptions BUT "rescues" any exceptions to be raised, returning them instead as
|
|
25
|
+
// a non-zero `pending_exception`.
|
|
26
|
+
//
|
|
27
|
+
// Thus, if there's a non-zero `pending_exception`, the caller MUST call `rb_jump_tag(pending_exception)` after any
|
|
28
|
+
// needed clean-ups.
|
|
29
|
+
//
|
|
30
|
+
// Usage example:
|
|
31
|
+
//
|
|
32
|
+
// ```c
|
|
33
|
+
// foo = ruby_xcalloc(...);
|
|
34
|
+
// pending_exception = check_if_pending_exception();
|
|
35
|
+
// if (pending_exception) {
|
|
36
|
+
// ruby_xfree(foo);
|
|
37
|
+
// rb_jump_tag(pending_exception); // Re-raises exception
|
|
38
|
+
// }
|
|
39
|
+
// ```
|
|
40
|
+
__attribute__((warn_unused_result))
|
|
41
|
+
static inline int check_if_pending_exception(void) {
|
|
42
|
+
int pending_exception;
|
|
43
|
+
rb_protect(process_pending_interruptions, Qnil, &pending_exception);
|
|
44
|
+
return pending_exception;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#define ADD_QUOTES_HELPER(x) #x
|
|
48
|
+
#define ADD_QUOTES(x) ADD_QUOTES_HELPER(x)
|
|
49
|
+
|
|
50
|
+
// Ruby has a Check_Type(value, type) that is roughly equivalent to this BUT Ruby's version is rather cryptic when it fails
|
|
51
|
+
// e.g. "wrong argument type nil (expected String)". This is a replacement that prints more information to help debugging.
|
|
52
|
+
#define ENFORCE_TYPE(value, type) \
|
|
53
|
+
{ if (RB_UNLIKELY(!RB_TYPE_P(value, type))) raise_unexpected_type(value, ADD_QUOTES(value), ADD_QUOTES(type), __FILE__, __LINE__, __func__); }
|
|
54
|
+
|
|
55
|
+
#define ENFORCE_BOOLEAN(value) \
|
|
56
|
+
{ if (RB_UNLIKELY(value != Qtrue && value != Qfalse)) raise_unexpected_type(value, ADD_QUOTES(value), "true or false", __FILE__, __LINE__, __func__); }
|
|
57
|
+
|
|
58
|
+
// Called by ENFORCE_TYPE; should not be used directly
|
|
59
|
+
NORETURN(void raise_unexpected_type(
|
|
60
|
+
VALUE value,
|
|
61
|
+
const char *value_name,
|
|
62
|
+
const char *type_name,
|
|
63
|
+
const char *file,
|
|
64
|
+
int line,
|
|
65
|
+
const char *function_name
|
|
66
|
+
));
|
|
67
|
+
|
|
68
|
+
#define VALUE_COUNT(array) (sizeof(array) / sizeof(VALUE))
|
|
69
|
+
|
|
70
|
+
NORETURN(
|
|
71
|
+
void grab_gvl_and_raise(VALUE exception_class, const char *format_string, ...)
|
|
72
|
+
__attribute__ ((format (printf, 2, 3)));
|
|
73
|
+
);
|
|
74
|
+
NORETURN(
|
|
75
|
+
void grab_gvl_and_raise_syserr(int syserr_errno, const char *format_string, ...)
|
|
76
|
+
__attribute__ ((format (printf, 2, 3)));
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
#define ENFORCE_SUCCESS_GVL(expression) ENFORCE_SUCCESS_HELPER(expression, true)
|
|
80
|
+
#define ENFORCE_SUCCESS_NO_GVL(expression) ENFORCE_SUCCESS_HELPER(expression, false)
|
|
81
|
+
|
|
82
|
+
#define ENFORCE_SUCCESS_HELPER(expression, have_gvl) \
|
|
83
|
+
{ int result_syserr_errno = expression; if (RB_UNLIKELY(result_syserr_errno)) raise_syserr(result_syserr_errno, have_gvl, ADD_QUOTES(expression), __FILE__, __LINE__, __func__); }
|
|
84
|
+
|
|
85
|
+
#define RUBY_NUM_OR_NIL(val, condition, conv) ((val condition) ? conv(val) : Qnil)
|
|
86
|
+
#define RUBY_AVG_OR_NIL(total, count) ((count == 0) ? Qnil : DBL2NUM(((double) total) / count))
|
|
87
|
+
|
|
88
|
+
// Called by ENFORCE_SUCCESS_HELPER; should not be used directly
|
|
89
|
+
NORETURN(void raise_syserr(
|
|
90
|
+
int syserr_errno,
|
|
91
|
+
bool have_gvl,
|
|
92
|
+
const char *expression,
|
|
93
|
+
const char *file,
|
|
94
|
+
int line,
|
|
95
|
+
const char *function_name
|
|
96
|
+
));
|
|
97
|
+
|
|
98
|
+
// Alternative to ruby_strdup that takes a size argument.
|
|
99
|
+
// Similar to C's strndup but slightly less smart as size is expected to
|
|
100
|
+
// be smaller or equal to the real size of str (minus null termination if it
|
|
101
|
+
// exists).
|
|
102
|
+
// A new string will be returned with size+1 bytes and last byte set to '\0'.
|
|
103
|
+
// The returned string must be freed explicitly.
|
|
104
|
+
//
|
|
105
|
+
// WARN: Cannot be used during GC or outside the GVL.
|
|
106
|
+
char* ruby_strndup(const char *str, size_t size);
|
|
107
|
+
|
|
108
|
+
// Native wrapper to get an object ref from an id. Returns true on success and
|
|
109
|
+
// writes the ref to the value pointer parameter if !NULL. False if id doesn't
|
|
110
|
+
// reference a valid object (in which case value is not changed).
|
|
111
|
+
bool ruby_ref_from_id(size_t id, VALUE *value);
|
|
112
|
+
|
|
113
|
+
// Native wrapper to get the approximate/estimated current size of the passed
|
|
114
|
+
// object.
|
|
115
|
+
size_t ruby_obj_memsize_of(VALUE obj);
|
|
116
|
+
|
|
117
|
+
// Safely inspect any ruby object. If the object responds to 'inspect',
|
|
118
|
+
// return a string with the result of that call. Elsif the object responds to
|
|
119
|
+
// 'to_s', return a string with the result of that call. Otherwise, return Qnil.
|
|
120
|
+
VALUE ruby_safe_inspect(VALUE obj);
|
|
121
|
+
|
|
122
|
+
VALUE ddtrace_version(void);
|