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
data/lib/datadog/ci/test.rb
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# typed: false
|
|
4
|
-
|
|
5
|
-
require_relative '../tracing/contrib/analytics'
|
|
6
|
-
|
|
7
|
-
require_relative 'ext/app_types'
|
|
8
|
-
require_relative 'ext/test'
|
|
9
|
-
|
|
10
|
-
require 'rbconfig'
|
|
11
|
-
|
|
12
|
-
module Datadog
|
|
13
|
-
module CI
|
|
14
|
-
# Common behavior for CI tests
|
|
15
|
-
module Test
|
|
16
|
-
# Creates a new span for a CI test
|
|
17
|
-
def self.trace(span_name, options = {})
|
|
18
|
-
span_options = {
|
|
19
|
-
span_type: Ext::AppTypes::TYPE_TEST
|
|
20
|
-
}.merge(options[:span_options] || {})
|
|
21
|
-
|
|
22
|
-
if block_given?
|
|
23
|
-
Tracing.trace(span_name, **span_options) do |span, trace|
|
|
24
|
-
set_tags!(trace, span, options)
|
|
25
|
-
yield(span, trace)
|
|
26
|
-
end
|
|
27
|
-
else
|
|
28
|
-
span = Tracing.trace(span_name, **span_options)
|
|
29
|
-
trace = Tracing.active_trace
|
|
30
|
-
set_tags!(trace, span, options)
|
|
31
|
-
span
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Adds tags to a CI test span.
|
|
36
|
-
def self.set_tags!(trace, span, tags = {})
|
|
37
|
-
tags ||= {}
|
|
38
|
-
|
|
39
|
-
# Set default tags
|
|
40
|
-
trace.origin = Ext::Test::CONTEXT_ORIGIN if trace
|
|
41
|
-
Datadog::Tracing::Contrib::Analytics.set_measured(span)
|
|
42
|
-
span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::AppTypes::TYPE_TEST)
|
|
43
|
-
|
|
44
|
-
# Set environment tags
|
|
45
|
-
@environment_tags ||= Ext::Environment.tags(ENV)
|
|
46
|
-
@environment_tags.each { |k, v| span.set_tag(k, v) }
|
|
47
|
-
|
|
48
|
-
# Set contextual tags
|
|
49
|
-
span.set_tag(Ext::Test::TAG_FRAMEWORK, tags[:framework]) if tags[:framework]
|
|
50
|
-
span.set_tag(Ext::Test::TAG_FRAMEWORK_VERSION, tags[:framework_version]) if tags[:framework_version]
|
|
51
|
-
span.set_tag(Ext::Test::TAG_NAME, tags[:test_name]) if tags[:test_name]
|
|
52
|
-
span.set_tag(Ext::Test::TAG_SUITE, tags[:test_suite]) if tags[:test_suite]
|
|
53
|
-
span.set_tag(Ext::Test::TAG_TYPE, tags[:test_type]) if tags[:test_type]
|
|
54
|
-
|
|
55
|
-
set_environment_runtime_tags!(span)
|
|
56
|
-
|
|
57
|
-
span
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def self.passed!(span)
|
|
61
|
-
span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::PASS)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def self.failed!(span, exception = nil)
|
|
65
|
-
span.status = 1
|
|
66
|
-
span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::FAIL)
|
|
67
|
-
span.set_error(exception) unless exception.nil?
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def self.skipped!(span, exception = nil)
|
|
71
|
-
span.set_tag(Ext::Test::TAG_STATUS, Ext::Test::Status::SKIP)
|
|
72
|
-
span.set_error(exception) unless exception.nil?
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
private_class_method def self.set_environment_runtime_tags!(span)
|
|
76
|
-
span.set_tag(Ext::Test::TAG_OS_ARCHITECTURE, ::RbConfig::CONFIG['host_cpu'])
|
|
77
|
-
span.set_tag(Ext::Test::TAG_OS_PLATFORM, ::RbConfig::CONFIG['host_os'])
|
|
78
|
-
span.set_tag(Ext::Test::TAG_RUNTIME_NAME, Core::Environment::Ext::LANG_ENGINE)
|
|
79
|
-
span.set_tag(Ext::Test::TAG_RUNTIME_VERSION, Core::Environment::Ext::ENGINE_VERSION)
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
data/lib/datadog/ci.rb
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# typed: strict
|
|
2
|
-
|
|
3
|
-
require_relative 'core'
|
|
4
|
-
require_relative 'tracing'
|
|
5
|
-
require_relative 'tracing/contrib'
|
|
6
|
-
|
|
7
|
-
module Datadog
|
|
8
|
-
# Namespace for Datadog CI instrumentation:
|
|
9
|
-
# e.g. rspec, cucumber, etc...
|
|
10
|
-
module CI
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# Integrations
|
|
15
|
-
require_relative 'ci/contrib/cucumber/integration'
|
|
16
|
-
require_relative 'ci/contrib/rspec/integration'
|
|
17
|
-
|
|
18
|
-
# Extensions
|
|
19
|
-
require_relative 'ci/extensions'
|
|
20
|
-
Datadog::CI::Extensions.activate!
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# typed: false
|
|
2
|
-
|
|
3
|
-
require 'tsort'
|
|
4
|
-
|
|
5
|
-
module Datadog
|
|
6
|
-
module Core
|
|
7
|
-
module Configuration
|
|
8
|
-
# Resolver performs a topological sort over the dependency graph
|
|
9
|
-
class DependencyResolver
|
|
10
|
-
include TSort
|
|
11
|
-
|
|
12
|
-
def initialize(dependency_graph = {})
|
|
13
|
-
@dependency_graph = dependency_graph
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def tsort_each_node(&blk)
|
|
17
|
-
@dependency_graph.each_key(&blk)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def tsort_each_child(node, &blk)
|
|
21
|
-
@dependency_graph.fetch(node).each(&blk)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
alias call tsort
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative 'dependency_resolver'
|
|
4
|
-
|
|
5
|
-
module Datadog
|
|
6
|
-
module Core
|
|
7
|
-
module Configuration
|
|
8
|
-
# Represents a set of configuration option definitions for an integration
|
|
9
|
-
class OptionDefinitionSet < Hash
|
|
10
|
-
def dependency_order
|
|
11
|
-
DependencyResolver.new(dependency_graph).call
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def dependency_graph
|
|
15
|
-
each_with_object({}) do |(name, option), graph|
|
|
16
|
-
graph[name] = option.depends_on
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative 'sequence'
|
|
4
|
-
|
|
5
|
-
module Datadog
|
|
6
|
-
module Core
|
|
7
|
-
module Utils
|
|
8
|
-
# Acts as a unique dictionary of objects
|
|
9
|
-
class ObjectSet
|
|
10
|
-
# You can provide a block that defines how the key
|
|
11
|
-
# for this message type is resolved.
|
|
12
|
-
def initialize(seed = 0, &block)
|
|
13
|
-
@sequence = Sequence.new(seed)
|
|
14
|
-
@items = {}
|
|
15
|
-
@key_block = block
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Submit an array of arguments that define the message.
|
|
19
|
-
# If they match an existing message, it will return the
|
|
20
|
-
# matching object. If it doesn't match, it will yield to
|
|
21
|
-
# the block with the next ID & args given.
|
|
22
|
-
def fetch(*args)
|
|
23
|
-
# TODO: Array hashing is **really** expensive, we probably want to get rid of it in the future
|
|
24
|
-
key = @key_block ? @key_block.call(*args) : args.hash
|
|
25
|
-
@items[key] ||= yield(@sequence.next, *args)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def length
|
|
29
|
-
@items.length
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def objects
|
|
33
|
-
@items.values
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def freeze
|
|
37
|
-
super
|
|
38
|
-
@items.freeze
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative 'sequence'
|
|
4
|
-
|
|
5
|
-
module Datadog
|
|
6
|
-
module Core
|
|
7
|
-
module Utils
|
|
8
|
-
# Tracks strings and returns IDs
|
|
9
|
-
class StringTable
|
|
10
|
-
def initialize
|
|
11
|
-
@sequence = Sequence.new
|
|
12
|
-
@ids = { ''.freeze => @sequence.next }
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Returns an ID for the string
|
|
16
|
-
def fetch(string)
|
|
17
|
-
@ids[string.to_s] ||= @sequence.next
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Returns the canonical copy of this string
|
|
21
|
-
# Typically used for psuedo interning; reduce
|
|
22
|
-
# identical copies of a string to one object.
|
|
23
|
-
def fetch_string(string)
|
|
24
|
-
return nil if string.nil?
|
|
25
|
-
|
|
26
|
-
# Co-erce to string
|
|
27
|
-
string = string.to_s
|
|
28
|
-
|
|
29
|
-
# Add to string table if no match
|
|
30
|
-
@ids[string] = @sequence.next unless @ids.key?(string)
|
|
31
|
-
|
|
32
|
-
# Get and return matching string in table
|
|
33
|
-
# NOTE: Have to resolve the key and retrieve from table again
|
|
34
|
-
# because "string" argument is not same object as string key.
|
|
35
|
-
id = @ids[string]
|
|
36
|
-
@ids.key(id)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def [](id)
|
|
40
|
-
@ids.key(id)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def strings
|
|
44
|
-
@ids.keys
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
module Datadog
|
|
4
|
-
module Profiling
|
|
5
|
-
# Entity class used to represent an entry in a stack trace.
|
|
6
|
-
# Its fields are a simplified struct version of `Thread::Backtrace::Location`.
|
|
7
|
-
class BacktraceLocation
|
|
8
|
-
attr_reader \
|
|
9
|
-
:base_label,
|
|
10
|
-
:lineno,
|
|
11
|
-
:path,
|
|
12
|
-
:hash
|
|
13
|
-
|
|
14
|
-
def initialize(
|
|
15
|
-
base_label,
|
|
16
|
-
lineno,
|
|
17
|
-
path
|
|
18
|
-
)
|
|
19
|
-
@base_label = base_label
|
|
20
|
-
@lineno = lineno
|
|
21
|
-
@path = path
|
|
22
|
-
@hash = [base_label, lineno, path].hash
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def ==(other)
|
|
26
|
-
hash == other.hash
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def eql?(other)
|
|
30
|
-
hash == other.hash
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../core/buffer/thread_safe'
|
|
4
|
-
require_relative '../core/utils/object_set'
|
|
5
|
-
require_relative '../core/utils/string_table'
|
|
6
|
-
|
|
7
|
-
module Datadog
|
|
8
|
-
module Profiling
|
|
9
|
-
# Profiling buffer that stores profiling events. The buffer has a maximum size and when
|
|
10
|
-
# the buffer is full, a random event is discarded. This class is thread-safe.
|
|
11
|
-
class Buffer < Core::Buffer::ThreadSafe
|
|
12
|
-
def initialize(*args)
|
|
13
|
-
super
|
|
14
|
-
@caches = {}
|
|
15
|
-
@string_table = Core::Utils::StringTable.new
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def cache(cache_name)
|
|
19
|
-
synchronize do
|
|
20
|
-
@caches[cache_name] ||= Core::Utils::ObjectSet.new
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def string_table
|
|
25
|
-
synchronize do
|
|
26
|
-
@string_table
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
protected
|
|
31
|
-
|
|
32
|
-
def drain!
|
|
33
|
-
items = super
|
|
34
|
-
|
|
35
|
-
# Clear caches
|
|
36
|
-
@caches = {}
|
|
37
|
-
@string_table = Core::Utils::StringTable.new
|
|
38
|
-
|
|
39
|
-
items
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# typed: false
|
|
2
|
-
|
|
3
|
-
module Datadog
|
|
4
|
-
module Profiling
|
|
5
|
-
module Collectors
|
|
6
|
-
# Used to periodically sample threads, recording elapsed CPU-time and Wall-time between samples.
|
|
7
|
-
# Triggering of this component (e.g. deciding when to take a sample) is implemented in
|
|
8
|
-
# Collectors::CpuAndWallTimeWorker.
|
|
9
|
-
# The stack collection itself is handled using the Datadog::Profiling::Collectors::Stack.
|
|
10
|
-
# Almost all of this class is implemented as native code.
|
|
11
|
-
#
|
|
12
|
-
# Methods prefixed with _native_ are implemented in `collectors_cpu_and_wall_time.c`
|
|
13
|
-
class CpuAndWallTime
|
|
14
|
-
def initialize(recorder:, max_frames:)
|
|
15
|
-
self.class._native_initialize(self, recorder, max_frames)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def inspect
|
|
19
|
-
# Compose Ruby's default inspect with our custom inspect for the native parts
|
|
20
|
-
result = super()
|
|
21
|
-
result[-1] = "#{self.class._native_inspect(self)}>"
|
|
22
|
-
result
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../core/utils/only_once'
|
|
4
|
-
require_relative '../../core/utils/time'
|
|
5
|
-
require_relative '../../core/worker'
|
|
6
|
-
require_relative '../../core/workers/polling'
|
|
7
|
-
require_relative '../backtrace_location'
|
|
8
|
-
require_relative '../events/stack'
|
|
9
|
-
require_relative '../native_extension'
|
|
10
|
-
|
|
11
|
-
module Datadog
|
|
12
|
-
module Profiling
|
|
13
|
-
module Collectors
|
|
14
|
-
# Collects stack trace samples from Ruby threads for both CPU-time (if available) and wall-clock.
|
|
15
|
-
# Runs on its own background thread.
|
|
16
|
-
#
|
|
17
|
-
# This class has the prefix "Old" because it will be deprecated by the new native CPU Profiler
|
|
18
|
-
class OldStack < Core::Worker # rubocop:disable Metrics/ClassLength
|
|
19
|
-
include Core::Workers::Polling
|
|
20
|
-
|
|
21
|
-
DEFAULT_MAX_TIME_USAGE_PCT = 2.0
|
|
22
|
-
MIN_INTERVAL = 0.01
|
|
23
|
-
THREAD_LAST_CPU_TIME_KEY = :datadog_profiler_last_cpu_time
|
|
24
|
-
THREAD_LAST_WALL_CLOCK_KEY = :datadog_profiler_last_wall_clock
|
|
25
|
-
SYNTHETIC_STACK_IN_NATIVE_CODE = [BacktraceLocation.new('', 0, 'In native code').freeze].freeze
|
|
26
|
-
|
|
27
|
-
# This default was picked based on the current sampling performance and on expected concurrency on an average
|
|
28
|
-
# Ruby MRI application. Lowering this optimizes for latency (less impact each time we sample), and raising
|
|
29
|
-
# optimizes for coverage (less chance to miss what a given thread is doing).
|
|
30
|
-
DEFAULT_MAX_THREADS_SAMPLED = 16
|
|
31
|
-
|
|
32
|
-
attr_reader \
|
|
33
|
-
:recorder,
|
|
34
|
-
:max_frames,
|
|
35
|
-
:trace_identifiers_helper,
|
|
36
|
-
:ignore_thread,
|
|
37
|
-
:max_time_usage_pct,
|
|
38
|
-
:thread_api,
|
|
39
|
-
:cpu_time_provider
|
|
40
|
-
|
|
41
|
-
def initialize(
|
|
42
|
-
recorder,
|
|
43
|
-
max_frames:,
|
|
44
|
-
trace_identifiers_helper:, # Usually an instance of Profiling::TraceIdentifiers::Helper
|
|
45
|
-
ignore_thread: nil,
|
|
46
|
-
max_time_usage_pct: DEFAULT_MAX_TIME_USAGE_PCT,
|
|
47
|
-
max_threads_sampled: DEFAULT_MAX_THREADS_SAMPLED,
|
|
48
|
-
thread_api: Thread,
|
|
49
|
-
cpu_time_provider: Profiling::NativeExtension,
|
|
50
|
-
fork_policy: Core::Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default
|
|
51
|
-
interval: MIN_INTERVAL,
|
|
52
|
-
enabled: true
|
|
53
|
-
)
|
|
54
|
-
@recorder = recorder
|
|
55
|
-
@max_frames = max_frames
|
|
56
|
-
@trace_identifiers_helper = trace_identifiers_helper
|
|
57
|
-
@ignore_thread = ignore_thread
|
|
58
|
-
@max_time_usage_pct = max_time_usage_pct
|
|
59
|
-
@max_threads_sampled = max_threads_sampled
|
|
60
|
-
@thread_api = thread_api
|
|
61
|
-
# Only set the provider if it's able to work in the current Ruby/OS combo
|
|
62
|
-
@cpu_time_provider = cpu_time_provider unless cpu_time_provider.cpu_time_ns_for(thread_api.current).nil?
|
|
63
|
-
|
|
64
|
-
# Workers::Async::Thread settings
|
|
65
|
-
self.fork_policy = fork_policy
|
|
66
|
-
|
|
67
|
-
# Workers::IntervalLoop settings
|
|
68
|
-
self.loop_base_interval = interval
|
|
69
|
-
|
|
70
|
-
# Workers::Polling settings
|
|
71
|
-
self.enabled = enabled
|
|
72
|
-
|
|
73
|
-
# Cache this proc, since it's pretty expensive to keep recreating it
|
|
74
|
-
@build_backtrace_location = method(:build_backtrace_location).to_proc
|
|
75
|
-
# Cache this buffer, since it's pretty expensive to keep accessing it
|
|
76
|
-
@stack_sample_event_recorder = recorder[Events::StackSample]
|
|
77
|
-
# See below for details on why this is needed
|
|
78
|
-
@needs_process_waiter_workaround =
|
|
79
|
-
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.3') &&
|
|
80
|
-
Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7')
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def start
|
|
84
|
-
reset_cpu_time_tracking
|
|
85
|
-
perform
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def perform
|
|
89
|
-
collect_and_wait
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def collect_and_wait
|
|
93
|
-
run_time = Core::Utils::Time.measure do
|
|
94
|
-
collect_events
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Update wait time to throttle profiling
|
|
98
|
-
self.loop_wait_time = compute_wait_time(run_time)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def collect_events
|
|
102
|
-
events = []
|
|
103
|
-
current_wall_time_ns = get_current_wall_time_timestamp_ns
|
|
104
|
-
|
|
105
|
-
# Collect backtraces from each thread
|
|
106
|
-
threads_to_sample.each do |thread|
|
|
107
|
-
next unless thread.alive?
|
|
108
|
-
next if ignore_thread.is_a?(Proc) && ignore_thread.call(thread)
|
|
109
|
-
|
|
110
|
-
event = collect_thread_event(thread, current_wall_time_ns)
|
|
111
|
-
events << event unless event.nil?
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# Send events to recorder
|
|
115
|
-
recorder.push(events) unless events.empty?
|
|
116
|
-
|
|
117
|
-
events
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def collect_thread_event(thread, current_wall_time_ns)
|
|
121
|
-
locations = thread.backtrace_locations
|
|
122
|
-
return if locations.nil?
|
|
123
|
-
|
|
124
|
-
# Having empty locations means that the thread is alive, but we don't know what it's doing:
|
|
125
|
-
#
|
|
126
|
-
# 1. It can be starting up
|
|
127
|
-
# ```
|
|
128
|
-
# > Thread.new { sleep }.backtrace
|
|
129
|
-
# => [] # <-- note the thread hasn't actually started running sleep yet, we got there first
|
|
130
|
-
# ```
|
|
131
|
-
# 2. It can be running native code
|
|
132
|
-
# ```
|
|
133
|
-
# > t = Process.detach(fork { sleep })
|
|
134
|
-
# => #<Process::Waiter:0x00007ffe7285f7a0 run>
|
|
135
|
-
# > t.backtrace
|
|
136
|
-
# => [] # <-- this can happen even minutes later, e.g. it's not a race as in 1.
|
|
137
|
-
# ```
|
|
138
|
-
# This effect has been observed in threads created by the Iodine web server and the ffi gem
|
|
139
|
-
#
|
|
140
|
-
# To give customers visibility into these threads, we replace the empty stack with one containing a
|
|
141
|
-
# synthetic placeholder frame, so that these threads are properly represented in the UX.
|
|
142
|
-
locations = SYNTHETIC_STACK_IN_NATIVE_CODE if locations.empty?
|
|
143
|
-
|
|
144
|
-
# Get actual stack size then trim the stack
|
|
145
|
-
stack_size = locations.length
|
|
146
|
-
locations = locations[0..(max_frames - 1)]
|
|
147
|
-
|
|
148
|
-
# Convert backtrace locations into structs
|
|
149
|
-
locations = convert_backtrace_locations(locations)
|
|
150
|
-
|
|
151
|
-
thread_id = thread.object_id
|
|
152
|
-
root_span_id, span_id, trace_resource = trace_identifiers_helper.trace_identifiers_for(thread)
|
|
153
|
-
cpu_time = get_cpu_time_interval!(thread)
|
|
154
|
-
wall_time_interval_ns =
|
|
155
|
-
get_elapsed_since_last_sample_and_set_value(thread, THREAD_LAST_WALL_CLOCK_KEY, current_wall_time_ns)
|
|
156
|
-
|
|
157
|
-
Events::StackSample.new(
|
|
158
|
-
nil,
|
|
159
|
-
locations,
|
|
160
|
-
stack_size,
|
|
161
|
-
thread_id,
|
|
162
|
-
root_span_id,
|
|
163
|
-
span_id,
|
|
164
|
-
trace_resource,
|
|
165
|
-
cpu_time,
|
|
166
|
-
wall_time_interval_ns
|
|
167
|
-
)
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def get_cpu_time_interval!(thread)
|
|
171
|
-
return unless cpu_time_provider
|
|
172
|
-
|
|
173
|
-
current_cpu_time_ns = cpu_time_provider.cpu_time_ns_for(thread)
|
|
174
|
-
|
|
175
|
-
return unless current_cpu_time_ns
|
|
176
|
-
|
|
177
|
-
get_elapsed_since_last_sample_and_set_value(thread, THREAD_LAST_CPU_TIME_KEY, current_cpu_time_ns)
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def compute_wait_time(used_time)
|
|
181
|
-
# We took used_time to get the last sample.
|
|
182
|
-
#
|
|
183
|
-
# What we're computing here is -- if used_time corresponds to max_time_usage_pct of the time we should
|
|
184
|
-
# spend working, how much is (100% - max_time_usage_pct) of the time?
|
|
185
|
-
#
|
|
186
|
-
# For instance, if we took 10ms to sample, and max_time_usage_pct is 1%, then the other 99% is 990ms, which
|
|
187
|
-
# means we need to sleep for 990ms to guarantee that we don't spend more than 1% of the time working.
|
|
188
|
-
used_time_ns = used_time * 1e9
|
|
189
|
-
interval = (used_time_ns / (max_time_usage_pct / 100.0)) - used_time_ns
|
|
190
|
-
[interval / 1e9, MIN_INTERVAL].max
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
# Convert backtrace locations into structs
|
|
194
|
-
# Re-use old backtrace location objects if they already exist in the buffer
|
|
195
|
-
def convert_backtrace_locations(locations)
|
|
196
|
-
locations.collect do |location|
|
|
197
|
-
# Re-use existing BacktraceLocation if identical copy, otherwise build a new one.
|
|
198
|
-
@stack_sample_event_recorder.cache(:backtrace_locations).fetch(
|
|
199
|
-
# Function name
|
|
200
|
-
location.base_label,
|
|
201
|
-
# Line number
|
|
202
|
-
location.lineno,
|
|
203
|
-
# Filename
|
|
204
|
-
location.path,
|
|
205
|
-
# Build function
|
|
206
|
-
&@build_backtrace_location
|
|
207
|
-
)
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def build_backtrace_location(_id, base_label, lineno, path)
|
|
212
|
-
string_table = @stack_sample_event_recorder.string_table
|
|
213
|
-
|
|
214
|
-
Profiling::BacktraceLocation.new(
|
|
215
|
-
string_table.fetch_string(base_label),
|
|
216
|
-
lineno,
|
|
217
|
-
string_table.fetch_string(path)
|
|
218
|
-
)
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
private
|
|
222
|
-
|
|
223
|
-
# If the profiler is started for a while, stopped and then restarted OR whenever the process forks, we need to
|
|
224
|
-
# clean up any leftover per-thread counters, so that the first sample after starting doesn't end up with:
|
|
225
|
-
#
|
|
226
|
-
# a) negative time: At least on my test docker container, and on the reliability environment, after the process
|
|
227
|
-
# forks, the cpu time reference changes and (old cpu time - new cpu time) can be < 0
|
|
228
|
-
#
|
|
229
|
-
# b) large amount of time: if the profiler was started, then stopped for some amount of time, and then
|
|
230
|
-
# restarted, we don't want the first sample to be "blamed" for multiple minutes of CPU time
|
|
231
|
-
#
|
|
232
|
-
# By resetting the last cpu time seen, we start with a clean slate every time we start the stack collector.
|
|
233
|
-
def reset_cpu_time_tracking
|
|
234
|
-
thread_api.list.each do |thread|
|
|
235
|
-
# See below for details on why this is needed
|
|
236
|
-
next if @needs_process_waiter_workaround && thread.is_a?(::Process::Waiter)
|
|
237
|
-
|
|
238
|
-
thread.thread_variable_set(THREAD_LAST_CPU_TIME_KEY, nil)
|
|
239
|
-
thread.thread_variable_set(THREAD_LAST_WALL_CLOCK_KEY, nil)
|
|
240
|
-
end
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
def get_elapsed_since_last_sample_and_set_value(thread, key, current_value)
|
|
244
|
-
# Process::Waiter crash workaround:
|
|
245
|
-
#
|
|
246
|
-
# This is a workaround for a Ruby VM segfault (usually something like
|
|
247
|
-
# "[BUG] Segmentation fault at 0x0000000000000008") in the affected Ruby versions.
|
|
248
|
-
# See https://bugs.ruby-lang.org/issues/17807 for details.
|
|
249
|
-
#
|
|
250
|
-
# In those Ruby versions, there's a very special subclass of `Thread` called `Process::Waiter` that causes VM
|
|
251
|
-
# crashes whenever something tries to read its instance or thread variables. This subclass of thread only
|
|
252
|
-
# shows up when the `Process.detach` API gets used.
|
|
253
|
-
# In the specs you'll find crash regression tests that include a way of reproducing it.
|
|
254
|
-
#
|
|
255
|
-
# As workaround for now we just skip it for the affected Rubies
|
|
256
|
-
return 0 if @needs_process_waiter_workaround && thread.is_a?(::Process::Waiter)
|
|
257
|
-
|
|
258
|
-
last_value = thread.thread_variable_get(key) || current_value
|
|
259
|
-
thread.thread_variable_set(key, current_value)
|
|
260
|
-
|
|
261
|
-
current_value - last_value
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
# Whenever there are more than max_threads_sampled active, we only sample a subset of them.
|
|
265
|
-
# We do this to avoid impacting the latency of the service being profiled. We want to avoid doing
|
|
266
|
-
# a big burst of work all at once (sample everything), and instead do a little work each time
|
|
267
|
-
# (sample a bit by bit).
|
|
268
|
-
#
|
|
269
|
-
# Because we pick the threads to sample randomly, we'll eventually sample all threads -- just not at once.
|
|
270
|
-
# Notice also that this will interact with our dynamic sampling mechanism -- if samples are faster, we take
|
|
271
|
-
# them more often, if they are slower, we take them less often -- which again means that over a longer period
|
|
272
|
-
# we should take sample roughly the same samples.
|
|
273
|
-
#
|
|
274
|
-
# One downside of this approach is that if there really are many threads, the resulting wall clock times
|
|
275
|
-
# in a one minute profile may "drift" around the 60 second mark, e.g. maybe we only sampled a thread once per
|
|
276
|
-
# second and only 59 times, so we'll report 59s, but on the next report we'll include the missing one, so
|
|
277
|
-
# then the result will be 61s. I've observed 60 +- 1.68 secs for an app with ~65 threads, given the
|
|
278
|
-
# default maximum of 16 threads. This seems a reasonable enough margin of error given the improvement to
|
|
279
|
-
# latency (especially on such a large application! -> even bigger latency impact if we tried to sample all
|
|
280
|
-
# threads).
|
|
281
|
-
#
|
|
282
|
-
def threads_to_sample
|
|
283
|
-
all_threads = thread_api.list
|
|
284
|
-
|
|
285
|
-
if all_threads.size > @max_threads_sampled
|
|
286
|
-
all_threads.sample(@max_threads_sampled)
|
|
287
|
-
else
|
|
288
|
-
all_threads
|
|
289
|
-
end
|
|
290
|
-
end
|
|
291
|
-
|
|
292
|
-
def get_current_wall_time_timestamp_ns
|
|
293
|
-
Core::Utils::Time.get_time(:nanosecond)
|
|
294
|
-
end
|
|
295
|
-
end
|
|
296
|
-
end
|
|
297
|
-
end
|
|
298
|
-
end
|