cw-datadog 2.23.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +5142 -0
- data/LICENSE +6 -0
- data/LICENSE-3rdparty.csv +7 -0
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +24 -0
- data/bin/ddprofrb +15 -0
- data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
- data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +156 -0
- data/ext/datadog_profiling_native_extension/clock_id.h +23 -0
- data/ext/datadog_profiling_native_extension/clock_id_from_pthread.c +55 -0
- data/ext/datadog_profiling_native_extension/clock_id_noop.c +21 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +1423 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +447 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +131 -0
- data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
- data/ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
- data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +248 -0
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.c +659 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.h +44 -0
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +2221 -0
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +31 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +80 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +63 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +321 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +52 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +67 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +998 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +177 -0
- data/ext/datadog_profiling_native_extension/helpers.h +12 -0
- data/ext/datadog_profiling_native_extension/http_transport.c +280 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +84 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +28 -0
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +244 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +881 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +81 -0
- data/ext/datadog_profiling_native_extension/profiling.c +284 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +235 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +88 -0
- data/ext/datadog_profiling_native_extension/setup_signal_handler.c +115 -0
- data/ext/datadog_profiling_native_extension/setup_signal_handler.h +12 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +1145 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.h +31 -0
- data/ext/datadog_profiling_native_extension/time_helpers.c +38 -0
- data/ext/datadog_profiling_native_extension/time_helpers.h +56 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
- data/ext/libdatadog_api/crashtracker.c +125 -0
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +80 -0
- data/ext/libdatadog_api/datadog_ruby_common.h +63 -0
- data/ext/libdatadog_api/ddsketch.c +106 -0
- data/ext/libdatadog_api/extconf.rb +110 -0
- data/ext/libdatadog_api/init.c +18 -0
- data/ext/libdatadog_api/library_config.c +172 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/process_discovery.c +118 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +140 -0
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +49 -0
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +77 -0
- data/lib/datadog/appsec/api_security/sampler.rb +60 -0
- data/lib/datadog/appsec/api_security.rb +23 -0
- data/lib/datadog/appsec/assets/blocked.html +99 -0
- 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/README.md +46 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +10504 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +3066 -0
- data/lib/datadog/appsec/assets.rb +46 -0
- data/lib/datadog/appsec/autoload.rb +13 -0
- data/lib/datadog/appsec/component.rb +89 -0
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +409 -0
- data/lib/datadog/appsec/configuration.rb +11 -0
- data/lib/datadog/appsec/context.rb +97 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +94 -0
- data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +25 -0
- data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +35 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/devise/patcher.rb +63 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +103 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +70 -0
- data/lib/datadog/appsec/contrib/devise/patches/skip_signin_tracking_patch.rb +21 -0
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
- data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +29 -0
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +109 -0
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +56 -0
- data/lib/datadog/appsec/contrib/graphql/integration.rb +54 -0
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +34 -0
- data/lib/datadog/appsec/contrib/integration.rb +37 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +47 -0
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +101 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +141 -0
- data/lib/datadog/appsec/contrib/rack/integration.rb +44 -0
- data/lib/datadog/appsec/contrib/rack/patcher.rb +31 -0
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +43 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +218 -0
- data/lib/datadog/appsec/contrib/rails/ext.rb +13 -0
- data/lib/datadog/appsec/contrib/rails/framework.rb +16 -0
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +78 -0
- data/lib/datadog/appsec/contrib/rails/integration.rb +43 -0
- data/lib/datadog/appsec/contrib/rails/patcher.rb +171 -0
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rails/request.rb +36 -0
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +39 -0
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +20 -0
- 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 +105 -0
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +43 -0
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +132 -0
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
- data/lib/datadog/appsec/event.rb +139 -0
- data/lib/datadog/appsec/ext.rb +23 -0
- data/lib/datadog/appsec/extensions.rb +16 -0
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +43 -0
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +59 -0
- data/lib/datadog/appsec/instrumentation.rb +9 -0
- data/lib/datadog/appsec/metrics/collector.rb +58 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +29 -0
- data/lib/datadog/appsec/metrics.rb +14 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +85 -0
- data/lib/datadog/appsec/monitor.rb +11 -0
- data/lib/datadog/appsec/processor/rule_loader.rb +119 -0
- data/lib/datadog/appsec/rate_limiter.rb +45 -0
- data/lib/datadog/appsec/remote.rb +119 -0
- data/lib/datadog/appsec/response.rb +99 -0
- data/lib/datadog/appsec/sample_rate.rb +21 -0
- data/lib/datadog/appsec/security_engine/engine.rb +176 -0
- data/lib/datadog/appsec/security_engine/result.rb +102 -0
- data/lib/datadog/appsec/security_engine/runner.rb +111 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec/security_event.rb +37 -0
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +201 -0
- data/lib/datadog/appsec/utils/http/media_type.rb +87 -0
- data/lib/datadog/appsec/utils/http.rb +11 -0
- data/lib/datadog/appsec/utils.rb +9 -0
- data/lib/datadog/appsec.rb +65 -0
- data/lib/datadog/auto_instrument.rb +19 -0
- data/lib/datadog/auto_instrument_base.rb +9 -0
- data/lib/datadog/core/buffer/cruby.rb +55 -0
- data/lib/datadog/core/buffer/random.rb +150 -0
- data/lib/datadog/core/buffer/thread_safe.rb +58 -0
- data/lib/datadog/core/chunker.rb +35 -0
- data/lib/datadog/core/cloudwise/IMPLEMENTATION_V2.md +517 -0
- data/lib/datadog/core/cloudwise/QUICKSTART.md +398 -0
- data/lib/datadog/core/cloudwise/README.md +722 -0
- data/lib/datadog/core/cloudwise/app_registration_worker.rb +90 -0
- data/lib/datadog/core/cloudwise/client.rb +490 -0
- data/lib/datadog/core/cloudwise/component.rb +351 -0
- data/lib/datadog/core/cloudwise/heartbeat_worker.rb +137 -0
- data/lib/datadog/core/cloudwise/host_id_worker.rb +85 -0
- data/lib/datadog/core/cloudwise/license_worker.rb +108 -0
- data/lib/datadog/core/cloudwise/probe_state.rb +160 -0
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +339 -0
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/base.rb +91 -0
- data/lib/datadog/core/configuration/components.rb +386 -0
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/config_helper.rb +100 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +49 -0
- data/lib/datadog/core/configuration/option.rb +368 -0
- data/lib/datadog/core/configuration/option_definition.rb +158 -0
- data/lib/datadog/core/configuration/options.rb +134 -0
- data/lib/datadog/core/configuration/settings.rb +1087 -0
- data/lib/datadog/core/configuration/stable_config.rb +32 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +347 -0
- data/lib/datadog/core/configuration.rb +328 -0
- data/lib/datadog/core/contrib/rails/utils.rb +24 -0
- data/lib/datadog/core/crashtracking/component.rb +105 -0
- data/lib/datadog/core/crashtracking/tag_builder.rb +21 -0
- data/lib/datadog/core/ddsketch.rb +19 -0
- data/lib/datadog/core/deprecations.rb +58 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +170 -0
- data/lib/datadog/core/diagnostics/health.rb +19 -0
- data/lib/datadog/core/encoding.rb +90 -0
- data/lib/datadog/core/environment/agent_info.rb +78 -0
- data/lib/datadog/core/environment/cgroup.rb +51 -0
- data/lib/datadog/core/environment/class_count.rb +21 -0
- data/lib/datadog/core/environment/container.rb +89 -0
- data/lib/datadog/core/environment/execution.rb +103 -0
- data/lib/datadog/core/environment/ext.rb +45 -0
- data/lib/datadog/core/environment/gc.rb +20 -0
- data/lib/datadog/core/environment/git.rb +26 -0
- data/lib/datadog/core/environment/identity.rb +84 -0
- data/lib/datadog/core/environment/platform.rb +46 -0
- data/lib/datadog/core/environment/socket.rb +24 -0
- data/lib/datadog/core/environment/thread_count.rb +20 -0
- data/lib/datadog/core/environment/variable_helpers.rb +53 -0
- data/lib/datadog/core/environment/vm_cache.rb +64 -0
- data/lib/datadog/core/environment/yjit.rb +69 -0
- data/lib/datadog/core/error.rb +102 -0
- data/lib/datadog/core/extensions.rb +16 -0
- data/lib/datadog/core/git/ext.rb +16 -0
- data/lib/datadog/core/header_collection.rb +43 -0
- data/lib/datadog/core/logger.rb +45 -0
- data/lib/datadog/core/logging/ext.rb +13 -0
- data/lib/datadog/core/metrics/client.rb +206 -0
- data/lib/datadog/core/metrics/ext.rb +18 -0
- data/lib/datadog/core/metrics/helpers.rb +25 -0
- data/lib/datadog/core/metrics/logging.rb +44 -0
- data/lib/datadog/core/metrics/metric.rb +14 -0
- data/lib/datadog/core/metrics/options.rb +52 -0
- data/lib/datadog/core/pin.rb +71 -0
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
- data/lib/datadog/core/process_discovery.rb +61 -0
- data/lib/datadog/core/rate_limiter.rb +185 -0
- data/lib/datadog/core/remote/client/capabilities.rb +70 -0
- data/lib/datadog/core/remote/client.rb +245 -0
- data/lib/datadog/core/remote/component.rb +161 -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 +307 -0
- data/lib/datadog/core/remote/configuration/target.rb +74 -0
- data/lib/datadog/core/remote/configuration.rb +18 -0
- data/lib/datadog/core/remote/dispatcher.rb +59 -0
- data/lib/datadog/core/remote/ext.rb +13 -0
- data/lib/datadog/core/remote/negotiation.rb +70 -0
- data/lib/datadog/core/remote/tie/tracing.rb +39 -0
- data/lib/datadog/core/remote/tie.rb +29 -0
- data/lib/datadog/core/remote/transport/config.rb +61 -0
- data/lib/datadog/core/remote/transport/http/api.rb +53 -0
- data/lib/datadog/core/remote/transport/http/client.rb +49 -0
- data/lib/datadog/core/remote/transport/http/config.rb +252 -0
- data/lib/datadog/core/remote/transport/http/negotiation.rb +103 -0
- data/lib/datadog/core/remote/transport/http.rb +83 -0
- data/lib/datadog/core/remote/transport/negotiation.rb +75 -0
- data/lib/datadog/core/remote/worker.rb +105 -0
- data/lib/datadog/core/remote.rb +24 -0
- data/lib/datadog/core/runtime/ext.rb +40 -0
- data/lib/datadog/core/runtime/metrics.rb +202 -0
- data/lib/datadog/core/semaphore.rb +35 -0
- data/lib/datadog/core/tag_builder.rb +52 -0
- data/lib/datadog/core/telemetry/component.rb +206 -0
- data/lib/datadog/core/telemetry/emitter.rb +56 -0
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +37 -0
- data/lib/datadog/core/telemetry/ext.rb +20 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +26 -0
- data/lib/datadog/core/telemetry/logger.rb +52 -0
- data/lib/datadog/core/telemetry/logging.rb +71 -0
- data/lib/datadog/core/telemetry/metric.rb +189 -0
- data/lib/datadog/core/telemetry/metrics_collection.rb +81 -0
- data/lib/datadog/core/telemetry/metrics_manager.rb +81 -0
- data/lib/datadog/core/telemetry/request.rb +71 -0
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +276 -0
- data/lib/datadog/core/transport/ext.rb +44 -0
- data/lib/datadog/core/transport/http/adapters/net.rb +175 -0
- data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
- data/lib/datadog/core/transport/http/adapters/test.rb +90 -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/instance.rb +54 -0
- data/lib/datadog/core/transport/http/api/map.rb +18 -0
- data/lib/datadog/core/transport/http/api/spec.rb +36 -0
- data/lib/datadog/core/transport/http/builder.rb +184 -0
- data/lib/datadog/core/transport/http/env.rb +70 -0
- data/lib/datadog/core/transport/http/response.rb +60 -0
- data/lib/datadog/core/transport/http.rb +75 -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 +71 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +102 -0
- data/lib/datadog/core/utils/base64.rb +22 -0
- data/lib/datadog/core/utils/duration.rb +52 -0
- data/lib/datadog/core/utils/forking.rb +63 -0
- data/lib/datadog/core/utils/hash.rb +79 -0
- data/lib/datadog/core/utils/lru_cache.rb +45 -0
- data/lib/datadog/core/utils/network.rb +142 -0
- data/lib/datadog/core/utils/only_once.rb +42 -0
- data/lib/datadog/core/utils/only_once_successful.rb +87 -0
- data/lib/datadog/core/utils/safe_dup.rb +40 -0
- data/lib/datadog/core/utils/sequence.rb +26 -0
- data/lib/datadog/core/utils/time.rb +84 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/utils/url.rb +25 -0
- data/lib/datadog/core/utils.rb +101 -0
- data/lib/datadog/core/vendor/multipart-post/LICENSE +11 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +118 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +59 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +137 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +11 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +10 -0
- data/lib/datadog/core/vendor/multipart-post/multipart.rb +14 -0
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +34 -0
- data/lib/datadog/core/worker.rb +24 -0
- data/lib/datadog/core/workers/async.rb +202 -0
- data/lib/datadog/core/workers/interval_loop.rb +134 -0
- data/lib/datadog/core/workers/polling.rb +59 -0
- data/lib/datadog/core/workers/queue.rb +44 -0
- data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
- data/lib/datadog/core.rb +38 -0
- data/lib/datadog/data_streams/configuration/settings.rb +49 -0
- data/lib/datadog/data_streams/configuration.rb +11 -0
- data/lib/datadog/data_streams/ext.rb +11 -0
- data/lib/datadog/data_streams/extensions.rb +16 -0
- data/lib/datadog/data_streams/pathway_context.rb +169 -0
- data/lib/datadog/data_streams/processor.rb +509 -0
- data/lib/datadog/data_streams/transport/http/api.rb +33 -0
- data/lib/datadog/data_streams/transport/http/client.rb +49 -0
- data/lib/datadog/data_streams/transport/http/stats.rb +87 -0
- data/lib/datadog/data_streams/transport/http.rb +41 -0
- data/lib/datadog/data_streams/transport/stats.rb +60 -0
- data/lib/datadog/data_streams.rb +100 -0
- data/lib/datadog/di/base.rb +115 -0
- data/lib/datadog/di/boot.rb +43 -0
- data/lib/datadog/di/code_tracker.rb +204 -0
- data/lib/datadog/di/component.rb +122 -0
- data/lib/datadog/di/configuration/settings.rb +212 -0
- data/lib/datadog/di/configuration.rb +11 -0
- data/lib/datadog/di/context.rb +70 -0
- data/lib/datadog/di/contrib/active_record.rb +12 -0
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +28 -0
- data/lib/datadog/di/el/compiler.rb +164 -0
- data/lib/datadog/di/el/evaluator.rb +159 -0
- data/lib/datadog/di/el/expression.rb +42 -0
- data/lib/datadog/di/el.rb +5 -0
- data/lib/datadog/di/error.rb +82 -0
- data/lib/datadog/di/extensions.rb +16 -0
- data/lib/datadog/di/instrumenter.rb +566 -0
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/preload.rb +18 -0
- data/lib/datadog/di/probe.rb +231 -0
- data/lib/datadog/di/probe_builder.rb +86 -0
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/probe_manager.rb +261 -0
- data/lib/datadog/di/probe_notification_builder.rb +236 -0
- data/lib/datadog/di/probe_notifier_worker.rb +305 -0
- data/lib/datadog/di/proc_responder.rb +32 -0
- data/lib/datadog/di/redactor.rb +187 -0
- data/lib/datadog/di/remote.rb +145 -0
- data/lib/datadog/di/serializer.rb +422 -0
- data/lib/datadog/di/transport/diagnostics.rb +62 -0
- data/lib/datadog/di/transport/http/api.rb +42 -0
- data/lib/datadog/di/transport/http/client.rb +47 -0
- data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
- data/lib/datadog/di/transport/http/input.rb +77 -0
- data/lib/datadog/di/transport/http.rb +57 -0
- data/lib/datadog/di/transport/input.rb +70 -0
- data/lib/datadog/di/utils.rb +142 -0
- data/lib/datadog/di.rb +36 -0
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events/v2.rb +196 -0
- data/lib/datadog/kit/appsec/events.rb +180 -0
- data/lib/datadog/kit/enable_core_dumps.rb +49 -0
- data/lib/datadog/kit/identity.rb +114 -0
- data/lib/datadog/kit.rb +11 -0
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +208 -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 +89 -0
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +169 -0
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +182 -0
- data/lib/datadog/opentelemetry/trace.rb +59 -0
- data/lib/datadog/opentelemetry.rb +52 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +150 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +147 -0
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +69 -0
- data/lib/datadog/profiling/collectors/info.rb +156 -0
- data/lib/datadog/profiling/collectors/stack.rb +13 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +102 -0
- data/lib/datadog/profiling/component.rb +445 -0
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +111 -0
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +410 -0
- data/lib/datadog/profiling/ext.rb +22 -0
- data/lib/datadog/profiling/flush.rb +40 -0
- data/lib/datadog/profiling/http_transport.rb +67 -0
- data/lib/datadog/profiling/load_native_extension.rb +9 -0
- data/lib/datadog/profiling/native_extension.rb +20 -0
- data/lib/datadog/profiling/preload.rb +5 -0
- data/lib/datadog/profiling/profiler.rb +70 -0
- data/lib/datadog/profiling/scheduler.rb +153 -0
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +104 -0
- data/lib/datadog/profiling/tag_builder.rb +59 -0
- data/lib/datadog/profiling/tasks/exec.rb +50 -0
- data/lib/datadog/profiling/tasks/help.rb +18 -0
- data/lib/datadog/profiling/tasks/setup.rb +43 -0
- data/lib/datadog/profiling.rb +167 -0
- data/lib/datadog/single_step_instrument.rb +21 -0
- data/lib/datadog/tracing/analytics.rb +25 -0
- data/lib/datadog/tracing/buffer.rb +129 -0
- data/lib/datadog/tracing/client_ip.rb +61 -0
- data/lib/datadog/tracing/component.rb +216 -0
- data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
- data/lib/datadog/tracing/configuration/dynamic.rb +100 -0
- data/lib/datadog/tracing/configuration/ext.rb +118 -0
- data/lib/datadog/tracing/configuration/http.rb +74 -0
- data/lib/datadog/tracing/configuration/settings.rb +579 -0
- data/lib/datadog/tracing/context.rb +68 -0
- data/lib/datadog/tracing/context_provider.rb +82 -0
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/action_cable/event.rb +71 -0
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +58 -0
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +63 -0
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +59 -0
- data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +86 -0
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +53 -0
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +50 -0
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +65 -0
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +48 -0
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +34 -0
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +54 -0
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +158 -0
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +85 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +40 -0
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +54 -0
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +39 -0
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +50 -0
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +57 -0
- data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
- data/lib/datadog/tracing/contrib/action_view/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/action_view/integration.rb +61 -0
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +34 -0
- data/lib/datadog/tracing/contrib/action_view/utils.rb +36 -0
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +51 -0
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
- data/lib/datadog/tracing/contrib/active_job/ext.rb +40 -0
- data/lib/datadog/tracing/contrib/active_job/integration.rb +53 -0
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +38 -0
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +40 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +68 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +45 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +47 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +32 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +36 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +152 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +48 -0
- data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +60 -0
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +80 -0
- data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_record/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/active_record/integration.rb +71 -0
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/active_record/utils.rb +128 -0
- data/lib/datadog/tracing/contrib/active_support/cache/event.rb +32 -0
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +171 -0
- data/lib/datadog/tracing/contrib/active_support/cache/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +225 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +57 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +60 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +70 -0
- data/lib/datadog/tracing/contrib/active_support/ext.rb +32 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +55 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +95 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +83 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +166 -0
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/analytics.rb +33 -0
- data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +53 -0
- data/lib/datadog/tracing/contrib/aws/ext.rb +50 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +136 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +70 -0
- data/lib/datadog/tracing/contrib/aws/patcher.rb +61 -0
- data/lib/datadog/tracing/contrib/aws/service/base.rb +17 -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 +139 -0
- data/lib/datadog/tracing/contrib/cloudwise/propagation.rb +315 -0
- data/lib/datadog/tracing/contrib/component.rb +41 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +24 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +20 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +47 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +49 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
- data/lib/datadog/tracing/contrib/configurable.rb +102 -0
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +128 -0
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/dalli/ext.rb +41 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +75 -0
- data/lib/datadog/tracing/contrib/dalli/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +26 -0
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +49 -0
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +108 -0
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +34 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +61 -0
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +35 -0
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +172 -0
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +87 -0
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +56 -0
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +229 -0
- data/lib/datadog/tracing/contrib/ethon/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/ethon/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +102 -0
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +82 -0
- data/lib/datadog/tracing/contrib/excon/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/excon/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/excon/middleware.rb +201 -0
- data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/ext.rb +70 -0
- data/lib/datadog/tracing/contrib/extensions.rb +255 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +81 -0
- data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
- data/lib/datadog/tracing/contrib/faraday/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/faraday/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +128 -0
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +56 -0
- data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +59 -0
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +316 -0
- data/lib/datadog/tracing/contrib/grape/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +37 -0
- data/lib/datadog/tracing/contrib/grape/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +73 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/graphql/integration.rb +56 -0
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +58 -0
- data/lib/datadog/tracing/contrib/graphql/trace_patcher.rb +24 -0
- data/lib/datadog/tracing/contrib/graphql/tracing_patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +297 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace_patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +58 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +123 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +96 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +107 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +49 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +34 -0
- data/lib/datadog/tracing/contrib/grpc.rb +45 -0
- 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 +44 -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 +42 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +34 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +77 -0
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +152 -0
- data/lib/datadog/tracing/contrib/http/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/http.rb +45 -0
- data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +76 -0
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +132 -0
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +76 -0
- data/lib/datadog/tracing/contrib/httprb/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +146 -0
- data/lib/datadog/tracing/contrib/httprb/integration.rb +51 -0
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/integration.rb +78 -0
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +19 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
- data/lib/datadog/tracing/contrib/kafka/event.rb +53 -0
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +42 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +49 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +47 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +47 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +41 -0
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +44 -0
- data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
- data/lib/datadog/tracing/contrib/kafka/ext.rb +55 -0
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +47 -0
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +43 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +77 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +89 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +24 -0
- data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +31 -0
- data/lib/datadog/tracing/contrib/lograge/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +46 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +64 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +39 -0
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +51 -0
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +49 -0
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +160 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +69 -0
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +109 -0
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +71 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +48 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +46 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +144 -0
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
- data/lib/datadog/tracing/contrib/patchable.rb +109 -0
- data/lib/datadog/tracing/contrib/patcher.rb +87 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +69 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +35 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +214 -0
- data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +52 -0
- data/lib/datadog/tracing/contrib/presto/ext.rb +38 -0
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +138 -0
- data/lib/datadog/tracing/contrib/presto/integration.rb +46 -0
- data/lib/datadog/tracing/contrib/presto/patcher.rb +25 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +61 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +32 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +67 -0
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +55 -0
- data/lib/datadog/tracing/contrib/que/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/que/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/que/patcher.rb +26 -0
- data/lib/datadog/tracing/contrib/que/tracer.rb +63 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +47 -0
- data/lib/datadog/tracing/contrib/racecar/event.rb +81 -0
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +38 -0
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +35 -0
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +38 -0
- data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
- data/lib/datadog/tracing/contrib/racecar/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/racecar/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +59 -0
- data/lib/datadog/tracing/contrib/rack/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +50 -0
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +475 -0
- data/lib/datadog/tracing/contrib/rack/patcher.rb +119 -0
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +49 -0
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +58 -0
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +76 -0
- data/lib/datadog/tracing/contrib/rails/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/rails/framework.rb +148 -0
- data/lib/datadog/tracing/contrib/rails/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +29 -0
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +46 -0
- data/lib/datadog/tracing/contrib/rails/patcher.rb +98 -0
- data/lib/datadog/tracing/contrib/rails/railtie.rb +19 -0
- data/lib/datadog/tracing/contrib/rails/runner.rb +117 -0
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +55 -0
- data/lib/datadog/tracing/contrib/rake/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +103 -0
- data/lib/datadog/tracing/contrib/rake/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/rake/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +49 -0
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +57 -0
- data/lib/datadog/tracing/contrib/redis/ext.rb +36 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +53 -0
- data/lib/datadog/tracing/contrib/redis/integration.rb +80 -0
- data/lib/datadog/tracing/contrib/redis/patcher.rb +92 -0
- data/lib/datadog/tracing/contrib/redis/quantize.rb +80 -0
- data/lib/datadog/tracing/contrib/redis/tags.rb +72 -0
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +85 -0
- data/lib/datadog/tracing/contrib/redis/vendor/LICENSE +20 -0
- data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +160 -0
- data/lib/datadog/tracing/contrib/registerable.rb +50 -0
- data/lib/datadog/tracing/contrib/registry.rb +52 -0
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +42 -0
- data/lib/datadog/tracing/contrib/resque/ext.rb +22 -0
- data/lib/datadog/tracing/contrib/resque/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +106 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +55 -0
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +46 -0
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +137 -0
- data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/roda/ext.rb +19 -0
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +78 -0
- data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/roda/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +24 -0
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +35 -0
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/sequel/database.rb +62 -0
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +67 -0
- data/lib/datadog/tracing/contrib/sequel/ext.rb +23 -0
- data/lib/datadog/tracing/contrib/sequel/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/sequel/utils.rb +90 -0
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +65 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +67 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +47 -0
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +49 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +45 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +61 -0
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +90 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +61 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +36 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +34 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +57 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +91 -0
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +44 -0
- data/lib/datadog/tracing/contrib/sidekiq.rb +37 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +46 -0
- data/lib/datadog/tracing/contrib/sinatra/env.rb +38 -0
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +116 -0
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +75 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +90 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +109 -0
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +60 -0
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +97 -0
- data/lib/datadog/tracing/contrib/status_range_env_parser.rb +33 -0
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +32 -0
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/stripe/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +68 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +104 -0
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +35 -0
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +63 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +97 -0
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/trilogy/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +111 -0
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +179 -0
- data/lib/datadog/tracing/contrib.rb +82 -0
- data/lib/datadog/tracing/correlation.rb +113 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +163 -0
- data/lib/datadog/tracing/diagnostics/ext.rb +36 -0
- data/lib/datadog/tracing/diagnostics/health.rb +40 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +73 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +71 -0
- data/lib/datadog/tracing/distributed/baggage.rb +196 -0
- data/lib/datadog/tracing/distributed/datadog.rb +201 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +82 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
- data/lib/datadog/tracing/distributed/helpers.rb +65 -0
- data/lib/datadog/tracing/distributed/none.rb +20 -0
- data/lib/datadog/tracing/distributed/propagation.rb +187 -0
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +444 -0
- data/lib/datadog/tracing/event.rb +74 -0
- data/lib/datadog/tracing/flush.rb +96 -0
- data/lib/datadog/tracing/metadata/analytics.rb +26 -0
- data/lib/datadog/tracing/metadata/errors.rb +32 -0
- data/lib/datadog/tracing/metadata/ext.rb +213 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata/tagging.rb +131 -0
- data/lib/datadog/tracing/metadata.rb +22 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +48 -0
- data/lib/datadog/tracing/pipeline/span_processor.rb +41 -0
- data/lib/datadog/tracing/pipeline.rb +63 -0
- data/lib/datadog/tracing/remote.rb +85 -0
- data/lib/datadog/tracing/runtime/metrics.rb +17 -0
- data/lib/datadog/tracing/sampling/all_sampler.rb +24 -0
- data/lib/datadog/tracing/sampling/ext.rb +58 -0
- data/lib/datadog/tracing/sampling/matcher.rb +119 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +160 -0
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +87 -0
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +63 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +59 -0
- data/lib/datadog/tracing/sampling/rule.rb +86 -0
- data/lib/datadog/tracing/sampling/rule_sampler.rb +172 -0
- data/lib/datadog/tracing/sampling/sampler.rb +32 -0
- data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +61 -0
- data/lib/datadog/tracing/sampling/span/rule.rb +77 -0
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
- data/lib/datadog/tracing/sampling/span/sampler.rb +70 -0
- data/lib/datadog/tracing/span.rb +236 -0
- data/lib/datadog/tracing/span_event.rb +161 -0
- data/lib/datadog/tracing/span_link.rb +92 -0
- data/lib/datadog/tracing/span_operation.rb +561 -0
- data/lib/datadog/tracing/sync_writer.rb +71 -0
- data/lib/datadog/tracing/trace_digest.rb +190 -0
- data/lib/datadog/tracing/trace_operation.rb +556 -0
- data/lib/datadog/tracing/trace_segment.rb +227 -0
- data/lib/datadog/tracing/tracer.rb +644 -0
- data/lib/datadog/tracing/transport/http/api.rb +44 -0
- data/lib/datadog/tracing/transport/http/client.rb +59 -0
- data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
- data/lib/datadog/tracing/transport/http/traces.rb +155 -0
- data/lib/datadog/tracing/transport/http.rb +44 -0
- data/lib/datadog/tracing/transport/io/client.rb +90 -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 +155 -0
- data/lib/datadog/tracing/transport/statistics.rb +77 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +276 -0
- data/lib/datadog/tracing/transport/traces.rb +258 -0
- data/lib/datadog/tracing/utils.rb +99 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +199 -0
- data/lib/datadog/tracing/workers.rb +126 -0
- data/lib/datadog/tracing/writer.rb +190 -0
- data/lib/datadog/tracing.rb +214 -0
- data/lib/datadog/version.rb +27 -0
- data/lib/datadog.rb +20 -0
- metadata +1074 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# rubocop:disable Lint/AssignmentInCondition
|
|
4
|
+
|
|
5
|
+
require_relative 'error'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module DI
|
|
9
|
+
# Tracks loaded Ruby code by source file and maintains a map from
|
|
10
|
+
# source file to the loaded code (instruction sequences).
|
|
11
|
+
# Also arranges for code in the loaded files to be instrumented by
|
|
12
|
+
# line probes that have already been received by the library.
|
|
13
|
+
#
|
|
14
|
+
# The loaded code is used to target line trace points when installing
|
|
15
|
+
# line probes which dramatically improves efficiency of line trace points.
|
|
16
|
+
#
|
|
17
|
+
# Note that, since most files will only be loaded one time (via the
|
|
18
|
+
# "require" mechanism), the code tracker needs to be global and not be
|
|
19
|
+
# recreated when the DI component is created.
|
|
20
|
+
#
|
|
21
|
+
# @api private
|
|
22
|
+
class CodeTracker
|
|
23
|
+
def initialize
|
|
24
|
+
@registry = {}
|
|
25
|
+
@trace_point_lock = Mutex.new
|
|
26
|
+
@registry_lock = Mutex.new
|
|
27
|
+
@compiled_trace_point = nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Starts tracking loaded code.
|
|
31
|
+
#
|
|
32
|
+
# This method should generally be called early in application boot
|
|
33
|
+
# process, because any code loaded before code tracking is enabled
|
|
34
|
+
# will not be instrumentable via line probes.
|
|
35
|
+
#
|
|
36
|
+
# Normally tracking should remain active for the lifetime of the
|
|
37
|
+
# process and would not be ever stopped.
|
|
38
|
+
def start
|
|
39
|
+
trace_point_lock.synchronize do
|
|
40
|
+
# If this code tracker is already running, we can do nothing or
|
|
41
|
+
# restart it (by disabling the trace point and recreating it).
|
|
42
|
+
# It is likely that some applications will attempt to activate
|
|
43
|
+
# DI more than once where the intention is to just activate DI;
|
|
44
|
+
# do not break such applications by clearing out the registry.
|
|
45
|
+
# For now, until there is a use case for recreating the trace point,
|
|
46
|
+
# do nothing if the code tracker has already started.
|
|
47
|
+
return if @compiled_trace_point
|
|
48
|
+
|
|
49
|
+
# Note: .trace enables the trace point.
|
|
50
|
+
@compiled_trace_point = TracePoint.trace(:script_compiled) do |tp|
|
|
51
|
+
# Useful attributes of the trace point object here:
|
|
52
|
+
# .instruction_sequence
|
|
53
|
+
# .instruction_sequence.path (either absolute file path for
|
|
54
|
+
# loaded or required code, or for eval'd code, if filename
|
|
55
|
+
# is specified as argument to eval, then this is the provided
|
|
56
|
+
# filename, otherwise this is a synthesized
|
|
57
|
+
# "(eval at <definition-file>:<line>)" string)
|
|
58
|
+
# .instruction_sequence.absolute_path (absolute file path when
|
|
59
|
+
# load or require are used to load code, nil for eval'd code
|
|
60
|
+
# regardless of whether filename was specified as an argument
|
|
61
|
+
# to eval on ruby 3.1+, same as path for eval'd code on ruby 3.0
|
|
62
|
+
# and lower)
|
|
63
|
+
# .method_id
|
|
64
|
+
# .path (refers to the code location that called the require/eval/etc.,
|
|
65
|
+
# not where the loaded code is; use .path on the instruction sequence
|
|
66
|
+
# to obtain the location of the compiled code)
|
|
67
|
+
# .eval_script
|
|
68
|
+
#
|
|
69
|
+
# For now just map the path to the instruction sequence.
|
|
70
|
+
path = tp.instruction_sequence.absolute_path
|
|
71
|
+
# Do not store mapping for eval'd code, since there is no way
|
|
72
|
+
# to target such code from dynamic instrumentation UI.
|
|
73
|
+
# eval'd code always sets tp.eval_script.
|
|
74
|
+
# When tp.eval_script is nil, code is either 'load'ed or 'require'd.
|
|
75
|
+
# steep, of course, complains about indexing with +path+
|
|
76
|
+
# without checking that it is not nil, so here, maybe there is
|
|
77
|
+
# some situation where path would in fact be nil and
|
|
78
|
+
# steep would end up saving the day.
|
|
79
|
+
if path && !tp.eval_script
|
|
80
|
+
registry_lock.synchronize do
|
|
81
|
+
registry[path] = tp.instruction_sequence
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Also, pending line probes should only be installed for
|
|
85
|
+
# non-eval'd code.
|
|
86
|
+
DI.current_component&.probe_manager&.install_pending_line_probes(path)
|
|
87
|
+
end
|
|
88
|
+
# Since this method normally is called from customer applications,
|
|
89
|
+
# rescue any exceptions that might not be handled to not break said
|
|
90
|
+
# customer applications.
|
|
91
|
+
rescue => exc
|
|
92
|
+
# Code tracker may be loaded without the rest of DI,
|
|
93
|
+
# in which case DI.component will not yet be defined,
|
|
94
|
+
# but we will have DI.current_component (set to nil).
|
|
95
|
+
if component = DI.current_component
|
|
96
|
+
raise if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
|
|
97
|
+
component.logger.debug { "di: unhandled exception in script_compiled trace point: #{exc.class}: #{exc}" }
|
|
98
|
+
component.telemetry&.report(exc, description: "Unhandled exception in script_compiled trace point")
|
|
99
|
+
# TODO test this path
|
|
100
|
+
else
|
|
101
|
+
# If we don't have a component, we cannot log anything properly.
|
|
102
|
+
# Do not just print a warning to avoid spamming customer logs.
|
|
103
|
+
# Don't reraise the exception either.
|
|
104
|
+
# TODO test this path
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Returns whether this code tracker has been activated and is
|
|
111
|
+
# tracking.
|
|
112
|
+
def active?
|
|
113
|
+
trace_point_lock.synchronize do
|
|
114
|
+
!!@compiled_trace_point
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Returns an array of RubVM::InstructionSequence (i.e. the compiled code)
|
|
119
|
+
# for the provided path.
|
|
120
|
+
#
|
|
121
|
+
# The argument can be a full path to a Ruby source code file or a
|
|
122
|
+
# suffix (basename + one or more directories preceding the basename).
|
|
123
|
+
# The idea with suffix matches is that file paths are likely to
|
|
124
|
+
# be different between development and production environments and
|
|
125
|
+
# the source control system uses relative paths and doesn't have
|
|
126
|
+
# absolute paths at all.
|
|
127
|
+
#
|
|
128
|
+
# Suffix matches are not guaranteed to be correct, meaning there may
|
|
129
|
+
# be multiple files with the same basename and they may all match a
|
|
130
|
+
# given suffix. In such cases, this method will return all matching
|
|
131
|
+
# paths (and all of these paths will be attempted to be instrumented
|
|
132
|
+
# by upstream code).
|
|
133
|
+
#
|
|
134
|
+
# If the suffix matches one of the paths completely (which requires it
|
|
135
|
+
# to be an absolute path), only the exactly matching path is returned.
|
|
136
|
+
# Otherwise all known paths that end in the suffix are returned.
|
|
137
|
+
# If no paths match, an empty array is returned.
|
|
138
|
+
def iseqs_for_path_suffix(suffix)
|
|
139
|
+
registry_lock.synchronize do
|
|
140
|
+
exact = registry[suffix]
|
|
141
|
+
return [suffix, exact] if exact
|
|
142
|
+
|
|
143
|
+
suffix = suffix.dup
|
|
144
|
+
loop do
|
|
145
|
+
inexact = []
|
|
146
|
+
registry.each do |path, iseq|
|
|
147
|
+
if Utils.path_matches_suffix?(path, suffix)
|
|
148
|
+
inexact << [path, iseq]
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
if inexact.length > 1
|
|
152
|
+
raise Error::MultiplePathsMatch, "Multiple paths matched requested suffix"
|
|
153
|
+
end
|
|
154
|
+
if inexact.any?
|
|
155
|
+
return inexact.first
|
|
156
|
+
end
|
|
157
|
+
return nil unless suffix.include?('/')
|
|
158
|
+
suffix.sub!(%r{.*/+}, '')
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Stops tracking code that is being loaded.
|
|
164
|
+
#
|
|
165
|
+
# This method should ordinarily never be called - if a file is loaded
|
|
166
|
+
# when code tracking is not active, this file will not be instrumentable
|
|
167
|
+
# by line probes.
|
|
168
|
+
#
|
|
169
|
+
# This method is intended for test suite use only, where multiple
|
|
170
|
+
# code tracker instances are created, to fully clean up the old instances.
|
|
171
|
+
def stop
|
|
172
|
+
# Permit multiple stop calls.
|
|
173
|
+
trace_point_lock.synchronize do
|
|
174
|
+
@compiled_trace_point&.disable
|
|
175
|
+
# Clear the instance variable so that the trace point may be
|
|
176
|
+
# reinstated in the future.
|
|
177
|
+
@compiled_trace_point = nil
|
|
178
|
+
end
|
|
179
|
+
clear
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Clears the stored mapping from paths to compiled code.
|
|
183
|
+
#
|
|
184
|
+
# This method should normally never be called. It is meant to be
|
|
185
|
+
# used only by the test suite.
|
|
186
|
+
def clear
|
|
187
|
+
registry_lock.synchronize do
|
|
188
|
+
registry.clear
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
private
|
|
193
|
+
|
|
194
|
+
# Mapping from paths of loaded files to RubyVM::InstructionSequence
|
|
195
|
+
# objects representing compiled code of those files.
|
|
196
|
+
attr_reader :registry
|
|
197
|
+
|
|
198
|
+
attr_reader :trace_point_lock
|
|
199
|
+
attr_reader :registry_lock
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# rubocop:enable Lint/AssignmentInCondition
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module DI
|
|
5
|
+
# Component for dynamic instrumentation.
|
|
6
|
+
#
|
|
7
|
+
# Only one instance of the Component should ever be active;
|
|
8
|
+
# if configuration is changed, the old distance should be shut down
|
|
9
|
+
# prior to the new instance being created.
|
|
10
|
+
#
|
|
11
|
+
# The Component instance stores all state related to DI, for example
|
|
12
|
+
# which probes have been retrieved via remote config,
|
|
13
|
+
# intalled tracepoints and so on. Component will clean up all
|
|
14
|
+
# resources and installed tracepoints upon shutdown.
|
|
15
|
+
class Component
|
|
16
|
+
class << self
|
|
17
|
+
def build(settings, agent_settings, logger, telemetry: nil)
|
|
18
|
+
return unless settings.respond_to?(:dynamic_instrumentation) && settings.dynamic_instrumentation.enabled
|
|
19
|
+
|
|
20
|
+
unless settings.respond_to?(:remote) && settings.remote.enabled
|
|
21
|
+
logger.warn("di: dynamic instrumentation could not be enabled because Remote Configuration Management is not available. To enable Remote Configuration, see https://docs.datadoghq.com/agent/remote_config")
|
|
22
|
+
return
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
return unless environment_supported?(settings, logger)
|
|
26
|
+
|
|
27
|
+
new(settings, agent_settings, logger, code_tracker: DI.code_tracker, telemetry: telemetry).tap do |component|
|
|
28
|
+
DI.add_current_component(component)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Checks whether the runtime environment is supported by
|
|
33
|
+
# dynamic instrumentation. Currently we only require that, if Rails
|
|
34
|
+
# is used, that Rails environment is not development because
|
|
35
|
+
# DI does not currently support code unloading and reloading.
|
|
36
|
+
def environment_supported?(settings, logger)
|
|
37
|
+
# TODO add tests?
|
|
38
|
+
unless settings.dynamic_instrumentation.internal.development
|
|
39
|
+
if Datadog::Core::Environment::Execution.development?
|
|
40
|
+
logger.warn("di: development environment detected; not enabling dynamic instrumentation")
|
|
41
|
+
return false
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
if RUBY_ENGINE != 'ruby'
|
|
45
|
+
logger.warn("di: cannot enable dynamic instrumentation: MRI is required, but running on #{RUBY_ENGINE}")
|
|
46
|
+
return false
|
|
47
|
+
end
|
|
48
|
+
if RUBY_VERSION < '2.6'
|
|
49
|
+
logger.warn("di: cannot enable dynamic instrumentation: Ruby 2.6+ is required, but running on #{RUBY_VERSION}")
|
|
50
|
+
return false
|
|
51
|
+
end
|
|
52
|
+
true
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def initialize(settings, agent_settings, logger, code_tracker: nil, telemetry: nil)
|
|
57
|
+
@settings = settings
|
|
58
|
+
@agent_settings = agent_settings
|
|
59
|
+
logger = DI::Logger.new(settings, logger)
|
|
60
|
+
@logger = logger
|
|
61
|
+
@telemetry = telemetry
|
|
62
|
+
@code_tracker = code_tracker
|
|
63
|
+
@redactor = Redactor.new(settings)
|
|
64
|
+
@serializer = Serializer.new(settings, redactor, telemetry: telemetry)
|
|
65
|
+
@instrumenter = Instrumenter.new(settings, serializer, logger, code_tracker: code_tracker, telemetry: telemetry)
|
|
66
|
+
@probe_notifier_worker = ProbeNotifierWorker.new(settings, logger, agent_settings: agent_settings, telemetry: telemetry)
|
|
67
|
+
@probe_notification_builder = ProbeNotificationBuilder.new(settings, serializer)
|
|
68
|
+
@probe_manager = ProbeManager.new(settings, instrumenter, probe_notification_builder, probe_notifier_worker, logger, telemetry: telemetry)
|
|
69
|
+
probe_notifier_worker.start
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
attr_reader :settings
|
|
73
|
+
attr_reader :agent_settings
|
|
74
|
+
attr_reader :logger
|
|
75
|
+
attr_reader :telemetry
|
|
76
|
+
attr_reader :code_tracker
|
|
77
|
+
attr_reader :instrumenter
|
|
78
|
+
attr_reader :probe_notifier_worker
|
|
79
|
+
attr_reader :probe_notification_builder
|
|
80
|
+
attr_reader :probe_manager
|
|
81
|
+
attr_reader :redactor
|
|
82
|
+
attr_reader :serializer
|
|
83
|
+
|
|
84
|
+
# Shuts down dynamic instrumentation.
|
|
85
|
+
#
|
|
86
|
+
# Removes all code hooks and stops background threads.
|
|
87
|
+
#
|
|
88
|
+
# Does not clear out the code tracker, because it's only populated
|
|
89
|
+
# by code when code is compiled and therefore, if the code tracker
|
|
90
|
+
# was replaced by a new instance, the new instance of it wouldn't have
|
|
91
|
+
# any of the already loaded code tracked.
|
|
92
|
+
def shutdown!(replacement = nil)
|
|
93
|
+
DI.remove_current_component(self)
|
|
94
|
+
|
|
95
|
+
probe_manager.clear_hooks
|
|
96
|
+
probe_manager.close
|
|
97
|
+
probe_notifier_worker.stop
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def parse_probe_spec_and_notify(probe_spec)
|
|
101
|
+
probe = ProbeBuilder.build_from_remote_config(probe_spec)
|
|
102
|
+
rescue => exc
|
|
103
|
+
begin
|
|
104
|
+
probe = Struct.new(:id).new(
|
|
105
|
+
probe_spec['id'],
|
|
106
|
+
)
|
|
107
|
+
payload = probe_notification_builder.build_errored(probe, exc)
|
|
108
|
+
probe_notifier_worker.add_status(payload)
|
|
109
|
+
rescue # standard:disable Lint/UselessRescue
|
|
110
|
+
# TODO report via instrumentation telemetry?
|
|
111
|
+
raise
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
raise
|
|
115
|
+
else
|
|
116
|
+
payload = probe_notification_builder.build_received(probe)
|
|
117
|
+
probe_notifier_worker.add_status(payload)
|
|
118
|
+
probe
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module DI
|
|
5
|
+
module Configuration
|
|
6
|
+
# Settings
|
|
7
|
+
module Settings
|
|
8
|
+
def self.extended(base)
|
|
9
|
+
base = base.singleton_class unless base.is_a?(Class)
|
|
10
|
+
add_settings!(base)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.add_settings!(base)
|
|
14
|
+
base.class_eval do
|
|
15
|
+
settings :dynamic_instrumentation do
|
|
16
|
+
option :enabled do |o|
|
|
17
|
+
o.type :bool
|
|
18
|
+
# The environment variable has an "internal" prefix so that
|
|
19
|
+
# any customers that have the "proper" environment variable
|
|
20
|
+
# turned on (i.e. DD_DYNAMIC_INSTRUMENTATION_ENABLED)
|
|
21
|
+
# do not enable Ruby DI until the latter is ready for
|
|
22
|
+
# customer testing.
|
|
23
|
+
o.env "DD_DYNAMIC_INSTRUMENTATION_ENABLED"
|
|
24
|
+
o.default false
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# An array of variable and key names to redact in addition to
|
|
28
|
+
# the built-in list of identifiers.
|
|
29
|
+
#
|
|
30
|
+
# The names will be normalized by removing the following
|
|
31
|
+
# symbols: _, -, @, $, and then matched to the complete
|
|
32
|
+
# variable or key name while ignoring the case.
|
|
33
|
+
# For example, specifying pass_word will match password and
|
|
34
|
+
# PASSWORD, and specifying PASSWORD will match pass_word.
|
|
35
|
+
# Note that, while the at sign (@) is used in Ruby to refer
|
|
36
|
+
# to instance variables, it does not have any significance
|
|
37
|
+
# for this setting (and is removed before matching identifiers).
|
|
38
|
+
option :redacted_identifiers do |o|
|
|
39
|
+
o.env "DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS"
|
|
40
|
+
o.env_parser do |value|
|
|
41
|
+
value&.split(",")&.map(&:strip)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
o.type :array
|
|
45
|
+
o.default []
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# An array of class names, values of which will be redacted from
|
|
49
|
+
# dynamic instrumentation snapshots. Example: FooClass.
|
|
50
|
+
# If a name is suffixed by '*', it becomes a wildcard and
|
|
51
|
+
# instances of any class whose name begins with the specified
|
|
52
|
+
# prefix will be redacted (example: Foo*).
|
|
53
|
+
#
|
|
54
|
+
# The names must all be fully-qualified, if any prefix of a
|
|
55
|
+
# class name is configured to be redacted, the value will be
|
|
56
|
+
# subject to redaction. For example, if Foo* is in the
|
|
57
|
+
# redacted class name list, instances of Foo, FooBar,
|
|
58
|
+
# Foo::Bar are all subject to redaction, but Bar::Foo will
|
|
59
|
+
# not be subject to redaction.
|
|
60
|
+
#
|
|
61
|
+
# Leading double-colon is permitted but has no effect,
|
|
62
|
+
# because the names are always considered to be fully-qualified.
|
|
63
|
+
# For example, adding ::Foo to the list will redact instances
|
|
64
|
+
# of Foo.
|
|
65
|
+
#
|
|
66
|
+
# Trailing colons should not be used because they will trigger
|
|
67
|
+
# exact match behavior but Ruby class names do not have
|
|
68
|
+
# trailing colons. For example, Foo:: will not cause anything
|
|
69
|
+
# to be redacted. Use Foo::* to redact all classes under
|
|
70
|
+
# the Foo module.
|
|
71
|
+
option :redacted_type_names do |o|
|
|
72
|
+
o.env "DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES"
|
|
73
|
+
o.env_parser do |value|
|
|
74
|
+
value&.split(",")&.map(&:strip)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
o.type :array
|
|
78
|
+
o.default []
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Maximum number of object or collection traversals that
|
|
82
|
+
# will be permitted when serializing captured values.
|
|
83
|
+
option :max_capture_depth do |o|
|
|
84
|
+
o.type :int
|
|
85
|
+
o.default 3
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Maximum number of collection (Array and Hash) elements
|
|
89
|
+
# that will be captured. Arrays and hashes that have more
|
|
90
|
+
# elements will be truncated to this many elements.
|
|
91
|
+
option :max_capture_collection_size do |o|
|
|
92
|
+
o.type :int
|
|
93
|
+
o.default 100
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Strings longer than this length will be truncated to this
|
|
97
|
+
# length in dynamic instrumentation snapshots.
|
|
98
|
+
#
|
|
99
|
+
# Note that while all values are stringified during
|
|
100
|
+
# serialization, only values which are originally instances
|
|
101
|
+
# of the String class are subject to this length limit.
|
|
102
|
+
option :max_capture_string_length do |o|
|
|
103
|
+
o.type :int
|
|
104
|
+
o.default 255
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Maximim number of attributes that will be captured for
|
|
108
|
+
# a single non-primitive value.
|
|
109
|
+
option :max_capture_attribute_count do |o|
|
|
110
|
+
o.type :int
|
|
111
|
+
o.default 20
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Settings in the 'internal' group are for internal Datadog
|
|
115
|
+
# use only, and are needed to test dynamic instrumentation or
|
|
116
|
+
# experiment with features not released to customers.
|
|
117
|
+
settings :internal do
|
|
118
|
+
# This option instructs dynamic instrumentation to use
|
|
119
|
+
# untargeted trace points when installing line probes and
|
|
120
|
+
# code tracking is not active.
|
|
121
|
+
# WARNING: untargeted trace points carry a massive performance
|
|
122
|
+
# penalty for the entire file in which a line probe is placed.
|
|
123
|
+
#
|
|
124
|
+
# If this option is set to false, which is the default,
|
|
125
|
+
# dynamic instrumentation will add probes that reference
|
|
126
|
+
# unknown files to the list of pending probes, and when
|
|
127
|
+
# the respective files are loaded, the line probes will be
|
|
128
|
+
# installed using targeted trace points. If the file in
|
|
129
|
+
# question is already loaded when the probe is received
|
|
130
|
+
# (for example, it is in a third-party library loaded during
|
|
131
|
+
# application boot), and code tracking was not active when
|
|
132
|
+
# the file was loaded, such files will not be instrumentable
|
|
133
|
+
# via line probes.
|
|
134
|
+
#
|
|
135
|
+
# If this option is set to true, dynamic instrumentation will
|
|
136
|
+
# install untargeted trace points for all line probes,
|
|
137
|
+
# regardless of whether the referenced file is loaded.
|
|
138
|
+
# This permits instrumenting code which was loaded prior to
|
|
139
|
+
# code tracking being activated and instrumenting lines when
|
|
140
|
+
# code tracking is not activated at all. However, untargeted
|
|
141
|
+
# trace points are extremely slow and will greatly degrade
|
|
142
|
+
# performance of *all* code executed while they are installed,
|
|
143
|
+
# not just the instrumentation target.
|
|
144
|
+
option :untargeted_trace_points do |o|
|
|
145
|
+
o.type :bool
|
|
146
|
+
o.default false
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# If true, all of the catch-all rescue blocks in DI
|
|
150
|
+
# will propagate the exceptions onward.
|
|
151
|
+
# WARNING: for internal Datadog use only - this will break
|
|
152
|
+
# the DI product and potentially the library in general in
|
|
153
|
+
# a multitude of ways, cause resource leakage, permanent
|
|
154
|
+
# performance decreases, etc.
|
|
155
|
+
option :propagate_all_exceptions do |o|
|
|
156
|
+
o.type :bool
|
|
157
|
+
o.default false
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Minimum interval, in seconds, between probe status and
|
|
161
|
+
# snapshot submissions to the agent. Probe notifier worker will
|
|
162
|
+
# batch together payloads submitted during each interval.
|
|
163
|
+
# A longer interval reduces the overhead imposed by dynamic
|
|
164
|
+
# instrumentation on the application, but also increases the
|
|
165
|
+
# time when application code cannot run (when the batches are
|
|
166
|
+
# being sent out by the probe notifier worker) and creates a
|
|
167
|
+
# possibility of dropping payloads if the queue gets too long.
|
|
168
|
+
option :min_send_interval do |o|
|
|
169
|
+
o.type :float
|
|
170
|
+
o.default 3
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Number of snapshots that can be stored in the probe
|
|
174
|
+
# notifier worker queue. Larger capacity runs the risk of
|
|
175
|
+
# creating snapshots that exceed the agent's request size
|
|
176
|
+
# limit. Smaller capacity increases the risk of dropping
|
|
177
|
+
# snapshots.
|
|
178
|
+
option :snapshot_queue_capacity do |o|
|
|
179
|
+
o.type :int
|
|
180
|
+
o.default 100
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Enable dynamic instrumentation in development environments.
|
|
184
|
+
# Currently DI does not fully implement support for code
|
|
185
|
+
# unloading and reloading, and is not supported in
|
|
186
|
+
# non-production environments.
|
|
187
|
+
option :development do |o|
|
|
188
|
+
o.type :bool
|
|
189
|
+
o.default false
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Enable logging of dynamic instrumentation activity.
|
|
193
|
+
# This is quite verbose.
|
|
194
|
+
option :trace_logging do |o|
|
|
195
|
+
o.type :bool
|
|
196
|
+
o.default false
|
|
197
|
+
|
|
198
|
+
# Use the same environment variable as the rest of
|
|
199
|
+
# dd-trace-rb logging for now. Could change to a
|
|
200
|
+
# dedicated environment variable in the future but
|
|
201
|
+
# will likely need a way to turn on remote config
|
|
202
|
+
# debugging (since DI uses RC for configuration).
|
|
203
|
+
o.env 'DD_TRACE_DEBUG'
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module DI
|
|
5
|
+
# Contains local and instance variables used when evaluating
|
|
6
|
+
# expressions in DI Expression Language.
|
|
7
|
+
#
|
|
8
|
+
# @api private
|
|
9
|
+
class Context
|
|
10
|
+
def initialize(probe:, settings:, serializer:, locals: nil,
|
|
11
|
+
# In Ruby everything is a method, therefore we should always have
|
|
12
|
+
# a target self. However, if we are not capturing a snapshot,
|
|
13
|
+
# there is no need to pass in the target self.
|
|
14
|
+
target_self: nil,
|
|
15
|
+
path: nil, caller_locations: nil,
|
|
16
|
+
serialized_entry_args: nil,
|
|
17
|
+
return_value: nil, duration: nil, exception: nil)
|
|
18
|
+
@probe = probe
|
|
19
|
+
@settings = settings
|
|
20
|
+
@serializer = serializer
|
|
21
|
+
@locals = locals
|
|
22
|
+
@target_self = target_self
|
|
23
|
+
@path = path
|
|
24
|
+
@caller_locations = caller_locations
|
|
25
|
+
@serialized_entry_args = serialized_entry_args
|
|
26
|
+
@return_value = return_value
|
|
27
|
+
@duration = duration
|
|
28
|
+
@exception = exception
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
attr_reader :probe
|
|
32
|
+
attr_reader :settings
|
|
33
|
+
attr_reader :serializer
|
|
34
|
+
attr_reader :locals
|
|
35
|
+
attr_reader :target_self
|
|
36
|
+
# Actual path of the instrumented file.
|
|
37
|
+
attr_reader :path
|
|
38
|
+
# TODO check how many stack frames we should be keeping/sending,
|
|
39
|
+
# this should be all frames for enriched probes and no frames for
|
|
40
|
+
# non-enriched probes?
|
|
41
|
+
attr_reader :caller_locations
|
|
42
|
+
attr_reader :serialized_entry_args
|
|
43
|
+
# Return value for the method, for a method probe
|
|
44
|
+
attr_reader :return_value
|
|
45
|
+
# How long the method took to execute, for a method probe
|
|
46
|
+
attr_reader :duration
|
|
47
|
+
# Exception raised by the method, if any, for a method probe
|
|
48
|
+
attr_reader :exception
|
|
49
|
+
|
|
50
|
+
def serialized_locals
|
|
51
|
+
# TODO cache?
|
|
52
|
+
locals && serializer.serialize_vars(locals,
|
|
53
|
+
depth: probe.max_capture_depth || settings.dynamic_instrumentation.max_capture_depth,
|
|
54
|
+
attribute_count: probe.max_capture_attribute_count || settings.dynamic_instrumentation.max_capture_attribute_count,)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def fetch(var_name)
|
|
58
|
+
unless locals
|
|
59
|
+
# TODO return "undefined" instead?
|
|
60
|
+
return nil
|
|
61
|
+
end
|
|
62
|
+
locals[var_name.to_sym]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def fetch_ivar(var_name)
|
|
66
|
+
target_self.instance_variable_get(var_name)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Datadog::DI::Serializer.register(condition: lambda { |value| ActiveRecord::Base === value }) do |serializer, value, name:, depth:| # steep:ignore
|
|
4
|
+
# steep thinks all of the arguments are nil here
|
|
5
|
+
# steep:ignore:start
|
|
6
|
+
value_to_serialize = {
|
|
7
|
+
attributes: value.attributes,
|
|
8
|
+
new_record: value.new_record?,
|
|
9
|
+
}
|
|
10
|
+
serializer.serialize_value(value_to_serialize, depth: depth ? depth - 1 : nil, type: value.class)
|
|
11
|
+
# steep:ignore:end
|
|
12
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module DI
|
|
5
|
+
module Contrib
|
|
6
|
+
# Railtie class initializes dynamic instrumentation contrib code
|
|
7
|
+
# in Rails environments.
|
|
8
|
+
class Railtie < Rails::Railtie
|
|
9
|
+
initializer 'datadog.dynamic_instrumentation.initialize' do |app|
|
|
10
|
+
Contrib.load_now
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../core/contrib/rails/utils'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module DI
|
|
7
|
+
module Contrib
|
|
8
|
+
module_function def load_now_or_later
|
|
9
|
+
if Datadog::Core::Contrib::Rails::Utils.railtie_supported?
|
|
10
|
+
Datadog.logger.debug('di: loading contrib/railtie')
|
|
11
|
+
require_relative 'contrib/railtie'
|
|
12
|
+
else
|
|
13
|
+
load_now
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# This method can be called more than once, to attempt to load
|
|
18
|
+
# DI components that depend on third-party libraries after additional
|
|
19
|
+
# dependencies are loaded (or potentially loaded).
|
|
20
|
+
module_function def load_now
|
|
21
|
+
if defined?(ActiveRecord::Base)
|
|
22
|
+
Datadog.logger.debug('di: loading contrib/active_record')
|
|
23
|
+
require_relative 'contrib/active_record'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|