ddtrace 1.4.2 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +986 -2
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +10 -12
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +9 -2
- data/ext/ddtrace_profiling_loader/extconf.rb +21 -3
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +48 -12
- data/ext/ddtrace_profiling_native_extension/clock_id.h +1 -3
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +6 -23
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +0 -1
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +719 -129
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -0
- data/ext/ddtrace_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
- data/ext/ddtrace_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +244 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +184 -94
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +20 -2
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +1301 -0
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +15 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +103 -28
- data/ext/ddtrace_profiling_native_extension/heap_recorder.c +970 -0
- data/ext/ddtrace_profiling_native_extension/heap_recorder.h +155 -0
- data/ext/ddtrace_profiling_native_extension/helpers.h +7 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +133 -88
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.c +62 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +32 -4
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +55 -26
- data/ext/ddtrace_profiling_native_extension/pid_controller.c +57 -0
- data/ext/ddtrace_profiling_native_extension/pid_controller.h +45 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +317 -131
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +25 -1
- data/ext/ddtrace_profiling_native_extension/profiling.c +219 -4
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +233 -1
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +60 -8
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +585 -66
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +19 -30
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +53 -0
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +24 -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 +49 -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 +122 -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/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 +40 -296
- data/lib/datadog/core/configuration/ext.rb +47 -0
- data/lib/datadog/core/configuration/option.rb +270 -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 +419 -305
- data/lib/datadog/core/configuration.rb +10 -6
- data/lib/datadog/core/diagnostics/environment_logger.rb +129 -230
- 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 +1 -1
- 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/identity.rb +57 -1
- data/lib/datadog/core/environment/platform.rb +0 -2
- 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 +25 -23
- 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 +149 -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 +12 -0
- data/lib/datadog/core/remote/negotiation.rb +70 -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 +99 -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/client.rb +12 -4
- data/lib/datadog/core/telemetry/collector.rb +34 -18
- data/lib/datadog/core/telemetry/emitter.rb +4 -4
- data/lib/datadog/core/telemetry/event.rb +20 -8
- data/lib/datadog/core/telemetry/ext.rb +6 -2
- data/lib/datadog/core/telemetry/heartbeat.rb +3 -5
- data/lib/datadog/core/telemetry/http/adapters/net.rb +0 -2
- data/lib/datadog/core/telemetry/http/env.rb +1 -1
- data/lib/datadog/core/telemetry/http/ext.rb +10 -8
- data/lib/datadog/core/telemetry/http/response.rb +0 -4
- data/lib/datadog/core/telemetry/http/transport.rb +4 -1
- data/lib/datadog/core/telemetry/v1/app_event.rb +10 -3
- data/lib/datadog/core/telemetry/v1/application.rb +7 -1
- data/lib/datadog/core/telemetry/v1/dependency.rb +9 -2
- data/lib/datadog/core/telemetry/v1/host.rb +9 -1
- data/lib/datadog/core/telemetry/v1/install_signature.rb +38 -0
- data/lib/datadog/core/telemetry/v1/integration.rb +7 -1
- data/lib/datadog/core/telemetry/v1/product.rb +9 -1
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +7 -1
- data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
- data/lib/datadog/core/telemetry/v2/request.rb +29 -0
- data/lib/datadog/core/transport/ext.rb +47 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
- data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
- data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
- data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
- data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
- data/lib/datadog/core/transport/http/api/map.rb +18 -0
- data/lib/datadog/core/transport/http/env.rb +62 -0
- data/lib/datadog/core/transport/http/response.rb +60 -0
- data/lib/datadog/core/transport/parcel.rb +22 -0
- data/lib/datadog/core/transport/request.rb +17 -0
- data/lib/datadog/core/transport/response.rb +64 -0
- data/lib/datadog/core/utils/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/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.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 +91 -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 +48 -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 +0 -2
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +53 -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/stack.rb +1 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +61 -0
- data/lib/datadog/profiling/component.rb +434 -0
- data/lib/datadog/profiling/diagnostics/environment_logger.rb +39 -0
- data/lib/datadog/profiling/exporter.rb +12 -7
- data/lib/datadog/profiling/ext/forking.rb +0 -2
- data/lib/datadog/profiling/ext.rb +20 -32
- data/lib/datadog/profiling/flush.rb +8 -6
- data/lib/datadog/profiling/http_transport.rb +19 -8
- data/lib/datadog/profiling/load_native_extension.rb +7 -3
- data/lib/datadog/profiling/native_extension.rb +1 -22
- 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 +30 -6
- data/lib/datadog/profiling/tag_builder.rb +1 -1
- data/lib/datadog/profiling/tasks/exec.rb +0 -2
- data/lib/datadog/profiling/tasks/help.rb +0 -2
- data/lib/datadog/profiling/tasks/setup.rb +0 -35
- data/lib/datadog/profiling.rb +53 -74
- 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 +73 -15
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +501 -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 +10 -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 +19 -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 +10 -7
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +0 -2
- 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 +19 -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 +22 -9
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +9 -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 +9 -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 +11 -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 +14 -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 +24 -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 +10 -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 +11 -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 +18 -13
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +16 -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 +16 -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 +18 -8
- data/lib/datadog/tracing/contrib/active_support/ext.rb +17 -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 -1
- data/lib/datadog/tracing/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +24 -8
- data/lib/datadog/tracing/contrib/aws/ext.rb +36 -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/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 +9 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configurable.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/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 +29 -8
- data/lib/datadog/tracing/contrib/dalli/ext.rb +25 -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 +14 -8
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +15 -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 +24 -8
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +20 -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 +27 -10
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +52 -7
- data/lib/datadog/tracing/contrib/ethon/ext.rb +18 -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 +29 -11
- data/lib/datadog/tracing/contrib/excon/ext.rb +15 -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 +32 -2
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +30 -11
- data/lib/datadog/tracing/contrib/faraday/connection.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/ext.rb +15 -8
- data/lib/datadog/tracing/contrib/faraday/integration.rb +0 -2
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +24 -6
- 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 +9 -7
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +0 -4
- data/lib/datadog/tracing/contrib/grape/ext.rb +15 -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 +10 -8
- data/lib/datadog/tracing/contrib/graphql/ext.rb +6 -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 +50 -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 +15 -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 +47 -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 +15 -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 +47 -10
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +16 -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 +47 -10
- data/lib/datadog/tracing/contrib/httprb/ext.rb +15 -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 +10 -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 +41 -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 +24 -8
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +24 -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 +35 -8
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +14 -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 +52 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +37 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
- data/lib/datadog/tracing/contrib/patchable.rb +1 -1
- data/lib/datadog/tracing/contrib/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +36 -8
- data/lib/datadog/tracing/contrib/pg/ext.rb +21 -18
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +115 -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 +23 -8
- data/lib/datadog/tracing/contrib/presto/ext.rb +24 -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 +13 -9
- data/lib/datadog/tracing/contrib/qless/ext.rb +13 -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 +21 -14
- data/lib/datadog/tracing/contrib/que/ext.rb +0 -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 +18 -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 +19 -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 +16 -14
- data/lib/datadog/tracing/contrib/rack/ext.rb +17 -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 +130 -81
- 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 +28 -19
- data/lib/datadog/tracing/contrib/rails/ext.rb +6 -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 +14 -11
- data/lib/datadog/tracing/contrib/rake/ext.rb +13 -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 +26 -10
- data/lib/datadog/tracing/contrib/redis/ext.rb +21 -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 +53 -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 +14 -8
- data/lib/datadog/tracing/contrib/resque/ext.rb +8 -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 +27 -10
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +14 -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 +37 -0
- data/lib/datadog/tracing/contrib/roda/ext.rb +18 -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 +10 -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 +9 -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 +15 -9
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +13 -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 +19 -11
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +31 -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 +11 -11
- data/lib/datadog/tracing/contrib/sinatra/env.rb +11 -41
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +23 -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 +14 -10
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -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 +36 -0
- data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -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 +10 -7
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +14 -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/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 +5 -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 +1 -1
- 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 +0 -4
- data/lib/datadog/tracing/sampling/rule_sampler.rb +33 -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 +61 -13
- 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 +124 -0
- data/lib/datadog/tracing/transport/io/client.rb +89 -0
- data/lib/datadog/tracing/transport/io/response.rb +27 -0
- data/lib/datadog/tracing/transport/io/traces.rb +101 -0
- data/lib/datadog/tracing/transport/io.rb +30 -0
- data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
- data/lib/datadog/tracing/transport/statistics.rb +77 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +209 -0
- data/lib/datadog/tracing/transport/traces.rb +224 -0
- data/lib/datadog/tracing/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 +1 -1
- 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 +230 -113
- 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/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/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,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative '../core/transport/ext'
|
|
2
2
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Profiling
|
|
@@ -42,6 +42,7 @@ module Datadog
|
|
|
42
42
|
code_provenance_data: flush.code_provenance_data,
|
|
43
43
|
|
|
44
44
|
tags_as_array: flush.tags_as_array,
|
|
45
|
+
internal_metadata_json: flush.internal_metadata_json,
|
|
45
46
|
)
|
|
46
47
|
|
|
47
48
|
if status == :ok
|
|
@@ -49,16 +50,19 @@ module Datadog
|
|
|
49
50
|
Datadog.logger.debug('Successfully reported profiling data')
|
|
50
51
|
true
|
|
51
52
|
else
|
|
52
|
-
Datadog.logger.error(
|
|
53
|
+
Datadog.logger.error(
|
|
54
|
+
"Failed to report profiling data (#{config_without_api_key}): " \
|
|
55
|
+
"server returned unexpected HTTP #{result} status code"
|
|
56
|
+
)
|
|
53
57
|
false
|
|
54
58
|
end
|
|
55
59
|
else
|
|
56
|
-
Datadog.logger.error("Failed to report profiling data: #{result}")
|
|
60
|
+
Datadog.logger.error("Failed to report profiling data (#{config_without_api_key}): #{result}")
|
|
57
61
|
false
|
|
58
62
|
end
|
|
59
63
|
end
|
|
60
64
|
|
|
61
|
-
# Used to log soft failures in `
|
|
65
|
+
# Used to log soft failures in `ddog_Vec_tag_push` (e.g. we still report the profile in these cases)
|
|
62
66
|
# Called from native code
|
|
63
67
|
def self.log_failure_to_process_tag(failure_details)
|
|
64
68
|
Datadog.logger.warn("Failed to add tag to profiling request: #{failure_details}")
|
|
@@ -68,9 +72,9 @@ module Datadog
|
|
|
68
72
|
|
|
69
73
|
def base_url_from(agent_settings)
|
|
70
74
|
case agent_settings.adapter
|
|
71
|
-
when Datadog::Transport::Ext::HTTP::ADAPTER
|
|
75
|
+
when Datadog::Core::Transport::Ext::HTTP::ADAPTER
|
|
72
76
|
"#{agent_settings.ssl ? 'https' : 'http'}://#{agent_settings.hostname}:#{agent_settings.port}/"
|
|
73
|
-
when Datadog::Transport::Ext::UnixSocket::ADAPTER
|
|
77
|
+
when Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
|
74
78
|
"unix://#{agent_settings.uds_path}"
|
|
75
79
|
else
|
|
76
80
|
raise ArgumentError, "Unexpected adapter: #{agent_settings.adapter}"
|
|
@@ -78,7 +82,8 @@ module Datadog
|
|
|
78
82
|
end
|
|
79
83
|
|
|
80
84
|
def validate_agent_settings(agent_settings)
|
|
81
|
-
supported_adapters = [Datadog::Transport::Ext::HTTP::ADAPTER,
|
|
85
|
+
supported_adapters = [Datadog::Core::Transport::Ext::HTTP::ADAPTER,
|
|
86
|
+
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER]
|
|
82
87
|
unless supported_adapters.include?(agent_settings.adapter)
|
|
83
88
|
raise ArgumentError,
|
|
84
89
|
"Unsupported transport configuration for profiling: Adapter #{agent_settings.adapter} " \
|
|
@@ -111,7 +116,8 @@ module Datadog
|
|
|
111
116
|
pprof_data:,
|
|
112
117
|
code_provenance_file_name:,
|
|
113
118
|
code_provenance_data:,
|
|
114
|
-
tags_as_array
|
|
119
|
+
tags_as_array:,
|
|
120
|
+
internal_metadata_json:
|
|
115
121
|
)
|
|
116
122
|
self.class._native_do_export(
|
|
117
123
|
exporter_configuration,
|
|
@@ -125,8 +131,13 @@ module Datadog
|
|
|
125
131
|
code_provenance_file_name,
|
|
126
132
|
code_provenance_data,
|
|
127
133
|
tags_as_array,
|
|
134
|
+
internal_metadata_json,
|
|
128
135
|
)
|
|
129
136
|
end
|
|
137
|
+
|
|
138
|
+
def config_without_api_key
|
|
139
|
+
[@exporter_configuration[0..1]].to_h
|
|
140
|
+
end
|
|
130
141
|
end
|
|
131
142
|
end
|
|
132
143
|
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# typed: ignore
|
|
2
|
-
|
|
3
1
|
# This file is used to load the profiling native extension. It works in two steps:
|
|
4
2
|
#
|
|
5
3
|
# 1. Load the ddtrace_profiling_loader extension. This extension will be used to load the actual extension, but in
|
|
@@ -11,7 +9,13 @@
|
|
|
11
9
|
# All code on this file is on-purpose at the top-level; this makes it so this file is executed only once,
|
|
12
10
|
# the first time it gets required, to avoid any issues with the native extension being initialized more than once.
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
begin
|
|
13
|
+
require "ddtrace_profiling_loader.#{RUBY_VERSION}_#{RUBY_PLATFORM}"
|
|
14
|
+
rescue LoadError => e
|
|
15
|
+
raise LoadError,
|
|
16
|
+
'Failed to load the profiling loader extension. To fix this, please remove and then reinstall ddtrace ' \
|
|
17
|
+
"(Details: #{e.message})"
|
|
18
|
+
end
|
|
15
19
|
|
|
16
20
|
extension_name = "ddtrace_profiling_native_extension.#{RUBY_VERSION}_#{RUBY_PLATFORM}"
|
|
17
21
|
full_file_path = "#{__dir__}/../../#{extension_name}.#{RbConfig::CONFIG['DLEXT']}"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Profiling
|
|
@@ -15,27 +15,6 @@ module Datadog
|
|
|
15
15
|
false
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
|
-
|
|
19
|
-
unless singleton_class.method_defined?(:clock_id_for)
|
|
20
|
-
def self.clock_id_for(_)
|
|
21
|
-
nil
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.cpu_time_ns_for(thread)
|
|
26
|
-
clock_id =
|
|
27
|
-
begin
|
|
28
|
-
clock_id_for(thread)
|
|
29
|
-
rescue Errno::ESRCH
|
|
30
|
-
nil
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
begin
|
|
34
|
-
::Process.clock_gettime(clock_id, :nanosecond) if clock_id
|
|
35
|
-
rescue Errno::EINVAL
|
|
36
|
-
nil
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
18
|
end
|
|
40
19
|
end
|
|
41
20
|
end
|
|
@@ -1,34 +1,62 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
1
|
module Datadog
|
|
4
2
|
module Profiling
|
|
5
|
-
# Profiling entry point, which coordinates
|
|
3
|
+
# Profiling entry point, which coordinates the worker and scheduler threads
|
|
6
4
|
class Profiler
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
include Datadog::Core::Utils::Forking
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
attr_reader :worker, :scheduler
|
|
10
|
+
|
|
11
|
+
public
|
|
10
12
|
|
|
11
|
-
def initialize(
|
|
12
|
-
@
|
|
13
|
+
def initialize(worker:, scheduler:)
|
|
14
|
+
@worker = worker
|
|
13
15
|
@scheduler = scheduler
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
def start
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
after_fork! do
|
|
20
|
+
worker.reset_after_fork
|
|
21
|
+
scheduler.reset_after_fork
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
worker.start(on_failure_proc: proc { component_failed(:worker) })
|
|
25
|
+
scheduler.start(on_failure_proc: proc { component_failed(:scheduler) })
|
|
19
26
|
end
|
|
20
27
|
|
|
21
28
|
def shutdown!
|
|
22
29
|
Datadog.logger.debug('Shutting down profiler')
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
end
|
|
31
|
+
stop_worker
|
|
32
|
+
stop_scheduler
|
|
33
|
+
end
|
|
28
34
|
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def stop_worker
|
|
38
|
+
worker.stop
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def stop_scheduler
|
|
29
42
|
scheduler.enabled = false
|
|
30
43
|
scheduler.stop(true)
|
|
31
44
|
end
|
|
45
|
+
|
|
46
|
+
def component_failed(failed_component)
|
|
47
|
+
Datadog.logger.warn(
|
|
48
|
+
"Detected issue with profiler (#{failed_component} component), stopping profiling. " \
|
|
49
|
+
'See previous log messages for details.'
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
if failed_component == :worker
|
|
53
|
+
stop_scheduler
|
|
54
|
+
elsif failed_component == :scheduler
|
|
55
|
+
stop_worker
|
|
56
|
+
else
|
|
57
|
+
raise ArgumentError, "Unexpected failed_component: #{failed_component.inspect}"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
32
60
|
end
|
|
33
61
|
end
|
|
34
62
|
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
1
|
require_relative '../core/utils/time'
|
|
4
2
|
|
|
5
3
|
require_relative '../core/worker'
|
|
@@ -7,12 +5,11 @@ require_relative '../core/workers/polling'
|
|
|
7
5
|
|
|
8
6
|
module Datadog
|
|
9
7
|
module Profiling
|
|
10
|
-
# Periodically (every
|
|
8
|
+
# Periodically (every interval, 60 seconds by default) takes a profile from the `Exporter` and reports it using the
|
|
11
9
|
# configured transport. Runs on its own background thread.
|
|
12
10
|
class Scheduler < Core::Worker
|
|
13
11
|
include Core::Workers::Polling
|
|
14
12
|
|
|
15
|
-
DEFAULT_INTERVAL_SECONDS = 60
|
|
16
13
|
MINIMUM_INTERVAL_SECONDS = 0
|
|
17
14
|
|
|
18
15
|
# We sleep for at most this duration seconds before reporting data to avoid multi-process applications all
|
|
@@ -30,8 +27,7 @@ module Datadog
|
|
|
30
27
|
def initialize(
|
|
31
28
|
exporter:,
|
|
32
29
|
transport:,
|
|
33
|
-
fork_policy: Core::Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default
|
|
34
|
-
interval: DEFAULT_INTERVAL_SECONDS,
|
|
30
|
+
interval:, fork_policy: Core::Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default, # seconds
|
|
35
31
|
enabled: true
|
|
36
32
|
)
|
|
37
33
|
@exporter = exporter
|
|
@@ -47,32 +43,32 @@ module Datadog
|
|
|
47
43
|
self.enabled = enabled
|
|
48
44
|
end
|
|
49
45
|
|
|
50
|
-
def start
|
|
51
|
-
perform
|
|
46
|
+
def start(on_failure_proc: nil)
|
|
47
|
+
perform(on_failure_proc)
|
|
52
48
|
end
|
|
53
49
|
|
|
54
|
-
def perform
|
|
55
|
-
# A profiling flush may be called while the VM is shutting down, to report the last profile. When we do so,
|
|
56
|
-
# we impose a strict timeout. This means this last profile may or may not be sent, depending on if the flush can
|
|
57
|
-
# successfully finish in the strict timeout.
|
|
58
|
-
# This can be somewhat confusing (why did it not get reported?), so let's at least log what happened.
|
|
59
|
-
interrupted = true
|
|
60
|
-
|
|
50
|
+
def perform(on_failure_proc)
|
|
61
51
|
begin
|
|
52
|
+
# A profiling flush may be called while the VM is shutting down, to report the last profile. When we do so,
|
|
53
|
+
# we impose a strict timeout. This means this last profile may or may not be sent, depending on if the flush can
|
|
54
|
+
# successfully finish in the strict timeout.
|
|
55
|
+
# This can be somewhat confusing (why did it not get reported?), so let's at least log what happened.
|
|
56
|
+
interrupted = true
|
|
57
|
+
|
|
62
58
|
flush_and_wait
|
|
63
59
|
interrupted = false
|
|
60
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
61
|
+
Datadog.logger.warn(
|
|
62
|
+
'Profiling::Scheduler thread error. ' \
|
|
63
|
+
"Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
64
|
+
)
|
|
65
|
+
on_failure_proc&.call
|
|
66
|
+
raise
|
|
64
67
|
ensure
|
|
65
68
|
Datadog.logger.debug('#flush was interrupted or failed before it could complete') if interrupted
|
|
66
69
|
end
|
|
67
70
|
end
|
|
68
71
|
|
|
69
|
-
def after_fork
|
|
70
|
-
# Clear any existing profiling state.
|
|
71
|
-
# We don't want the child process to report profiling data from its parent.
|
|
72
|
-
Datadog.logger.debug('Flushing exporter in child process #after_fork and discarding data')
|
|
73
|
-
exporter.flush
|
|
74
|
-
end
|
|
75
|
-
|
|
76
72
|
# Configure Workers::IntervalLoop to not report immediately when scheduler starts
|
|
77
73
|
#
|
|
78
74
|
# When a scheduler gets created (or reset), we don't want it to immediately try to flush; we want it to wait for
|
|
@@ -86,6 +82,10 @@ module Datadog
|
|
|
86
82
|
exporter.can_flush?
|
|
87
83
|
end
|
|
88
84
|
|
|
85
|
+
def reset_after_fork
|
|
86
|
+
exporter.reset_after_fork
|
|
87
|
+
end
|
|
88
|
+
|
|
89
89
|
private
|
|
90
90
|
|
|
91
91
|
def flush_and_wait
|
|
@@ -113,8 +113,8 @@ module Datadog
|
|
|
113
113
|
#
|
|
114
114
|
# During PR review (https://github.com/DataDog/dd-trace-rb/pull/1807) we discussed the possible alternative of
|
|
115
115
|
# just sleeping before starting the scheduler loop. We ended up not going with that option to avoid the first
|
|
116
|
-
# profile containing up to
|
|
117
|
-
# usual
|
|
116
|
+
# profile containing up to interval + DEFAULT_FLUSH_JITTER_MAXIMUM_SECONDS instead of the
|
|
117
|
+
# usual interval seconds.
|
|
118
118
|
if run_loop?
|
|
119
119
|
jitter_seconds = rand * DEFAULT_FLUSH_JITTER_MAXIMUM_SECONDS # floating point number between (0.0...maximum)
|
|
120
120
|
sleep(jitter_seconds)
|
|
@@ -123,7 +123,9 @@ module Datadog
|
|
|
123
123
|
begin
|
|
124
124
|
transport.export(flush)
|
|
125
125
|
rescue StandardError => e
|
|
126
|
-
Datadog.logger.error(
|
|
126
|
+
Datadog.logger.error(
|
|
127
|
+
"Unable to report profile. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
128
|
+
)
|
|
127
129
|
end
|
|
128
130
|
|
|
129
131
|
true
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
# typed: false
|
|
2
|
-
|
|
3
1
|
module Datadog
|
|
4
2
|
module Profiling
|
|
5
3
|
# Stores stack samples in a native libdatadog data structure and expose Ruby-level serialization APIs
|
|
6
4
|
# Note that `record_sample` is only accessible from native code.
|
|
7
5
|
# Methods prefixed with _native_ are implemented in `stack_recorder.c`
|
|
8
6
|
class StackRecorder
|
|
9
|
-
def initialize
|
|
7
|
+
def initialize(
|
|
8
|
+
cpu_time_enabled:, alloc_samples_enabled:, heap_samples_enabled:, heap_size_enabled:,
|
|
9
|
+
heap_sample_every:, timeline_enabled:
|
|
10
|
+
)
|
|
10
11
|
# This mutex works in addition to the fancy C-level mutexes we have in the native side (see the docs there).
|
|
11
12
|
# It prevents multiple Ruby threads calling serialize at the same time -- something like
|
|
12
13
|
# `10.times { Thread.new { stack_recorder.serialize } }`.
|
|
@@ -14,6 +15,16 @@ module Datadog
|
|
|
14
15
|
# C-level mutexes (that there is a single serializer thread), we add it here as an extra safeguard against it
|
|
15
16
|
# accidentally happening.
|
|
16
17
|
@no_concurrent_synchronize_mutex = Mutex.new
|
|
18
|
+
|
|
19
|
+
self.class._native_initialize(
|
|
20
|
+
self,
|
|
21
|
+
cpu_time_enabled,
|
|
22
|
+
alloc_samples_enabled,
|
|
23
|
+
heap_samples_enabled,
|
|
24
|
+
heap_size_enabled,
|
|
25
|
+
heap_sample_every,
|
|
26
|
+
timeline_enabled,
|
|
27
|
+
)
|
|
17
28
|
end
|
|
18
29
|
|
|
19
30
|
def serialize
|
|
@@ -34,9 +45,22 @@ module Datadog
|
|
|
34
45
|
end
|
|
35
46
|
end
|
|
36
47
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
def serialize!
|
|
49
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_serialize(self) }
|
|
50
|
+
|
|
51
|
+
if status == :ok
|
|
52
|
+
_start, _finish, encoded_pprof = result
|
|
53
|
+
|
|
54
|
+
encoded_pprof
|
|
55
|
+
else
|
|
56
|
+
error_message = result
|
|
57
|
+
|
|
58
|
+
raise("Failed to serialize profiling data: #{error_message}")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def reset_after_fork
|
|
63
|
+
self.class._native_reset_after_fork(self)
|
|
40
64
|
end
|
|
41
65
|
end
|
|
42
66
|
end
|
|
@@ -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,43 @@ 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
|
+
private_class_method def self.replace_noop_allocation_count
|
|
67
|
+
def self.allocation_count # rubocop:disable Lint/NestedMethodDefinition (On purpose!)
|
|
68
|
+
Datadog::Profiling::Collectors::CpuAndWallTimeWorker._native_allocation_count
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
44
72
|
private_class_method def self.native_library_compilation_skipped?
|
|
45
73
|
skipped_reason = try_reading_skipped_reason_file
|
|
46
74
|
|
|
@@ -61,68 +89,13 @@ module Datadog
|
|
|
61
89
|
end
|
|
62
90
|
end
|
|
63
91
|
|
|
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
92
|
private_class_method def self.native_library_failed_to_load?
|
|
120
93
|
success, exception = try_loading_native_library
|
|
121
94
|
|
|
122
95
|
unless success
|
|
123
96
|
if exception
|
|
124
97
|
'There was an error loading the profiling native extension due to ' \
|
|
125
|
-
"'#{exception.class.name} #{exception.message}' at '#{exception.backtrace.first}'"
|
|
98
|
+
"'#{exception.class.name} #{exception.message}' at '#{Array(exception.backtrace).first}'"
|
|
126
99
|
else
|
|
127
100
|
'The profiling native extension did not load correctly. ' \
|
|
128
101
|
'For help solving this issue, please contact Datadog support at <https://docs.datadoghq.com/help/>.' \
|
|
@@ -142,27 +115,33 @@ module Datadog
|
|
|
142
115
|
end
|
|
143
116
|
end
|
|
144
117
|
|
|
118
|
+
# All requires for the profiler should be directly added here; and everything should be loaded eagerly.
|
|
119
|
+
# (Currently there's a leftovers that need to be cleaned up, but we should avoid other exceptions.)
|
|
120
|
+
#
|
|
121
|
+
# All of the profiler should be loaded and ready to go when this method returns `true`.
|
|
145
122
|
private_class_method def self.load_profiling
|
|
146
123
|
return false unless supported?
|
|
147
124
|
|
|
148
125
|
require_relative 'profiling/ext/forking'
|
|
149
126
|
require_relative 'profiling/collectors/code_provenance'
|
|
150
|
-
require_relative 'profiling/collectors/cpu_and_wall_time'
|
|
151
127
|
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
|
152
|
-
require_relative 'profiling/collectors/
|
|
128
|
+
require_relative 'profiling/collectors/dynamic_sampling_rate'
|
|
129
|
+
require_relative 'profiling/collectors/idle_sampling_helper'
|
|
153
130
|
require_relative 'profiling/collectors/stack'
|
|
131
|
+
require_relative 'profiling/collectors/thread_context'
|
|
132
|
+
require_relative 'profiling/diagnostics/environment_logger'
|
|
154
133
|
require_relative 'profiling/stack_recorder'
|
|
155
|
-
require_relative 'profiling/old_recorder'
|
|
156
134
|
require_relative 'profiling/exporter'
|
|
135
|
+
require_relative 'profiling/flush'
|
|
157
136
|
require_relative 'profiling/scheduler'
|
|
158
137
|
require_relative 'profiling/tasks/setup'
|
|
159
138
|
require_relative 'profiling/profiler'
|
|
160
139
|
require_relative 'profiling/native_extension'
|
|
161
|
-
require_relative 'profiling/trace_identifiers/helper'
|
|
162
|
-
require_relative 'profiling/pprof/pprof_pb'
|
|
163
140
|
require_relative 'profiling/tag_builder'
|
|
164
141
|
require_relative 'profiling/http_transport'
|
|
165
142
|
|
|
143
|
+
replace_noop_allocation_count
|
|
144
|
+
|
|
166
145
|
true
|
|
167
146
|
end
|
|
168
147
|
|