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,177 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <datadog/profiling.h>
|
|
4
|
+
#include <ruby.h>
|
|
5
|
+
|
|
6
|
+
// A heap recorder keeps track of a collection of live heap objects.
|
|
7
|
+
//
|
|
8
|
+
// All allocations observed by this recorder for which a corresponding free was
|
|
9
|
+
// not yet observed are deemed as alive and can be iterated on to produce a
|
|
10
|
+
// live heap profile.
|
|
11
|
+
//
|
|
12
|
+
// NOTE: All public APIs of heap_recorder support receiving a NULL heap_recorder
|
|
13
|
+
// in which case the behaviour will be a noop.
|
|
14
|
+
//
|
|
15
|
+
// WARN: Unless otherwise stated the heap recorder APIs assume calls are done
|
|
16
|
+
// under the GVL.
|
|
17
|
+
typedef struct heap_recorder heap_recorder;
|
|
18
|
+
|
|
19
|
+
// Extra data associated with each live object being tracked.
|
|
20
|
+
typedef struct {
|
|
21
|
+
// The weight of this object from a sampling perspective.
|
|
22
|
+
//
|
|
23
|
+
// A notion of weight is preserved for each tracked object to allow for an approximate
|
|
24
|
+
// extrapolation to an unsampled view.
|
|
25
|
+
//
|
|
26
|
+
// Example: If we were sampling every 50 objects, then each sampled object
|
|
27
|
+
// could be seen as being representative of 50 objects.
|
|
28
|
+
unsigned int weight;
|
|
29
|
+
|
|
30
|
+
// Size of this object in memory.
|
|
31
|
+
// NOTE: This only gets updated during heap_recorder_prepare_iteration and only
|
|
32
|
+
// for those objects that meet the minimum iteration age requirements.
|
|
33
|
+
size_t size;
|
|
34
|
+
|
|
35
|
+
// The class of the object that we're tracking.
|
|
36
|
+
// NOTE: This is optional and will be set to NULL if not set.
|
|
37
|
+
ddog_prof_ManagedStringId class;
|
|
38
|
+
|
|
39
|
+
// The GC allocation gen in which we saw this object being allocated.
|
|
40
|
+
//
|
|
41
|
+
// This enables us to calculate the age of this object in terms of GC executions.
|
|
42
|
+
size_t alloc_gen;
|
|
43
|
+
|
|
44
|
+
// The age of this object in terms of GC generations.
|
|
45
|
+
// NOTE: This only gets updated during heap_recorder_prepare_iteration
|
|
46
|
+
size_t gen_age;
|
|
47
|
+
|
|
48
|
+
// Whether this object was previously seen as being frozen. If this is the case,
|
|
49
|
+
// we'll skip any further size updates since frozen objects are supposed to be
|
|
50
|
+
// immutable.
|
|
51
|
+
bool is_frozen;
|
|
52
|
+
} live_object_data;
|
|
53
|
+
|
|
54
|
+
// Data that is made available to iterators of heap recorder data for each live object
|
|
55
|
+
// tracked therein.
|
|
56
|
+
typedef struct {
|
|
57
|
+
ddog_prof_Slice_Location locations;
|
|
58
|
+
live_object_data object_data;
|
|
59
|
+
} heap_recorder_iteration_data;
|
|
60
|
+
|
|
61
|
+
// Initialize a new heap recorder.
|
|
62
|
+
heap_recorder* heap_recorder_new(ddog_prof_ManagedStringStorage string_storage);
|
|
63
|
+
|
|
64
|
+
// Free a previously initialized heap recorder.
|
|
65
|
+
void heap_recorder_free(heap_recorder *heap_recorder);
|
|
66
|
+
|
|
67
|
+
// Sets whether this heap recorder should keep track of sizes or not.
|
|
68
|
+
//
|
|
69
|
+
// If set to true, the heap recorder will attempt to determine the approximate sizes of
|
|
70
|
+
// tracked objects and wield them during iteration.
|
|
71
|
+
// If set to false, sizes returned during iteration should not be used/relied on (they
|
|
72
|
+
// may be 0 or the last determined size before disabling the tracking of sizes).
|
|
73
|
+
//
|
|
74
|
+
// NOTE: Default is true, i.e., it will attempt to determine approximate sizes of tracked
|
|
75
|
+
// objects.
|
|
76
|
+
void heap_recorder_set_size_enabled(heap_recorder *heap_recorder, bool size_enabled);
|
|
77
|
+
|
|
78
|
+
// Set sample rate used by this heap recorder.
|
|
79
|
+
//
|
|
80
|
+
// Controls how many recordings will be ignored before committing a heap allocation and
|
|
81
|
+
// the weight of the committed heap allocation.
|
|
82
|
+
//
|
|
83
|
+
// A value of 1 will effectively track all objects that are passed through
|
|
84
|
+
// start/end_heap_allocation_recording pairs. A value of 10 will only track every 10th
|
|
85
|
+
// object passed through such calls and its effective weight for the purposes of heap
|
|
86
|
+
// profiling will be multiplied by 10.
|
|
87
|
+
//
|
|
88
|
+
// NOTE: Default is 1, i.e., track all heap allocation recordings.
|
|
89
|
+
//
|
|
90
|
+
// WARN: Non-positive values will lead to an exception being thrown.
|
|
91
|
+
void heap_recorder_set_sample_rate(heap_recorder *heap_recorder, int sample_rate);
|
|
92
|
+
|
|
93
|
+
// Do any cleanup needed after forking.
|
|
94
|
+
// WARN: Assumes this gets called before profiler is reinitialized on the fork
|
|
95
|
+
void heap_recorder_after_fork(heap_recorder *heap_recorder);
|
|
96
|
+
|
|
97
|
+
// Start a heap allocation recording on the heap recorder for a new object.
|
|
98
|
+
//
|
|
99
|
+
// This heap allocation recording needs to be ended via ::end_heap_allocation_recording
|
|
100
|
+
// before it will become fully committed and able to be iterated on.
|
|
101
|
+
//
|
|
102
|
+
// @param new_obj
|
|
103
|
+
// The newly allocated Ruby object/value.
|
|
104
|
+
// @param weight
|
|
105
|
+
// The sampling weight of this object.
|
|
106
|
+
//
|
|
107
|
+
// WARN: It needs to be paired with a ::end_heap_allocation_recording call.
|
|
108
|
+
void start_heap_allocation_recording(heap_recorder *heap_recorder, VALUE new_obj, unsigned int weight, ddog_CharSlice alloc_class);
|
|
109
|
+
|
|
110
|
+
// End a previously started heap allocation recording on the heap recorder.
|
|
111
|
+
//
|
|
112
|
+
// It is at this point that an allocated object will become fully tracked and able to be iterated on.
|
|
113
|
+
//
|
|
114
|
+
// @param locations The stacktrace representing the location of the allocation.
|
|
115
|
+
//
|
|
116
|
+
// WARN: It is illegal to call this without previously having called ::start_heap_allocation_recording.
|
|
117
|
+
// WARN: This method rescues exceptions with `rb_protect`, returning the exception state integer for the caller to handle.
|
|
118
|
+
__attribute__((warn_unused_result))
|
|
119
|
+
int end_heap_allocation_recording_with_rb_protect(heap_recorder *heap_recorder, ddog_prof_Slice_Location locations);
|
|
120
|
+
|
|
121
|
+
// Update the heap recorder, **checking young objects only**. The idea here is to align with GC: most young objects never
|
|
122
|
+
// survive enough GC generations, and thus periodically running this method reduces memory usage (we get rid of
|
|
123
|
+
// these objects quicker) and hopefully reduces tail latency (because there's less objects at serialization time to check).
|
|
124
|
+
void heap_recorder_update_young_objects(heap_recorder *heap_recorder);
|
|
125
|
+
|
|
126
|
+
// Update the heap recorder to reflect the latest state of the VM and prepare internal structures
|
|
127
|
+
// for efficient iteration.
|
|
128
|
+
//
|
|
129
|
+
// WARN: This must be called strictly before iteration. Failing to do so will result in exceptions.
|
|
130
|
+
void heap_recorder_prepare_iteration(heap_recorder *heap_recorder);
|
|
131
|
+
|
|
132
|
+
// Optimize the heap recorder by cleaning up any data that might have been prepared specifically
|
|
133
|
+
// for the purpose of iterating over the heap recorder data.
|
|
134
|
+
//
|
|
135
|
+
// WARN: This must be called strictly after iteration to ensure proper cleanup and to keep the memory
|
|
136
|
+
// profile of the heap recorder low.
|
|
137
|
+
void heap_recorder_finish_iteration(heap_recorder *heap_recorder);
|
|
138
|
+
|
|
139
|
+
// Iterate over each live object being tracked by the heap recorder.
|
|
140
|
+
//
|
|
141
|
+
// NOTE: Iteration can be called without holding the Ruby Global VM lock.
|
|
142
|
+
// WARN: This must be called strictly after heap_recorder_prepare_iteration and before
|
|
143
|
+
// heap_recorder_finish_iteration.
|
|
144
|
+
//
|
|
145
|
+
// @param for_each_callback
|
|
146
|
+
// A callback function that shall be called for each live object being tracked
|
|
147
|
+
// by the heap recorder. Alongside the iteration_data for each live object,
|
|
148
|
+
// a second argument will be forwarded with the contents of the optional
|
|
149
|
+
// for_each_callback_extra_arg. Iteration will continue until the callback
|
|
150
|
+
// returns false or we run out of objects.
|
|
151
|
+
// @param for_each_callback_extra_arg
|
|
152
|
+
// Optional (NULL if empty) extra data that should be passed to the
|
|
153
|
+
// callback function alongside the data for each live tracked object.
|
|
154
|
+
// @return true if iteration ran, false if something prevented it from running.
|
|
155
|
+
bool heap_recorder_for_each_live_object(
|
|
156
|
+
heap_recorder *heap_recorder,
|
|
157
|
+
bool (*for_each_callback)(heap_recorder_iteration_data data, void* extra_arg),
|
|
158
|
+
void *for_each_callback_extra_arg);
|
|
159
|
+
|
|
160
|
+
// Return a Ruby hash containing a snapshot of this recorder's interesting state at calling time.
|
|
161
|
+
// WARN: This allocates in the Ruby VM and therefore should not be called without the
|
|
162
|
+
// VM lock or during GC.
|
|
163
|
+
VALUE heap_recorder_state_snapshot(heap_recorder *heap_recorder);
|
|
164
|
+
|
|
165
|
+
// v--- TEST-ONLY APIs ---v
|
|
166
|
+
|
|
167
|
+
// Returns a Ruby string with a representation of internal data helpful to
|
|
168
|
+
// troubleshoot issues such as unexpected test failures.
|
|
169
|
+
VALUE heap_recorder_testonly_debug(heap_recorder *heap_recorder);
|
|
170
|
+
|
|
171
|
+
// Check if a given object_id is being tracked or not
|
|
172
|
+
VALUE heap_recorder_testonly_is_object_recorded(heap_recorder *heap_recorder, VALUE obj_id);
|
|
173
|
+
|
|
174
|
+
// Used to ensure that a GC actually triggers an update of the objects
|
|
175
|
+
void heap_recorder_testonly_reset_last_update(heap_recorder *heap_recorder);
|
|
176
|
+
|
|
177
|
+
void heap_recorder_testonly_benchmark_intern(heap_recorder *heap_recorder, ddog_CharSlice string, int times, bool use_all);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <stdint.h>
|
|
4
|
+
|
|
5
|
+
// @ivoanjo: After trying to read through https://stackoverflow.com/questions/3437404/min-and-max-in-c I decided I
|
|
6
|
+
// don't like C and I just implemented this as a function.
|
|
7
|
+
static inline uint64_t uint64_max_of(uint64_t a, uint64_t b) { return a > b ? a : b; }
|
|
8
|
+
static inline uint64_t uint64_min_of(uint64_t a, uint64_t b) { return a > b ? b : a; }
|
|
9
|
+
static inline long long_max_of(long a, long b) { return a > b ? a : b; }
|
|
10
|
+
static inline long long_min_of(long a, long b) { return a > b ? b : a; }
|
|
11
|
+
static inline double double_max_of(double a, double b) { return a > b ? a : b; }
|
|
12
|
+
static inline double double_min_of(double a, double b) { return a > b ? b : a; }
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <ruby/thread.h>
|
|
3
|
+
#include <datadog/profiling.h>
|
|
4
|
+
#include "helpers.h"
|
|
5
|
+
#include "libdatadog_helpers.h"
|
|
6
|
+
#include "ruby_helpers.h"
|
|
7
|
+
#include "encoded_profile.h"
|
|
8
|
+
|
|
9
|
+
// Used to report profiling data to Datadog.
|
|
10
|
+
// This file implements the native bits of the Datadog::Profiling::HttpTransport class
|
|
11
|
+
|
|
12
|
+
static VALUE ok_symbol = Qnil; // :ok in Ruby
|
|
13
|
+
static VALUE error_symbol = Qnil; // :error in Ruby
|
|
14
|
+
|
|
15
|
+
static VALUE library_version_string = Qnil;
|
|
16
|
+
|
|
17
|
+
typedef struct {
|
|
18
|
+
ddog_prof_ProfileExporter *exporter;
|
|
19
|
+
ddog_prof_Request_Result *build_result;
|
|
20
|
+
ddog_CancellationToken *cancel_token;
|
|
21
|
+
ddog_prof_Result_HttpStatus result;
|
|
22
|
+
bool send_ran;
|
|
23
|
+
} call_exporter_without_gvl_arguments;
|
|
24
|
+
|
|
25
|
+
static inline ddog_ByteSlice byte_slice_from_ruby_string(VALUE string);
|
|
26
|
+
static VALUE _native_validate_exporter(VALUE self, VALUE exporter_configuration);
|
|
27
|
+
static ddog_prof_ProfileExporter_Result create_exporter(VALUE exporter_configuration, VALUE tags_as_array);
|
|
28
|
+
static VALUE handle_exporter_failure(ddog_prof_ProfileExporter_Result exporter_result);
|
|
29
|
+
static VALUE _native_do_export(
|
|
30
|
+
VALUE self,
|
|
31
|
+
VALUE exporter_configuration,
|
|
32
|
+
VALUE upload_timeout_milliseconds,
|
|
33
|
+
VALUE flush
|
|
34
|
+
);
|
|
35
|
+
static void *call_exporter_without_gvl(void *call_args);
|
|
36
|
+
static void interrupt_exporter_call(void *cancel_token);
|
|
37
|
+
|
|
38
|
+
void http_transport_init(VALUE profiling_module) {
|
|
39
|
+
VALUE http_transport_class = rb_define_class_under(profiling_module, "HttpTransport", rb_cObject);
|
|
40
|
+
|
|
41
|
+
rb_define_singleton_method(http_transport_class, "_native_validate_exporter", _native_validate_exporter, 1);
|
|
42
|
+
rb_define_singleton_method(http_transport_class, "_native_do_export", _native_do_export, 3);
|
|
43
|
+
|
|
44
|
+
ok_symbol = ID2SYM(rb_intern_const("ok"));
|
|
45
|
+
error_symbol = ID2SYM(rb_intern_const("error"));
|
|
46
|
+
|
|
47
|
+
library_version_string = datadog_gem_version();
|
|
48
|
+
rb_global_variable(&library_version_string);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static inline ddog_ByteSlice byte_slice_from_ruby_string(VALUE string) {
|
|
52
|
+
ENFORCE_TYPE(string, T_STRING);
|
|
53
|
+
ddog_ByteSlice byte_slice = {.ptr = (uint8_t *) StringValuePtr(string), .len = RSTRING_LEN(string)};
|
|
54
|
+
return byte_slice;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static VALUE _native_validate_exporter(DDTRACE_UNUSED VALUE _self, VALUE exporter_configuration) {
|
|
58
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
59
|
+
ddog_prof_ProfileExporter_Result exporter_result = create_exporter(exporter_configuration, rb_ary_new());
|
|
60
|
+
|
|
61
|
+
VALUE failure_tuple = handle_exporter_failure(exporter_result);
|
|
62
|
+
if (!NIL_P(failure_tuple)) return failure_tuple;
|
|
63
|
+
|
|
64
|
+
// We don't actually need the exporter for now -- we just wanted to validate that we could create it with the
|
|
65
|
+
// settings we were given
|
|
66
|
+
ddog_prof_Exporter_drop(&exporter_result.ok);
|
|
67
|
+
|
|
68
|
+
return rb_ary_new_from_args(2, ok_symbol, Qnil);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static ddog_prof_Endpoint endpoint_from(VALUE exporter_configuration) {
|
|
72
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
73
|
+
|
|
74
|
+
VALUE exporter_working_mode = rb_ary_entry(exporter_configuration, 0);
|
|
75
|
+
ENFORCE_TYPE(exporter_working_mode, T_SYMBOL);
|
|
76
|
+
ID working_mode = SYM2ID(exporter_working_mode);
|
|
77
|
+
|
|
78
|
+
if (working_mode == rb_intern("agentless")) {
|
|
79
|
+
VALUE site = rb_ary_entry(exporter_configuration, 1);
|
|
80
|
+
VALUE api_key = rb_ary_entry(exporter_configuration, 2);
|
|
81
|
+
|
|
82
|
+
return ddog_prof_Endpoint_agentless(char_slice_from_ruby_string(site), char_slice_from_ruby_string(api_key));
|
|
83
|
+
} else if (working_mode == rb_intern("agent")) {
|
|
84
|
+
VALUE base_url = rb_ary_entry(exporter_configuration, 1);
|
|
85
|
+
|
|
86
|
+
return ddog_prof_Endpoint_agent(char_slice_from_ruby_string(base_url));
|
|
87
|
+
} else {
|
|
88
|
+
rb_raise(rb_eArgError, "Failed to initialize transport: Unexpected working mode, expected :agentless or :agent");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
static ddog_prof_ProfileExporter_Result create_exporter(VALUE exporter_configuration, VALUE tags_as_array) {
|
|
93
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
94
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
95
|
+
|
|
96
|
+
// This needs to be called BEFORE convert_tags since it can raise an exception and thus cause the ddog_Vec_Tag
|
|
97
|
+
// to be leaked.
|
|
98
|
+
ddog_prof_Endpoint endpoint = endpoint_from(exporter_configuration);
|
|
99
|
+
|
|
100
|
+
ddog_Vec_Tag tags = convert_tags(tags_as_array);
|
|
101
|
+
|
|
102
|
+
ddog_CharSlice library_name = DDOG_CHARSLICE_C("dd-trace-rb");
|
|
103
|
+
ddog_CharSlice library_version = char_slice_from_ruby_string(library_version_string);
|
|
104
|
+
ddog_CharSlice profiling_family = DDOG_CHARSLICE_C("ruby");
|
|
105
|
+
|
|
106
|
+
ddog_prof_ProfileExporter_Result exporter_result =
|
|
107
|
+
ddog_prof_Exporter_new(library_name, library_version, profiling_family, &tags, endpoint);
|
|
108
|
+
|
|
109
|
+
ddog_Vec_Tag_drop(tags);
|
|
110
|
+
|
|
111
|
+
return exporter_result;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static void validate_token(ddog_CancellationToken token, const char *file, int line) {
|
|
115
|
+
if (token.inner == NULL) rb_raise(rb_eRuntimeError, "Unexpected: Validation token was empty at %s:%d", file, line);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
static VALUE handle_exporter_failure(ddog_prof_ProfileExporter_Result exporter_result) {
|
|
119
|
+
return exporter_result.tag == DDOG_PROF_PROFILE_EXPORTER_RESULT_OK_HANDLE_PROFILE_EXPORTER ?
|
|
120
|
+
Qnil :
|
|
121
|
+
rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&exporter_result.err));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Note: This function handles a bunch of libdatadog dynamically-allocated objects, so it MUST not use any Ruby APIs
|
|
125
|
+
// which can raise exceptions, otherwise the objects will be leaked.
|
|
126
|
+
static VALUE perform_export(
|
|
127
|
+
ddog_prof_ProfileExporter *exporter,
|
|
128
|
+
ddog_prof_EncodedProfile *profile,
|
|
129
|
+
ddog_prof_Exporter_Slice_File files_to_compress_and_export,
|
|
130
|
+
ddog_CharSlice internal_metadata,
|
|
131
|
+
ddog_CharSlice info
|
|
132
|
+
) {
|
|
133
|
+
ddog_prof_Request_Result build_result = ddog_prof_Exporter_Request_build(
|
|
134
|
+
exporter,
|
|
135
|
+
profile,
|
|
136
|
+
files_to_compress_and_export,
|
|
137
|
+
/* files_to_export_unmodified: */ ddog_prof_Exporter_Slice_File_empty(),
|
|
138
|
+
/* optional_additional_tags: */ NULL,
|
|
139
|
+
&internal_metadata,
|
|
140
|
+
&info
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
if (build_result.tag == DDOG_PROF_REQUEST_RESULT_ERR_HANDLE_REQUEST) {
|
|
144
|
+
ddog_prof_Exporter_drop(exporter);
|
|
145
|
+
return rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&build_result.err));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
ddog_CancellationToken cancel_token_request = ddog_CancellationToken_new();
|
|
149
|
+
ddog_CancellationToken cancel_token_interrupt = ddog_CancellationToken_clone(&cancel_token_request);
|
|
150
|
+
|
|
151
|
+
validate_token(cancel_token_request, __FILE__, __LINE__);
|
|
152
|
+
validate_token(cancel_token_interrupt, __FILE__, __LINE__);
|
|
153
|
+
|
|
154
|
+
// We'll release the Global VM Lock while we're calling send, so that the Ruby VM can continue to work while this
|
|
155
|
+
// is pending
|
|
156
|
+
call_exporter_without_gvl_arguments args =
|
|
157
|
+
{.exporter = exporter, .build_result = &build_result, .cancel_token = &cancel_token_request, .send_ran = false};
|
|
158
|
+
|
|
159
|
+
// We use rb_thread_call_without_gvl2 instead of rb_thread_call_without_gvl as the gvl2 variant never raises any
|
|
160
|
+
// exceptions.
|
|
161
|
+
//
|
|
162
|
+
// (With rb_thread_call_without_gvl, if someone calls Thread#kill or something like it on the current thread,
|
|
163
|
+
// the exception will be raised without us being able to clean up dynamically-allocated stuff, which would leak.)
|
|
164
|
+
//
|
|
165
|
+
// Instead, we take care of our own exception checking, and delay the exception raising (`rb_jump_tag` call) until
|
|
166
|
+
// after we cleaned up any dynamically-allocated resources.
|
|
167
|
+
//
|
|
168
|
+
// We run rb_thread_call_without_gvl2 in a loop since an "interrupt" may cause it to return before even running
|
|
169
|
+
// our code. In such a case, we retry the call -- unless the interrupt was caused by an exception being pending,
|
|
170
|
+
// and in that case we also give up and break out of the loop.
|
|
171
|
+
int pending_exception = 0;
|
|
172
|
+
|
|
173
|
+
while (!args.send_ran && !pending_exception) {
|
|
174
|
+
rb_thread_call_without_gvl2(call_exporter_without_gvl, &args, interrupt_exporter_call, &cancel_token_interrupt);
|
|
175
|
+
|
|
176
|
+
// To make sure we don't leak memory, we never check for pending exceptions if send ran
|
|
177
|
+
if (!args.send_ran) pending_exception = check_if_pending_exception();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Cleanup exporter and token, no longer needed
|
|
181
|
+
ddog_CancellationToken_drop(&cancel_token_request);
|
|
182
|
+
ddog_CancellationToken_drop(&cancel_token_interrupt);
|
|
183
|
+
ddog_prof_Exporter_drop(exporter);
|
|
184
|
+
|
|
185
|
+
if (pending_exception) {
|
|
186
|
+
// If we got here send did not run, so we need to explicitly dispose of the request
|
|
187
|
+
ddog_prof_Exporter_Request_drop(&build_result.ok);
|
|
188
|
+
|
|
189
|
+
// Let Ruby propagate the exception. This will not return.
|
|
190
|
+
rb_jump_tag(pending_exception);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// The request itself does not need to be freed as libdatadog takes ownership of it as part of sending.
|
|
194
|
+
|
|
195
|
+
ddog_prof_Result_HttpStatus result = args.result;
|
|
196
|
+
|
|
197
|
+
return result.tag == DDOG_PROF_RESULT_HTTP_STATUS_OK_HTTP_STATUS ?
|
|
198
|
+
rb_ary_new_from_args(2, ok_symbol, UINT2NUM(result.ok.code)) :
|
|
199
|
+
rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&result.err));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
static VALUE _native_do_export(
|
|
203
|
+
DDTRACE_UNUSED VALUE _self,
|
|
204
|
+
VALUE exporter_configuration,
|
|
205
|
+
VALUE upload_timeout_milliseconds,
|
|
206
|
+
VALUE flush
|
|
207
|
+
) {
|
|
208
|
+
VALUE encoded_profile = rb_funcall(flush, rb_intern("encoded_profile"), 0);
|
|
209
|
+
VALUE code_provenance_file_name = rb_funcall(flush, rb_intern("code_provenance_file_name"), 0);
|
|
210
|
+
VALUE code_provenance_data = rb_funcall(flush, rb_intern("code_provenance_data"), 0);
|
|
211
|
+
VALUE tags_as_array = rb_funcall(flush, rb_intern("tags_as_array"), 0);
|
|
212
|
+
VALUE internal_metadata_json = rb_funcall(flush, rb_intern("internal_metadata_json"), 0);
|
|
213
|
+
VALUE info_json = rb_funcall(flush, rb_intern("info_json"), 0);
|
|
214
|
+
|
|
215
|
+
ENFORCE_TYPE(upload_timeout_milliseconds, T_FIXNUM);
|
|
216
|
+
enforce_encoded_profile_instance(encoded_profile);
|
|
217
|
+
ENFORCE_TYPE(code_provenance_file_name, T_STRING);
|
|
218
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
219
|
+
ENFORCE_TYPE(internal_metadata_json, T_STRING);
|
|
220
|
+
ENFORCE_TYPE(info_json, T_STRING);
|
|
221
|
+
|
|
222
|
+
// Code provenance can be disabled and in that case will be set to nil
|
|
223
|
+
bool have_code_provenance = !NIL_P(code_provenance_data);
|
|
224
|
+
if (have_code_provenance) ENFORCE_TYPE(code_provenance_data, T_STRING);
|
|
225
|
+
|
|
226
|
+
uint64_t timeout_milliseconds = NUM2ULONG(upload_timeout_milliseconds);
|
|
227
|
+
|
|
228
|
+
int to_compress_length = have_code_provenance ? 1 : 0;
|
|
229
|
+
ddog_prof_Exporter_File to_compress[to_compress_length];
|
|
230
|
+
ddog_prof_Exporter_Slice_File files_to_compress_and_export = {.ptr = to_compress, .len = to_compress_length};
|
|
231
|
+
|
|
232
|
+
if (have_code_provenance) {
|
|
233
|
+
to_compress[0] = (ddog_prof_Exporter_File) {
|
|
234
|
+
.name = char_slice_from_ruby_string(code_provenance_file_name),
|
|
235
|
+
.file = byte_slice_from_ruby_string(code_provenance_data),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
ddog_CharSlice internal_metadata = char_slice_from_ruby_string(internal_metadata_json);
|
|
240
|
+
ddog_CharSlice info = char_slice_from_ruby_string(info_json);
|
|
241
|
+
|
|
242
|
+
ddog_prof_ProfileExporter_Result exporter_result = create_exporter(exporter_configuration, tags_as_array);
|
|
243
|
+
// Note: Do not add anything that can raise exceptions after this line, as otherwise the exporter memory will leak
|
|
244
|
+
|
|
245
|
+
VALUE failure_tuple = handle_exporter_failure(exporter_result);
|
|
246
|
+
if (!NIL_P(failure_tuple)) return failure_tuple;
|
|
247
|
+
|
|
248
|
+
ddog_VoidResult timeout_result = ddog_prof_Exporter_set_timeout(&exporter_result.ok, timeout_milliseconds);
|
|
249
|
+
if (timeout_result.tag == DDOG_VOID_RESULT_ERR) {
|
|
250
|
+
// NOTE: Seems a bit harsh to fail the upload if we can't set a timeout. OTOH, this is only expected to fail
|
|
251
|
+
// if the exporter is not well built. Because such a situation should already be caught above I think it's
|
|
252
|
+
// preferable to leave this here as a virtually unreachable exception rather than ignoring it.
|
|
253
|
+
ddog_prof_Exporter_drop(&exporter_result.ok);
|
|
254
|
+
return rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&timeout_result.err));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return perform_export(
|
|
258
|
+
&exporter_result.ok,
|
|
259
|
+
to_ddog_prof_EncodedProfile(encoded_profile),
|
|
260
|
+
files_to_compress_and_export,
|
|
261
|
+
internal_metadata,
|
|
262
|
+
info
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
static void *call_exporter_without_gvl(void *call_args) {
|
|
267
|
+
call_exporter_without_gvl_arguments *args = (call_exporter_without_gvl_arguments*) call_args;
|
|
268
|
+
|
|
269
|
+
args->result = ddog_prof_Exporter_send(args->exporter, &args->build_result->ok, args->cancel_token);
|
|
270
|
+
args->send_ran = true;
|
|
271
|
+
|
|
272
|
+
return NULL; // Unused
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Called by Ruby when it wants to interrupt call_exporter_without_gvl above, e.g. when the app wants to exit cleanly
|
|
276
|
+
static void interrupt_exporter_call(void *cancel_token) {
|
|
277
|
+
// TODO: False here can mean two things: it was already cancelled OR it failed to cancel.
|
|
278
|
+
// Would be nice to change libdatadog to be able to distinguish between them...
|
|
279
|
+
ddog_CancellationToken_cancel((ddog_CancellationToken *) cancel_token);
|
|
280
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#include "libdatadog_helpers.h"
|
|
2
|
+
|
|
3
|
+
#include <ruby.h>
|
|
4
|
+
|
|
5
|
+
const char *ruby_value_type_to_string(enum ruby_value_type type) {
|
|
6
|
+
return ruby_value_type_to_char_slice(type).ptr;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
ddog_CharSlice ruby_value_type_to_char_slice(enum ruby_value_type type) {
|
|
10
|
+
switch (type) {
|
|
11
|
+
case(RUBY_T_NONE ): return DDOG_CHARSLICE_C("T_NONE");
|
|
12
|
+
case(RUBY_T_OBJECT ): return DDOG_CHARSLICE_C("T_OBJECT");
|
|
13
|
+
case(RUBY_T_CLASS ): return DDOG_CHARSLICE_C("T_CLASS");
|
|
14
|
+
case(RUBY_T_MODULE ): return DDOG_CHARSLICE_C("T_MODULE");
|
|
15
|
+
case(RUBY_T_FLOAT ): return DDOG_CHARSLICE_C("T_FLOAT");
|
|
16
|
+
case(RUBY_T_STRING ): return DDOG_CHARSLICE_C("T_STRING");
|
|
17
|
+
case(RUBY_T_REGEXP ): return DDOG_CHARSLICE_C("T_REGEXP");
|
|
18
|
+
case(RUBY_T_ARRAY ): return DDOG_CHARSLICE_C("T_ARRAY");
|
|
19
|
+
case(RUBY_T_HASH ): return DDOG_CHARSLICE_C("T_HASH");
|
|
20
|
+
case(RUBY_T_STRUCT ): return DDOG_CHARSLICE_C("T_STRUCT");
|
|
21
|
+
case(RUBY_T_BIGNUM ): return DDOG_CHARSLICE_C("T_BIGNUM");
|
|
22
|
+
case(RUBY_T_FILE ): return DDOG_CHARSLICE_C("T_FILE");
|
|
23
|
+
case(RUBY_T_DATA ): return DDOG_CHARSLICE_C("T_DATA");
|
|
24
|
+
case(RUBY_T_MATCH ): return DDOG_CHARSLICE_C("T_MATCH");
|
|
25
|
+
case(RUBY_T_COMPLEX ): return DDOG_CHARSLICE_C("T_COMPLEX");
|
|
26
|
+
case(RUBY_T_RATIONAL): return DDOG_CHARSLICE_C("T_RATIONAL");
|
|
27
|
+
case(RUBY_T_NIL ): return DDOG_CHARSLICE_C("T_NIL");
|
|
28
|
+
case(RUBY_T_TRUE ): return DDOG_CHARSLICE_C("T_TRUE");
|
|
29
|
+
case(RUBY_T_FALSE ): return DDOG_CHARSLICE_C("T_FALSE");
|
|
30
|
+
case(RUBY_T_SYMBOL ): return DDOG_CHARSLICE_C("T_SYMBOL");
|
|
31
|
+
case(RUBY_T_FIXNUM ): return DDOG_CHARSLICE_C("T_FIXNUM");
|
|
32
|
+
case(RUBY_T_UNDEF ): return DDOG_CHARSLICE_C("T_UNDEF");
|
|
33
|
+
case(RUBY_T_IMEMO ): return DDOG_CHARSLICE_C("T_IMEMO");
|
|
34
|
+
case(RUBY_T_NODE ): return DDOG_CHARSLICE_C("T_NODE");
|
|
35
|
+
case(RUBY_T_ICLASS ): return DDOG_CHARSLICE_C("T_ICLASS");
|
|
36
|
+
case(RUBY_T_ZOMBIE ): return DDOG_CHARSLICE_C("T_ZOMBIE");
|
|
37
|
+
#ifndef NO_T_MOVED
|
|
38
|
+
case(RUBY_T_MOVED ): return DDOG_CHARSLICE_C("T_MOVED");
|
|
39
|
+
#endif
|
|
40
|
+
default: return DDOG_CHARSLICE_C("BUG: Unknown value for ruby_value_type");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
size_t read_ddogerr_string_and_drop(ddog_Error *error, char *string, size_t capacity) {
|
|
45
|
+
if (capacity == 0 || string == NULL) {
|
|
46
|
+
// short-circuit, we can't write anything
|
|
47
|
+
ddog_Error_drop(error);
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
ddog_CharSlice error_msg_slice = ddog_Error_message(error);
|
|
52
|
+
size_t error_msg_size = error_msg_slice.len;
|
|
53
|
+
// Account for extra null char for proper cstring
|
|
54
|
+
if (error_msg_size >= capacity) {
|
|
55
|
+
// Error message too big, lets truncate it to capacity - 1 to allow for extra null at end
|
|
56
|
+
error_msg_size = capacity - 1;
|
|
57
|
+
}
|
|
58
|
+
strncpy(string, error_msg_slice.ptr, error_msg_size);
|
|
59
|
+
string[error_msg_size] = '\0';
|
|
60
|
+
ddog_Error_drop(error);
|
|
61
|
+
return error_msg_size;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
ddog_prof_ManagedStringId intern_or_raise(ddog_prof_ManagedStringStorage string_storage, ddog_CharSlice string) {
|
|
65
|
+
if (string.len == 0) return (ddog_prof_ManagedStringId) { 0 }; // Id 0 is always an empty string, no need to ask
|
|
66
|
+
|
|
67
|
+
ddog_prof_ManagedStringStorageInternResult intern_result = ddog_prof_ManagedStringStorage_intern(string_storage, string);
|
|
68
|
+
if (intern_result.tag == DDOG_PROF_MANAGED_STRING_STORAGE_INTERN_RESULT_ERR) {
|
|
69
|
+
rb_raise(rb_eRuntimeError, "Failed to intern string: %"PRIsVALUE, get_error_details_and_drop(&intern_result.err));
|
|
70
|
+
}
|
|
71
|
+
return intern_result.ok;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void intern_all_or_raise(
|
|
75
|
+
ddog_prof_ManagedStringStorage string_storage,
|
|
76
|
+
ddog_prof_Slice_CharSlice strings,
|
|
77
|
+
ddog_prof_ManagedStringId *output_ids,
|
|
78
|
+
uintptr_t output_ids_size
|
|
79
|
+
) {
|
|
80
|
+
ddog_prof_MaybeError result = ddog_prof_ManagedStringStorage_intern_all(string_storage, strings, output_ids, output_ids_size);
|
|
81
|
+
if (result.tag == DDOG_PROF_OPTION_ERROR_SOME_ERROR) {
|
|
82
|
+
rb_raise(rb_eRuntimeError, "Failed to intern_all: %"PRIsVALUE, get_error_details_and_drop(&result.some));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <datadog/profiling.h>
|
|
4
|
+
#include "ruby_helpers.h"
|
|
5
|
+
|
|
6
|
+
static inline VALUE ruby_string_from_vec_u8(ddog_Vec_U8 string) {
|
|
7
|
+
return rb_str_new((char *) string.ptr, string.len);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// Utility function to be able to extract an error cstring from a ddog_Error.
|
|
11
|
+
// Returns the amount of characters written to string (which are necessarily
|
|
12
|
+
// bounded by capacity - 1 since the string will be null-terminated).
|
|
13
|
+
size_t read_ddogerr_string_and_drop(ddog_Error *error, char *string, size_t capacity);
|
|
14
|
+
|
|
15
|
+
// Used for pretty printing this Ruby enum. Returns "T_UNKNOWN_OR_MISSING_RUBY_VALUE_TYPE_ENTRY" for unknown elements.
|
|
16
|
+
// In practice, there's a few types that the profiler will probably never encounter, but I've added all entries of
|
|
17
|
+
// ruby_value_type that Ruby uses so that we can also use this for debugging.
|
|
18
|
+
const char *ruby_value_type_to_string(enum ruby_value_type type);
|
|
19
|
+
ddog_CharSlice ruby_value_type_to_char_slice(enum ruby_value_type type);
|
|
20
|
+
|
|
21
|
+
ddog_prof_ManagedStringId intern_or_raise(ddog_prof_ManagedStringStorage string_storage, ddog_CharSlice string);
|
|
22
|
+
|
|
23
|
+
void intern_all_or_raise(
|
|
24
|
+
ddog_prof_ManagedStringStorage string_storage,
|
|
25
|
+
ddog_prof_Slice_CharSlice strings,
|
|
26
|
+
ddog_prof_ManagedStringId *output_ids,
|
|
27
|
+
uintptr_t output_ids_size
|
|
28
|
+
);
|