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,31 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <datadog/profiling.h>
|
|
4
|
+
#include <ruby.h>
|
|
5
|
+
|
|
6
|
+
typedef struct {
|
|
7
|
+
int64_t cpu_time_ns;
|
|
8
|
+
int64_t wall_time_ns;
|
|
9
|
+
uint32_t cpu_or_wall_samples;
|
|
10
|
+
uint32_t alloc_samples;
|
|
11
|
+
uint32_t alloc_samples_unscaled;
|
|
12
|
+
bool heap_sample;
|
|
13
|
+
int64_t timeline_wall_time_ns;
|
|
14
|
+
} sample_values;
|
|
15
|
+
|
|
16
|
+
typedef struct {
|
|
17
|
+
ddog_prof_Slice_Label labels;
|
|
18
|
+
|
|
19
|
+
// This is used to allow the `Collectors::Stack` to modify the existing label, if any. This MUST be NULL or point
|
|
20
|
+
// somewhere inside the labels slice above.
|
|
21
|
+
ddog_prof_Label *state_label;
|
|
22
|
+
bool is_gvl_waiting_state;
|
|
23
|
+
|
|
24
|
+
int64_t end_timestamp_ns;
|
|
25
|
+
} sample_labels;
|
|
26
|
+
|
|
27
|
+
void record_sample(VALUE recorder_instance, ddog_prof_Slice_Location locations, sample_values values, sample_labels labels);
|
|
28
|
+
void record_endpoint(VALUE recorder_instance, uint64_t local_root_span_id, ddog_CharSlice endpoint);
|
|
29
|
+
void track_object(VALUE recorder_instance, VALUE new_object, unsigned int sample_weight, ddog_CharSlice alloc_class);
|
|
30
|
+
void recorder_after_gc_step(VALUE recorder_instance);
|
|
31
|
+
VALUE enforce_recorder_instance(VALUE object);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#include <errno.h>
|
|
2
|
+
#include <time.h>
|
|
3
|
+
|
|
4
|
+
#include "ruby_helpers.h"
|
|
5
|
+
#include "time_helpers.h"
|
|
6
|
+
|
|
7
|
+
// Design: The monotonic_to_system_epoch_state struct is kept somewhere by the caller, and MUST be initialized to
|
|
8
|
+
// MONOTONIC_TO_SYSTEM_EPOCH_INITIALIZER.
|
|
9
|
+
//
|
|
10
|
+
// This function is used by the ThreadContext collector to convert monotonic wall time timestamps which are used
|
|
11
|
+
// basically everywhere else in the codebase, into system epoch timestamps, which are needed by the timeline feature.
|
|
12
|
+
//
|
|
13
|
+
// There's a few ways we could have tackled this conversion, e.g. check the system clock on every call, or even
|
|
14
|
+
// use system clock timestamps elsewhere in the code.
|
|
15
|
+
// Using a system clock elsewhere has a few disadvantages (e.g. because it can move around if users adjust the system
|
|
16
|
+
// time). I also wanted to avoid calling system_epoch_time_now_ns(...) on every conversion.
|
|
17
|
+
//
|
|
18
|
+
// Thus I arrived at this solution: we calculate a delta between the monotonic clock and the system clock, and use
|
|
19
|
+
// that to convert the timestamps.
|
|
20
|
+
//
|
|
21
|
+
// To avoid the results of the system clock being off in cases where the system clock is adjusted while the profiler
|
|
22
|
+
// is running, every ~60 seconds of observed monotonic wall time we recalculate the delta. This means that worst case
|
|
23
|
+
// we'll have ~60 seconds of wrongly-timestamped data when the system clock jumps around, and in return we save the
|
|
24
|
+
// overhead of having to look up the system clock on every call to this function.
|
|
25
|
+
long monotonic_to_system_epoch_ns(monotonic_to_system_epoch_state *state, long monotonic_wall_time_ns) {
|
|
26
|
+
bool reference_needs_update =
|
|
27
|
+
(state->system_epoch_ns_reference == INVALID_TIME) ||
|
|
28
|
+
(state->delta_to_epoch_ns + monotonic_wall_time_ns > state->system_epoch_ns_reference + SECONDS_AS_NS(60));
|
|
29
|
+
|
|
30
|
+
if (reference_needs_update) {
|
|
31
|
+
state->system_epoch_ns_reference = system_epoch_time_now_ns(RAISE_ON_FAILURE);
|
|
32
|
+
long current_monotonic_wall_time_ns = monotonic_wall_time_now_ns(RAISE_ON_FAILURE);
|
|
33
|
+
|
|
34
|
+
state->delta_to_epoch_ns = state->system_epoch_ns_reference - current_monotonic_wall_time_ns;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return state->delta_to_epoch_ns + monotonic_wall_time_ns;
|
|
38
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <stdbool.h>
|
|
4
|
+
#include <errno.h>
|
|
5
|
+
#include <time.h>
|
|
6
|
+
|
|
7
|
+
#include "extconf.h" // Needed for HAVE_CLOCK_MONOTONIC_COARSE
|
|
8
|
+
#include "ruby_helpers.h"
|
|
9
|
+
|
|
10
|
+
#define SECONDS_AS_NS(value) (value * 1000 * 1000 * 1000L)
|
|
11
|
+
#define MILLIS_AS_NS(value) (value * 1000 * 1000L)
|
|
12
|
+
|
|
13
|
+
typedef enum { RAISE_ON_FAILURE, DO_NOT_RAISE_ON_FAILURE } raise_on_failure_setting;
|
|
14
|
+
|
|
15
|
+
#define INVALID_TIME -1
|
|
16
|
+
|
|
17
|
+
typedef struct {
|
|
18
|
+
long system_epoch_ns_reference;
|
|
19
|
+
long delta_to_epoch_ns;
|
|
20
|
+
} monotonic_to_system_epoch_state;
|
|
21
|
+
|
|
22
|
+
#define MONOTONIC_TO_SYSTEM_EPOCH_INITIALIZER {.system_epoch_ns_reference = INVALID_TIME, .delta_to_epoch_ns = INVALID_TIME}
|
|
23
|
+
|
|
24
|
+
static inline long retrieve_clock_as_ns(clockid_t clock_id, raise_on_failure_setting raise_on_failure) {
|
|
25
|
+
struct timespec clock_value;
|
|
26
|
+
|
|
27
|
+
if (clock_gettime(clock_id, &clock_value) != 0) {
|
|
28
|
+
if (raise_on_failure == RAISE_ON_FAILURE) ENFORCE_SUCCESS_GVL(errno);
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return clock_value.tv_nsec + SECONDS_AS_NS(clock_value.tv_sec);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static inline long monotonic_wall_time_now_ns(raise_on_failure_setting raise_on_failure) { return retrieve_clock_as_ns(CLOCK_MONOTONIC, raise_on_failure); }
|
|
36
|
+
static inline long system_epoch_time_now_ns(raise_on_failure_setting raise_on_failure) { return retrieve_clock_as_ns(CLOCK_REALTIME, raise_on_failure); }
|
|
37
|
+
|
|
38
|
+
// Coarse instants use CLOCK_MONOTONIC_COARSE on Linux which is expected to provide resolution in the millisecond range:
|
|
39
|
+
// https://docs.redhat.com/en/documentation/red_hat_enterprise_linux_for_real_time/7/html/reference_guide/sect-posix_clocks#Using_clock_getres_to_compare_clock_resolution
|
|
40
|
+
// We introduce here a separate type for it, so as to make it harder to misuse/more explicit when these timestamps are used
|
|
41
|
+
|
|
42
|
+
typedef struct {
|
|
43
|
+
long timestamp_ns;
|
|
44
|
+
} coarse_instant;
|
|
45
|
+
|
|
46
|
+
static inline coarse_instant to_coarse_instant(long timestamp_ns) { return (coarse_instant) {.timestamp_ns = timestamp_ns}; }
|
|
47
|
+
|
|
48
|
+
static inline coarse_instant monotonic_coarse_wall_time_now_ns(void) {
|
|
49
|
+
#ifdef HAVE_CLOCK_MONOTONIC_COARSE // Linux
|
|
50
|
+
return to_coarse_instant(retrieve_clock_as_ns(CLOCK_MONOTONIC_COARSE, DO_NOT_RAISE_ON_FAILURE));
|
|
51
|
+
#else // macOS
|
|
52
|
+
return to_coarse_instant(retrieve_clock_as_ns(CLOCK_MONOTONIC, DO_NOT_RAISE_ON_FAILURE));
|
|
53
|
+
#endif
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
long monotonic_to_system_epoch_ns(monotonic_to_system_epoch_state *state, long monotonic_wall_time_ns);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <ruby/debug.h>
|
|
3
|
+
#include <stdbool.h>
|
|
4
|
+
|
|
5
|
+
#include "datadog_ruby_common.h"
|
|
6
|
+
#include "unsafe_api_calls_check.h"
|
|
7
|
+
#include "extconf.h"
|
|
8
|
+
|
|
9
|
+
static bool inside_unsafe_context = false;
|
|
10
|
+
|
|
11
|
+
#ifndef NO_POSTPONED_TRIGGER
|
|
12
|
+
static rb_postponed_job_handle_t check_for_unsafe_api_calls_handle;
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
static void check_for_unsafe_api_calls(DDTRACE_UNUSED void *_unused);
|
|
16
|
+
|
|
17
|
+
void unsafe_api_calls_check_init(void) {
|
|
18
|
+
#ifndef NO_POSTPONED_TRIGGER
|
|
19
|
+
int unused_flags = 0;
|
|
20
|
+
|
|
21
|
+
check_for_unsafe_api_calls_handle = rb_postponed_job_preregister(unused_flags, check_for_unsafe_api_calls, NULL);
|
|
22
|
+
|
|
23
|
+
if (check_for_unsafe_api_calls_handle == POSTPONED_JOB_HANDLE_INVALID) {
|
|
24
|
+
rb_raise(rb_eRuntimeError, "Failed to register check_for_unsafe_api_calls_handle postponed job (got POSTPONED_JOB_HANDLE_INVALID)");
|
|
25
|
+
}
|
|
26
|
+
#endif
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void debug_enter_unsafe_context(void) {
|
|
30
|
+
inside_unsafe_context = true;
|
|
31
|
+
|
|
32
|
+
#ifndef NO_POSTPONED_TRIGGER
|
|
33
|
+
rb_postponed_job_trigger(check_for_unsafe_api_calls_handle);
|
|
34
|
+
#else
|
|
35
|
+
rb_postponed_job_register(0, check_for_unsafe_api_calls, NULL);
|
|
36
|
+
#endif
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void debug_leave_unsafe_context(void) {
|
|
40
|
+
inside_unsafe_context = false;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static void check_for_unsafe_api_calls(DDTRACE_UNUSED void *_unused) {
|
|
44
|
+
if (inside_unsafe_context) rb_bug(
|
|
45
|
+
"Datadog Ruby profiler detected callback nested inside sample. Please report this at https://github.com/datadog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug"
|
|
46
|
+
);
|
|
47
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
// This checker is used to detect accidental thread scheduling switching points happening during profiling sampling.
|
|
4
|
+
//
|
|
5
|
+
// Specifically, when the profiler is sampling, we're never supposed to call into Ruby code (e.g. methods
|
|
6
|
+
// implemented using Ruby code) or allocate Ruby objects.
|
|
7
|
+
// That's because those events introduce thread switch points, and really we don't the VM switching between threads
|
|
8
|
+
// in the middle of the profiler sampling.
|
|
9
|
+
// This includes raising exceptions, unless we're trying to stop the profiler, and even then we must be careful.
|
|
10
|
+
//
|
|
11
|
+
// The above is especially true in situations such as GC profiling or allocation/heap profiling, as in those situations
|
|
12
|
+
// we can even crash the Ruby VM if we switch away at the wrong time.
|
|
13
|
+
//
|
|
14
|
+
// The below APIs can be used to detect these situations. They work by relying on the following observation:
|
|
15
|
+
// in most (all?) thread switch points, Ruby will check for interrupts and run the postponed jobs.
|
|
16
|
+
//
|
|
17
|
+
// Thus, if we set a flag while we're sampling (inside_unsafe_context), trigger the postponed job, and then only unset
|
|
18
|
+
// the flag after sampling, he correct thing to happen is that the postponed job should never see the flag.
|
|
19
|
+
//
|
|
20
|
+
// If, however, we have a bug and there's a thread switch point, our postponed job will see the flag and immediately
|
|
21
|
+
// stop the Ruby VM before further damage happens (and hopefully giving us a stack trace clearly pointing to the culprit).
|
|
22
|
+
|
|
23
|
+
void unsafe_api_calls_check_init(void);
|
|
24
|
+
|
|
25
|
+
// IMPORTANT: This method **MUST** only be called from test code, as it causes an immediate hard-crash on the Ruby VM
|
|
26
|
+
// when it detects a potential issue, and that's not something we want for production apps.
|
|
27
|
+
//
|
|
28
|
+
// In the future we may introduce some kind of setting (off by default) to also allow this to be safely be used
|
|
29
|
+
// in production code if needed.
|
|
30
|
+
void debug_enter_unsafe_context(void);
|
|
31
|
+
void debug_leave_unsafe_context(void);
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <datadog/crashtracker.h>
|
|
3
|
+
|
|
4
|
+
#include "datadog_ruby_common.h"
|
|
5
|
+
|
|
6
|
+
static VALUE _native_start_or_update_on_fork(int argc, VALUE *argv, DDTRACE_UNUSED VALUE _self);
|
|
7
|
+
static VALUE _native_stop(DDTRACE_UNUSED VALUE _self);
|
|
8
|
+
|
|
9
|
+
static bool first_init = true;
|
|
10
|
+
|
|
11
|
+
// Used to report Ruby VM crashes.
|
|
12
|
+
// Once initialized, segfaults will be reported automatically using libdatadog.
|
|
13
|
+
|
|
14
|
+
void crashtracker_init(VALUE core_module) {
|
|
15
|
+
VALUE crashtracking_module = rb_define_module_under(core_module, "Crashtracking");
|
|
16
|
+
VALUE crashtracker_class = rb_define_class_under(crashtracking_module, "Component", rb_cObject);
|
|
17
|
+
|
|
18
|
+
rb_define_singleton_method(crashtracker_class, "_native_start_or_update_on_fork", _native_start_or_update_on_fork, -1);
|
|
19
|
+
rb_define_singleton_method(crashtracker_class, "_native_stop", _native_stop, 0);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static VALUE _native_start_or_update_on_fork(int argc, VALUE *argv, DDTRACE_UNUSED VALUE _self) {
|
|
23
|
+
VALUE options;
|
|
24
|
+
rb_scan_args(argc, argv, "0:", &options);
|
|
25
|
+
if (options == Qnil) options = rb_hash_new();
|
|
26
|
+
|
|
27
|
+
VALUE agent_base_url = rb_hash_fetch(options, ID2SYM(rb_intern("agent_base_url")));
|
|
28
|
+
VALUE path_to_crashtracking_receiver_binary = rb_hash_fetch(options, ID2SYM(rb_intern("path_to_crashtracking_receiver_binary")));
|
|
29
|
+
VALUE ld_library_path = rb_hash_fetch(options, ID2SYM(rb_intern("ld_library_path")));
|
|
30
|
+
VALUE tags_as_array = rb_hash_fetch(options, ID2SYM(rb_intern("tags_as_array")));
|
|
31
|
+
VALUE action = rb_hash_fetch(options, ID2SYM(rb_intern("action")));
|
|
32
|
+
VALUE upload_timeout_seconds = rb_hash_fetch(options, ID2SYM(rb_intern("upload_timeout_seconds")));
|
|
33
|
+
|
|
34
|
+
VALUE start_action = ID2SYM(rb_intern("start"));
|
|
35
|
+
VALUE update_on_fork_action = ID2SYM(rb_intern("update_on_fork"));
|
|
36
|
+
|
|
37
|
+
ENFORCE_TYPE(agent_base_url, T_STRING);
|
|
38
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
39
|
+
ENFORCE_TYPE(path_to_crashtracking_receiver_binary, T_STRING);
|
|
40
|
+
ENFORCE_TYPE(ld_library_path, T_STRING);
|
|
41
|
+
ENFORCE_TYPE(action, T_SYMBOL);
|
|
42
|
+
ENFORCE_TYPE(upload_timeout_seconds, T_FIXNUM);
|
|
43
|
+
|
|
44
|
+
if (action != start_action && action != update_on_fork_action) rb_raise(rb_eArgError, "Unexpected action: %+"PRIsVALUE, action);
|
|
45
|
+
|
|
46
|
+
VALUE version = datadog_gem_version();
|
|
47
|
+
|
|
48
|
+
// Tags and endpoint are heap-allocated, so after here we can't raise exceptions otherwise we'll leak this memory
|
|
49
|
+
// Start of exception-free zone to prevent leaks {{
|
|
50
|
+
ddog_Endpoint *endpoint = ddog_endpoint_from_url(char_slice_from_ruby_string(agent_base_url));
|
|
51
|
+
if (endpoint == NULL) {
|
|
52
|
+
rb_raise(rb_eRuntimeError, "Failed to create endpoint from agent_base_url: %"PRIsVALUE, agent_base_url);
|
|
53
|
+
}
|
|
54
|
+
ddog_Vec_Tag tags = convert_tags(tags_as_array);
|
|
55
|
+
|
|
56
|
+
ddog_crasht_Config config = {
|
|
57
|
+
.additional_files = {},
|
|
58
|
+
// @ivoanjo: The Ruby VM already uses an alt stack to detect stack overflows.
|
|
59
|
+
//
|
|
60
|
+
// In libdatadog < 14 with `create_alt_stack = true` I saw a segfault, such as Ruby 2.6's bug with
|
|
61
|
+
// "Process.detach(fork { exit! }).instance_variable_get(:@foo)" being turned into a
|
|
62
|
+
// "-e:1:in `instance_variable_get': stack level too deep (SystemStackError)" by Ruby.
|
|
63
|
+
// The Ruby crash handler also seems to get confused when this option is enabled and
|
|
64
|
+
// "Process.kill('SEGV', Process.pid)" gets run.
|
|
65
|
+
//
|
|
66
|
+
// This actually changed in libdatadog 14, so I could see no issues with `create_alt_stack = true`, but not
|
|
67
|
+
// overriding what Ruby set up seems a saner default to keep anyway.
|
|
68
|
+
.create_alt_stack = false,
|
|
69
|
+
.use_alt_stack = true,
|
|
70
|
+
.endpoint = endpoint,
|
|
71
|
+
.resolve_frames = DDOG_CRASHT_STACKTRACE_COLLECTION_ENABLED_WITH_SYMBOLS_IN_RECEIVER,
|
|
72
|
+
.timeout_ms = FIX2INT(upload_timeout_seconds) * 1000,
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
ddog_crasht_Metadata metadata = {
|
|
76
|
+
.library_name = DDOG_CHARSLICE_C("dd-trace-rb"),
|
|
77
|
+
.library_version = char_slice_from_ruby_string(version),
|
|
78
|
+
.family = DDOG_CHARSLICE_C("ruby"),
|
|
79
|
+
.tags = &tags,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
ddog_crasht_EnvVar ld_library_path_env = {
|
|
83
|
+
.key = DDOG_CHARSLICE_C("LD_LIBRARY_PATH"),
|
|
84
|
+
.val = char_slice_from_ruby_string(ld_library_path),
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
ddog_crasht_ReceiverConfig receiver_config = {
|
|
88
|
+
.args = {},
|
|
89
|
+
.env = {.ptr = &ld_library_path_env, .len = 1},
|
|
90
|
+
.path_to_receiver_binary = char_slice_from_ruby_string(path_to_crashtracking_receiver_binary),
|
|
91
|
+
.optional_stderr_filename = {},
|
|
92
|
+
.optional_stdout_filename = {},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
ddog_VoidResult result =
|
|
96
|
+
action == start_action ?
|
|
97
|
+
(first_init ?
|
|
98
|
+
ddog_crasht_init(config, receiver_config, metadata) :
|
|
99
|
+
ddog_crasht_reconfigure(config, receiver_config, metadata)
|
|
100
|
+
) :
|
|
101
|
+
ddog_crasht_update_on_fork(config, receiver_config, metadata);
|
|
102
|
+
|
|
103
|
+
first_init = false;
|
|
104
|
+
|
|
105
|
+
// Clean up before potentially raising any exceptions
|
|
106
|
+
ddog_Vec_Tag_drop(tags);
|
|
107
|
+
ddog_endpoint_drop(endpoint);
|
|
108
|
+
// }} End of exception-free zone to prevent leaks
|
|
109
|
+
|
|
110
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) {
|
|
111
|
+
rb_raise(rb_eRuntimeError, "Failed to start/update the crash tracker: %"PRIsVALUE, get_error_details_and_drop(&result.err));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return Qtrue;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
static VALUE _native_stop(DDTRACE_UNUSED VALUE _self) {
|
|
118
|
+
ddog_VoidResult result = ddog_crasht_disable();
|
|
119
|
+
|
|
120
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) {
|
|
121
|
+
rb_raise(rb_eRuntimeError, "Failed to stop the crash tracker: %"PRIsVALUE, get_error_details_and_drop(&result.err));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return Qtrue;
|
|
125
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#include "datadog_ruby_common.h"
|
|
2
|
+
|
|
3
|
+
// IMPORTANT: Currently this file is copy-pasted between extensions. Make sure to update all versions when doing any change!
|
|
4
|
+
|
|
5
|
+
void raise_unexpected_type(VALUE value, const char *value_name, const char *type_name, const char *file, int line, const char* function_name) {
|
|
6
|
+
rb_exc_raise(
|
|
7
|
+
rb_exc_new_str(
|
|
8
|
+
rb_eTypeError,
|
|
9
|
+
rb_sprintf("wrong argument %"PRIsVALUE" for '%s' (expected a %s) at %s:%d:in `%s'",
|
|
10
|
+
rb_inspect(value),
|
|
11
|
+
value_name,
|
|
12
|
+
type_name,
|
|
13
|
+
file,
|
|
14
|
+
line,
|
|
15
|
+
function_name
|
|
16
|
+
)
|
|
17
|
+
)
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
VALUE datadog_gem_version(void) {
|
|
22
|
+
VALUE ddtrace_module = rb_const_get(rb_cObject, rb_intern("Datadog"));
|
|
23
|
+
ENFORCE_TYPE(ddtrace_module, T_MODULE);
|
|
24
|
+
VALUE version_module = rb_const_get(ddtrace_module, rb_intern("VERSION"));
|
|
25
|
+
ENFORCE_TYPE(version_module, T_MODULE);
|
|
26
|
+
VALUE version_string = rb_const_get(version_module, rb_intern("STRING"));
|
|
27
|
+
ENFORCE_TYPE(version_string, T_STRING);
|
|
28
|
+
return version_string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static VALUE log_failure_to_process_tag(VALUE err_details) {
|
|
32
|
+
return log_warning(rb_sprintf("Failed to convert tag: %"PRIsVALUE, err_details));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
__attribute__((warn_unused_result))
|
|
36
|
+
ddog_Vec_Tag convert_tags(VALUE tags_as_array) {
|
|
37
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
38
|
+
|
|
39
|
+
long tags_count = RARRAY_LEN(tags_as_array);
|
|
40
|
+
ddog_Vec_Tag tags = ddog_Vec_Tag_new();
|
|
41
|
+
|
|
42
|
+
for (long i = 0; i < tags_count; i++) {
|
|
43
|
+
VALUE name_value_pair = rb_ary_entry(tags_as_array, i);
|
|
44
|
+
|
|
45
|
+
if (!RB_TYPE_P(name_value_pair, T_ARRAY)) {
|
|
46
|
+
ddog_Vec_Tag_drop(tags);
|
|
47
|
+
ENFORCE_TYPE(name_value_pair, T_ARRAY);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Note: We can index the array without checking its size first because rb_ary_entry returns Qnil if out of bounds
|
|
51
|
+
VALUE tag_name = rb_ary_entry(name_value_pair, 0);
|
|
52
|
+
VALUE tag_value = rb_ary_entry(name_value_pair, 1);
|
|
53
|
+
|
|
54
|
+
if (!(RB_TYPE_P(tag_name, T_STRING) && RB_TYPE_P(tag_value, T_STRING))) {
|
|
55
|
+
ddog_Vec_Tag_drop(tags);
|
|
56
|
+
ENFORCE_TYPE(tag_name, T_STRING);
|
|
57
|
+
ENFORCE_TYPE(tag_value, T_STRING);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
ddog_Vec_Tag_PushResult push_result =
|
|
61
|
+
ddog_Vec_Tag_push(&tags, char_slice_from_ruby_string(tag_name), char_slice_from_ruby_string(tag_value));
|
|
62
|
+
|
|
63
|
+
if (push_result.tag == DDOG_VEC_TAG_PUSH_RESULT_ERR) {
|
|
64
|
+
// libdatadog validates tags and may catch invalid tags that ddtrace didn't actually catch.
|
|
65
|
+
// We warn users about such tags, and then just ignore them.
|
|
66
|
+
|
|
67
|
+
int exception_state;
|
|
68
|
+
rb_protect(log_failure_to_process_tag, get_error_details_and_drop(&push_result.err), &exception_state);
|
|
69
|
+
|
|
70
|
+
// Since we are calling into Ruby code, it may raise an exception. Ensure that dynamically-allocated tags
|
|
71
|
+
// get cleaned before propagating the exception.
|
|
72
|
+
if (exception_state) {
|
|
73
|
+
ddog_Vec_Tag_drop(tags);
|
|
74
|
+
rb_jump_tag(exception_state); // "Re-raise" exception
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return tags;
|
|
80
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
// IMPORTANT: Currently this file is copy-pasted between extensions. Make sure to update all versions when doing any change!
|
|
4
|
+
|
|
5
|
+
#include <ruby.h>
|
|
6
|
+
#include <datadog/common.h>
|
|
7
|
+
|
|
8
|
+
// Used to mark symbols to be exported to the outside of the extension.
|
|
9
|
+
// Consider very carefully before tagging a function with this.
|
|
10
|
+
#define DDTRACE_EXPORT __attribute__ ((visibility ("default")))
|
|
11
|
+
|
|
12
|
+
// Used to mark function arguments that are deliberately left unused
|
|
13
|
+
#ifdef __GNUC__
|
|
14
|
+
#define DDTRACE_UNUSED __attribute__((unused))
|
|
15
|
+
#else
|
|
16
|
+
#define DDTRACE_UNUSED
|
|
17
|
+
#endif
|
|
18
|
+
|
|
19
|
+
#define ADD_QUOTES_HELPER(x) #x
|
|
20
|
+
#define ADD_QUOTES(x) ADD_QUOTES_HELPER(x)
|
|
21
|
+
|
|
22
|
+
// Ruby has a Check_Type(value, type) that is roughly equivalent to this BUT Ruby's version is rather cryptic when it fails
|
|
23
|
+
// e.g. "wrong argument type nil (expected String)". This is a replacement that prints more information to help debugging.
|
|
24
|
+
#define ENFORCE_TYPE(value, type) \
|
|
25
|
+
{ if (RB_UNLIKELY(!RB_TYPE_P(value, type))) raise_unexpected_type(value, ADD_QUOTES(value), ADD_QUOTES(type), __FILE__, __LINE__, __func__); }
|
|
26
|
+
|
|
27
|
+
#define ENFORCE_BOOLEAN(value) \
|
|
28
|
+
{ if (RB_UNLIKELY(value != Qtrue && value != Qfalse)) raise_unexpected_type(value, ADD_QUOTES(value), "true or false", __FILE__, __LINE__, __func__); }
|
|
29
|
+
|
|
30
|
+
#define ENFORCE_TYPED_DATA(value, type) \
|
|
31
|
+
{ if (RB_UNLIKELY(!rb_typeddata_is_kind_of(value, type))) raise_unexpected_type(value, ADD_QUOTES(value), "TypedData of type " ADD_QUOTES(type), __FILE__, __LINE__, __func__); }
|
|
32
|
+
|
|
33
|
+
NORETURN(void raise_unexpected_type(VALUE value, const char *value_name, const char *type_name, const char *file, int line, const char* function_name));
|
|
34
|
+
|
|
35
|
+
// Helper to retrieve Datadog::VERSION::STRING
|
|
36
|
+
VALUE datadog_gem_version(void);
|
|
37
|
+
|
|
38
|
+
static inline ddog_CharSlice char_slice_from_ruby_string(VALUE string) {
|
|
39
|
+
ENFORCE_TYPE(string, T_STRING);
|
|
40
|
+
ddog_CharSlice char_slice = {.ptr = RSTRING_PTR(string), .len = RSTRING_LEN(string)};
|
|
41
|
+
return char_slice;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
static inline VALUE log_warning(VALUE warning) {
|
|
45
|
+
VALUE datadog_module = rb_const_get(rb_cObject, rb_intern("Datadog"));
|
|
46
|
+
VALUE logger = rb_funcall(datadog_module, rb_intern("logger"), 0);
|
|
47
|
+
|
|
48
|
+
return rb_funcall(logger, rb_intern("warn"), 1, warning);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
__attribute__((warn_unused_result))
|
|
52
|
+
ddog_Vec_Tag convert_tags(VALUE tags_as_array);
|
|
53
|
+
|
|
54
|
+
static inline VALUE ruby_string_from_error(const ddog_Error *error) {
|
|
55
|
+
ddog_CharSlice char_slice = ddog_Error_message(error);
|
|
56
|
+
return rb_str_new(char_slice.ptr, char_slice.len);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static inline VALUE get_error_details_and_drop(ddog_Error *error) {
|
|
60
|
+
VALUE result = ruby_string_from_error(error);
|
|
61
|
+
ddog_Error_drop(error);
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <datadog/ddsketch.h>
|
|
3
|
+
|
|
4
|
+
#include "datadog_ruby_common.h"
|
|
5
|
+
|
|
6
|
+
static VALUE _native_new(VALUE klass);
|
|
7
|
+
static void ddsketch_free(void *ptr);
|
|
8
|
+
static VALUE native_add(VALUE self, VALUE point);
|
|
9
|
+
static VALUE native_add_with_count(VALUE self, VALUE point, VALUE count);
|
|
10
|
+
static VALUE native_count(VALUE self);
|
|
11
|
+
static VALUE native_encode(VALUE self);
|
|
12
|
+
NORETURN(static void raise_ddsketch_error(const char *message, ddog_VoidResult result));
|
|
13
|
+
|
|
14
|
+
void ddsketch_init(VALUE core_module) {
|
|
15
|
+
VALUE ddsketch_class = rb_define_class_under(core_module, "DDSketch", rb_cObject);
|
|
16
|
+
|
|
17
|
+
rb_define_alloc_func(ddsketch_class, _native_new);
|
|
18
|
+
rb_define_method(ddsketch_class, "add", native_add, 1);
|
|
19
|
+
rb_define_method(ddsketch_class, "add_with_count", native_add_with_count, 2);
|
|
20
|
+
rb_define_method(ddsketch_class, "count", native_count, 0);
|
|
21
|
+
rb_define_method(ddsketch_class, "encode", native_encode, 0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// This structure is used to define a Ruby object that stores a pointer to a ddsketch_Handle_DDSketch
|
|
25
|
+
// See also https://github.com/ruby/ruby/blob/master/doc/extension.rdoc for how this works
|
|
26
|
+
static const rb_data_type_t ddsketch_typed_data = {
|
|
27
|
+
.wrap_struct_name = "Datadog::DDSketch",
|
|
28
|
+
.function = {
|
|
29
|
+
.dmark = NULL, // We don't store references to Ruby objects so we don't need to mark any of them
|
|
30
|
+
.dfree = ddsketch_free,
|
|
31
|
+
.dsize = NULL, // We don't track memory usage (although it'd be cool if we did!)
|
|
32
|
+
//.dcompact = NULL, // Not needed -- we don't store references to Ruby objects
|
|
33
|
+
},
|
|
34
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
static VALUE _native_new(VALUE klass) {
|
|
38
|
+
ddsketch_Handle_DDSketch *state = ruby_xcalloc(1, sizeof(ddsketch_Handle_DDSketch));
|
|
39
|
+
|
|
40
|
+
*state = ddog_ddsketch_new();
|
|
41
|
+
|
|
42
|
+
return TypedData_Wrap_Struct(klass, &ddsketch_typed_data, state);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static void ddsketch_free(void *ptr) {
|
|
46
|
+
ddsketch_Handle_DDSketch *state = (ddsketch_Handle_DDSketch *) ptr;
|
|
47
|
+
ddog_ddsketch_drop(state);
|
|
48
|
+
ruby_xfree(ptr);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static void raise_ddsketch_error(const char *message, ddog_VoidResult result) {
|
|
52
|
+
rb_raise(rb_eRuntimeError, "%s: %"PRIsVALUE, message, get_error_details_and_drop(&result.err));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static VALUE native_add(VALUE self, VALUE point) {
|
|
56
|
+
ddsketch_Handle_DDSketch *state;
|
|
57
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
58
|
+
|
|
59
|
+
ddog_VoidResult result = ddog_ddsketch_add(state, NUM2DBL(point));
|
|
60
|
+
|
|
61
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) raise_ddsketch_error("DDSketch add failed", result);
|
|
62
|
+
|
|
63
|
+
return self;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
static VALUE native_add_with_count(VALUE self, VALUE point, VALUE count) {
|
|
67
|
+
ddsketch_Handle_DDSketch *state;
|
|
68
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
69
|
+
|
|
70
|
+
ddog_VoidResult result = ddog_ddsketch_add_with_count(state, NUM2DBL(point), NUM2DBL(count));
|
|
71
|
+
|
|
72
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) raise_ddsketch_error("DDSketch add_with_count failed", result);
|
|
73
|
+
|
|
74
|
+
return self;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static VALUE native_count(VALUE self) {
|
|
78
|
+
ddsketch_Handle_DDSketch *state;
|
|
79
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
80
|
+
|
|
81
|
+
double count_out;
|
|
82
|
+
ddog_VoidResult result = ddog_ddsketch_count(state, &count_out);
|
|
83
|
+
|
|
84
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) raise_ddsketch_error("DDSketch count failed", result);
|
|
85
|
+
|
|
86
|
+
return DBL2NUM(count_out);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static VALUE native_encode(VALUE self) {
|
|
90
|
+
ddsketch_Handle_DDSketch *state;
|
|
91
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
92
|
+
|
|
93
|
+
ddog_Vec_U8 encoded = ddog_ddsketch_encode(state);
|
|
94
|
+
|
|
95
|
+
// Copy into a Ruby string
|
|
96
|
+
VALUE bytes = rb_str_new((const char *) encoded.ptr, encoded.len);
|
|
97
|
+
|
|
98
|
+
ddog_Vec_U8_drop(encoded);
|
|
99
|
+
|
|
100
|
+
// The sketch is consumed by encode; to make this a bit more user-friendly for
|
|
101
|
+
// a Ruby API (since we can't "kill" the Ruby object), let's re-initialize it so
|
|
102
|
+
// it can be used again.
|
|
103
|
+
*state = ddog_ddsketch_new();
|
|
104
|
+
|
|
105
|
+
return bytes;
|
|
106
|
+
}
|