datadog 2.7.1 → 2.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +353 -1
- data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +78 -102
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
- data/ext/datadog_profiling_native_extension/collectors_stack.c +235 -57
- data/ext/datadog_profiling_native_extension/collectors_stack.h +21 -5
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +376 -156
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -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 +14 -8
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
- data/ext/datadog_profiling_native_extension/heap_recorder.c +295 -532
- data/ext/datadog_profiling_native_extension/heap_recorder.h +6 -8
- data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
- data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +69 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +16 -4
- data/ext/datadog_profiling_native_extension/profiling.c +19 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +9 -21
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +2 -10
- data/ext/datadog_profiling_native_extension/stack_recorder.c +231 -181
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
- 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 +17 -15
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/extconf.rb +2 -2
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +164 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +112 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +2 -2
- 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/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +65 -0
- data/lib/datadog/appsec/api_security/sampler.rb +59 -0
- data/lib/datadog/appsec/api_security.rb +23 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +623 -253
- data/lib/datadog/appsec/assets/waf_rules/strict.json +69 -107
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +49 -65
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +212 -27
- data/lib/datadog/appsec/context.rb +74 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -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 +1 -1
- 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 +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +33 -25
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
- 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 +41 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +73 -78
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
- 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 +38 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +12 -3
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/collector.rb +38 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics.rb +13 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
- data/lib/datadog/appsec/processor/rule_loader.rb +30 -36
- data/lib/datadog/appsec/remote.rb +31 -57
- data/lib/datadog/appsec/response.rb +19 -85
- data/lib/datadog/appsec/security_engine/engine.rb +194 -0
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +87 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +22 -12
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings.rb +52 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -18
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +74 -32
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +5 -1
- data/lib/datadog/core/configuration/option.rb +81 -45
- data/lib/datadog/core/configuration/option_definition.rb +6 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +121 -50
- data/lib/datadog/core/configuration/stable_config.rb +22 -0
- data/lib/datadog/core/configuration.rb +43 -11
- data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
- data/lib/datadog/core/crashtracking/component.rb +4 -13
- data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +17 -1
- data/lib/datadog/core/environment/agent_info.rb +78 -0
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +27 -27
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
- data/lib/datadog/core/process_discovery.rb +36 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client/capabilities.rb +6 -0
- data/lib/datadog/core/remote/client.rb +107 -92
- data/lib/datadog/core/remote/component.rb +18 -19
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +14 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/api.rb +13 -18
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
- data/lib/datadog/core/remote/transport/http.rb +25 -94
- data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
- data/lib/datadog/core/remote/worker.rb +10 -7
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/tag_builder.rb +56 -0
- data/lib/datadog/core/telemetry/component.rb +84 -49
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- 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_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 +269 -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 +17 -383
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +5 -4
- data/lib/datadog/core/telemetry/logging.rb +12 -6
- data/lib/datadog/core/telemetry/metric.rb +28 -6
- data/lib/datadog/core/telemetry/request.rb +4 -4
- 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 +128 -25
- data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
- data/lib/datadog/core/transport/http/api/spec.rb +36 -0
- data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
- data/lib/datadog/core/transport/http/env.rb +8 -0
- data/lib/datadog/core/transport/http.rb +75 -0
- data/lib/datadog/core/transport/response.rb +4 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +6 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/utils.rb +7 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/base.rb +115 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/code_tracker.rb +26 -15
- data/lib/datadog/di/component.rb +23 -14
- data/lib/datadog/di/configuration/settings.rb +25 -1
- data/lib/datadog/di/contrib/active_record.rb +1 -0
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +28 -0
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +162 -21
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/preload.rb +18 -0
- data/lib/datadog/di/probe.rb +14 -7
- data/lib/datadog/di/probe_builder.rb +1 -0
- data/lib/datadog/di/probe_manager.rb +11 -5
- data/lib/datadog/di/probe_notification_builder.rb +54 -38
- data/lib/datadog/di/probe_notifier_worker.rb +60 -26
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +147 -0
- data/lib/datadog/di/serializer.rb +19 -8
- 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 +103 -0
- data/lib/datadog/di.rb +14 -76
- 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.rb +15 -3
- data/lib/datadog/kit/identity.rb +9 -5
- 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 +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +18 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +4 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +64 -82
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -14
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +8 -87
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +5 -41
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +6 -2
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +16 -12
- data/lib/datadog/tracing/configuration/ext.rb +8 -1
- data/lib/datadog/tracing/configuration/settings.rb +22 -10
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
- data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/extensions.rb +29 -3
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -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 +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -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.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +22 -5
- data/lib/datadog/tracing/span_event.rb +124 -4
- data/lib/datadog/tracing/span_operation.rb +52 -16
- data/lib/datadog/tracing/sync_writer.rb +10 -6
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +55 -27
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +66 -14
- data/lib/datadog/tracing/transport/http/api.rb +5 -4
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -44
- data/lib/datadog/tracing/transport/http.rb +13 -70
- data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +47 -13
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
- data/lib/datadog/tracing/workers.rb +5 -4
- data/lib/datadog/tracing/writer.rb +10 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -0
- metadata +149 -54
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
- data/lib/datadog/appsec/contrib/patcher.rb +0 -12
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
- data/lib/datadog/appsec/processor/actions.rb +0 -49
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -106
- data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
- data/lib/datadog/appsec/reactive/engine.rb +0 -47
- data/lib/datadog/appsec/reactive/operation.rb +0 -68
- data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
- data/lib/datadog/appsec/scope.rb +0 -58
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
- data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
- data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
- data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
- data/lib/datadog/di/transport.rb +0 -81
- data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -1,13 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '
|
4
|
-
require_relative '
|
5
|
-
require_relative '
|
6
|
-
require_relative 'api/instance'
|
7
|
-
require_relative 'client'
|
3
|
+
require_relative '../../configuration/agent_settings'
|
4
|
+
require_relative 'adapters/registry'
|
5
|
+
require_relative 'api/map'
|
8
6
|
|
9
7
|
module Datadog
|
10
|
-
module
|
8
|
+
module Core
|
11
9
|
module Transport
|
12
10
|
module HTTP
|
13
11
|
# Builds new instances of Transport::HTTP::Client
|
@@ -15,13 +13,15 @@ module Datadog
|
|
15
13
|
REGISTRY = Datadog::Core::Transport::HTTP::Adapters::Registry.new
|
16
14
|
|
17
15
|
attr_reader \
|
16
|
+
:api_instance_class,
|
18
17
|
:apis,
|
19
18
|
:api_options,
|
20
19
|
:default_adapter,
|
21
20
|
:default_api,
|
22
|
-
:default_headers
|
21
|
+
:default_headers,
|
22
|
+
:logger
|
23
23
|
|
24
|
-
def initialize
|
24
|
+
def initialize(api_instance_class:, logger: Datadog.logger)
|
25
25
|
# Global settings
|
26
26
|
@default_adapter = nil
|
27
27
|
@default_headers = {}
|
@@ -33,24 +33,27 @@ module Datadog
|
|
33
33
|
# API settings
|
34
34
|
@api_options = {}
|
35
35
|
|
36
|
+
@api_instance_class = api_instance_class
|
37
|
+
@logger = logger
|
38
|
+
|
36
39
|
yield(self) if block_given?
|
37
40
|
end
|
38
41
|
|
39
42
|
def adapter(config, *args, **kwargs)
|
40
43
|
@default_adapter = case config
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
44
|
+
when Core::Configuration::AgentSettings
|
45
|
+
registry_klass = REGISTRY.get(config.adapter)
|
46
|
+
raise UnknownAdapterError, config.adapter if registry_klass.nil?
|
47
|
+
|
48
|
+
registry_klass.build(config)
|
49
|
+
when Symbol
|
50
|
+
registry_klass = REGISTRY.get(config)
|
51
|
+
raise UnknownAdapterError, config if registry_klass.nil?
|
52
|
+
|
53
|
+
registry_klass.new(*args, **kwargs)
|
54
|
+
else
|
55
|
+
config
|
56
|
+
end
|
54
57
|
end
|
55
58
|
|
56
59
|
def headers(values = {})
|
@@ -82,11 +85,10 @@ module Datadog
|
|
82
85
|
@default_api = key
|
83
86
|
end
|
84
87
|
|
85
|
-
def to_transport
|
88
|
+
def to_transport(klass)
|
86
89
|
raise NoDefaultApiError if @default_api.nil?
|
87
90
|
|
88
|
-
|
89
|
-
Transport::Traces::Transport.new(to_api_instances, @default_api)
|
91
|
+
klass.new(to_api_instances, @default_api, logger: logger)
|
90
92
|
end
|
91
93
|
|
92
94
|
def to_api_instances
|
@@ -117,28 +119,48 @@ module Datadog
|
|
117
119
|
end
|
118
120
|
end
|
119
121
|
|
120
|
-
def api_instance_class
|
121
|
-
API::Instance
|
122
|
-
end
|
123
|
-
|
124
122
|
# Raised when the API key does not match known APIs.
|
125
123
|
class UnknownApiError < StandardError
|
124
|
+
attr_reader :key
|
125
|
+
|
126
126
|
def initialize(key)
|
127
|
-
super(
|
127
|
+
super()
|
128
|
+
|
129
|
+
@key = key
|
130
|
+
end
|
131
|
+
|
132
|
+
def message
|
133
|
+
"Unknown transport API '#{key}'!"
|
128
134
|
end
|
129
135
|
end
|
130
136
|
|
131
137
|
# Raised when the identifier cannot be matched to an adapter.
|
132
138
|
class UnknownAdapterError < StandardError
|
139
|
+
attr_reader :type
|
140
|
+
|
133
141
|
def initialize(type)
|
134
|
-
super(
|
142
|
+
super()
|
143
|
+
|
144
|
+
@type = type
|
145
|
+
end
|
146
|
+
|
147
|
+
def message
|
148
|
+
"Unknown transport adapter '#{type}'!"
|
135
149
|
end
|
136
150
|
end
|
137
151
|
|
138
152
|
# Raised when an adapter cannot be resolved for an API instance.
|
139
153
|
class NoAdapterForApiError < StandardError
|
154
|
+
attr_reader :key
|
155
|
+
|
140
156
|
def initialize(key)
|
141
|
-
super(
|
157
|
+
super()
|
158
|
+
|
159
|
+
@key = key
|
160
|
+
end
|
161
|
+
|
162
|
+
def message
|
163
|
+
"No adapter resolved for transport API '#{key}'!"
|
142
164
|
end
|
143
165
|
end
|
144
166
|
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'http/builder'
|
4
|
+
require_relative 'http/adapters/net'
|
5
|
+
require_relative 'http/adapters/unix_socket'
|
6
|
+
require_relative 'http/adapters/test'
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module Core
|
10
|
+
module Transport
|
11
|
+
# HTTP transport
|
12
|
+
module HTTP
|
13
|
+
# Add adapters to registry
|
14
|
+
Builder::REGISTRY.set(
|
15
|
+
Transport::HTTP::Adapters::Net,
|
16
|
+
Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
17
|
+
)
|
18
|
+
Builder::REGISTRY.set(
|
19
|
+
Transport::HTTP::Adapters::Test,
|
20
|
+
Transport::Ext::Test::ADAPTER
|
21
|
+
)
|
22
|
+
Builder::REGISTRY.set(
|
23
|
+
Transport::HTTP::Adapters::UnixSocket,
|
24
|
+
Transport::Ext::UnixSocket::ADAPTER
|
25
|
+
)
|
26
|
+
|
27
|
+
module_function
|
28
|
+
|
29
|
+
# Helper function that delegates to Builder.new
|
30
|
+
# but is under HTTP namespace so that client code requires this file
|
31
|
+
# to get the adapters configured, and not the builder directly.
|
32
|
+
def build(api_instance_class:, agent_settings:, logger: Datadog.logger, api_version: nil, headers: nil, &block)
|
33
|
+
Builder.new(api_instance_class: api_instance_class, logger: logger) do |transport|
|
34
|
+
transport.adapter(agent_settings)
|
35
|
+
transport.headers(default_headers)
|
36
|
+
|
37
|
+
# The caller must define APIs before we set the default API.
|
38
|
+
yield transport
|
39
|
+
|
40
|
+
# Apply any settings given by options
|
41
|
+
transport.default_api = api_version if api_version
|
42
|
+
transport.headers(headers) if headers
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_headers
|
47
|
+
{
|
48
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
49
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG =>
|
50
|
+
Datadog::Core::Environment::Ext::LANG,
|
51
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION =>
|
52
|
+
Datadog::Core::Environment::Ext::LANG_VERSION,
|
53
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
54
|
+
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
55
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR =>
|
56
|
+
Core::Environment::Ext::LANG_ENGINE,
|
57
|
+
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
58
|
+
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
59
|
+
}.tap do |headers|
|
60
|
+
# Add container ID, if present.
|
61
|
+
if (container_id = Datadog::Core::Environment::Container.container_id)
|
62
|
+
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id
|
63
|
+
end
|
64
|
+
# TODO: inject configuration rather than reading from global here
|
65
|
+
unless Datadog.configuration.apm.tracing.enabled
|
66
|
+
# Sending this header to the agent will disable metrics computation (and billing) on the agent side
|
67
|
+
# by pretending it has already been done on the library side.
|
68
|
+
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -51,13 +51,13 @@ module Datadog
|
|
51
51
|
def fork
|
52
52
|
# If a block is provided, it must be wrapped to trigger callbacks.
|
53
53
|
child_block = if block_given?
|
54
|
-
|
55
|
-
|
54
|
+
proc do
|
55
|
+
AtForkMonkeyPatch.run_at_fork_blocks(:child)
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
57
|
+
# Invoke original block
|
58
|
+
yield
|
59
|
+
end
|
60
|
+
end
|
61
61
|
|
62
62
|
# Start fork
|
63
63
|
# If a block is provided, use the wrapped version.
|
@@ -7,42 +7,42 @@ module Datadog
|
|
7
7
|
module Duration
|
8
8
|
def self.call(value, base: :s)
|
9
9
|
cast = if value.include?('.')
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
method(:Float)
|
11
|
+
else
|
12
|
+
method(:Integer)
|
13
|
+
end
|
14
14
|
|
15
15
|
scale = case base
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
when :s
|
17
|
+
1_000_000_000
|
18
|
+
when :ms
|
19
|
+
1_000_000
|
20
|
+
when :us
|
21
|
+
1000
|
22
|
+
when :ns
|
23
|
+
1
|
24
|
+
else
|
25
|
+
raise ArgumentError, "invalid base: #{base.inspect}"
|
26
|
+
end
|
27
27
|
|
28
28
|
result = case value
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
29
|
+
when /^(\d+(?:\.\d+)?)h$/
|
30
|
+
cast.call(Regexp.last_match(1)) * 1_000_000_000 * 60 * 60 / scale
|
31
|
+
when /^(\d+(?:\.\d+)?)m$/
|
32
|
+
cast.call(Regexp.last_match(1)) * 1_000_000_000 * 60 / scale
|
33
|
+
when /^(\d+(?:\.\d+)?)s$/
|
34
|
+
cast.call(Regexp.last_match(1)) * 1_000_000_000 / scale
|
35
|
+
when /^(\d+(?:\.\d+)?)ms$/
|
36
|
+
cast.call(Regexp.last_match(1)) * 1_000_000 / scale
|
37
|
+
when /^(\d+(?:\.\d+)?)us$/
|
38
|
+
cast.call(Regexp.last_match(1)) * 1_000 / scale
|
39
|
+
when /^(\d+(?:\.\d+)?)ns$/
|
40
|
+
cast.call(Regexp.last_match(1)) / scale
|
41
|
+
when /^(\d+(?:\.\d+)?)$/
|
42
|
+
cast.call(Regexp.last_match(1))
|
43
|
+
else
|
44
|
+
raise ArgumentError, "invalid duration: #{value.inspect}"
|
45
|
+
end
|
46
46
|
# @type var result: Numeric
|
47
47
|
result.round
|
48
48
|
end
|
@@ -47,12 +47,12 @@ module Datadog
|
|
47
47
|
# This wrapper prevents this by initializing the fork PID when the object is created.
|
48
48
|
if RUBY_VERSION >= '3'
|
49
49
|
def initialize(*args, **kwargs, &block)
|
50
|
-
super
|
50
|
+
super
|
51
51
|
update_fork_pid!
|
52
52
|
end
|
53
53
|
else
|
54
54
|
def initialize(*args, &block)
|
55
|
-
super
|
55
|
+
super
|
56
56
|
update_fork_pid!
|
57
57
|
end
|
58
58
|
end
|
@@ -32,7 +32,7 @@ module Datadog
|
|
32
32
|
def stripped_ip_from_request_headers(headers, ip_headers_to_check: DEFAULT_IP_HEADERS_NAMES)
|
33
33
|
ip = ip_header(headers, ip_headers_to_check)
|
34
34
|
|
35
|
-
ip
|
35
|
+
ip&.to_s
|
36
36
|
end
|
37
37
|
|
38
38
|
# @param [String] IP value.
|
@@ -40,7 +40,7 @@ module Datadog
|
|
40
40
|
# @return [nil] when no valid IP value found.
|
41
41
|
def stripped_ip(ip)
|
42
42
|
ip = ip_to_ipaddr(ip)
|
43
|
-
ip
|
43
|
+
ip&.to_s
|
44
44
|
end
|
45
45
|
|
46
46
|
private
|
@@ -52,10 +52,10 @@ module Datadog
|
|
52
52
|
return unless ip
|
53
53
|
|
54
54
|
clean_ip = if likely_ipv4?(ip)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
strip_ipv4_port(ip)
|
56
|
+
else
|
57
|
+
strip_zone_specifier(strip_ipv6_port(ip))
|
58
|
+
end
|
59
59
|
|
60
60
|
begin
|
61
61
|
IPAddr.new(clean_ip)
|
@@ -5,14 +5,25 @@ require_relative 'only_once'
|
|
5
5
|
module Datadog
|
6
6
|
module Core
|
7
7
|
module Utils
|
8
|
-
# Helper class to execute something with only one
|
8
|
+
# Helper class to execute something with only one successful execution.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
10
|
+
# If limit is not provided to the constructor, +run+ will execute the
|
11
|
+
# block an unlimited number of times until the block indicates that it
|
12
|
+
# executed successfully by returning a truthy value. After a block
|
13
|
+
# executes successfully, subsequent +run+ calls will not invoke the
|
14
|
+
# block.
|
12
15
|
#
|
13
|
-
#
|
16
|
+
# If a non-zero limit is provided to the constructor, +run+ will
|
17
|
+
# execute the block up to that many times, and will mark the instance
|
18
|
+
# of OnlyOneSuccessful as failed if none of the executions succeeded.
|
14
19
|
#
|
15
|
-
#
|
20
|
+
# One consumer of this class is sending the app-started telemetry event.
|
21
|
+
#
|
22
|
+
# Successful execution is determined by the return value of the block:
|
23
|
+
# any truthy value is considered success.
|
24
|
+
#
|
25
|
+
# This class is thread-safe (however, instances of it must also be
|
26
|
+
# created in a thread-safe manner).
|
16
27
|
#
|
17
28
|
# Note: In its current state, this class is not Ractor-safe.
|
18
29
|
# In https://github.com/DataDog/dd-trace-rb/pull/1398#issuecomment-797378810 we have a discussion of alternatives,
|
@@ -31,6 +31,16 @@ module Datadog
|
|
31
31
|
#
|
32
32
|
# @param block [Proc] block that returns a `Time` object representing the current wall time
|
33
33
|
def now_provider=(block)
|
34
|
+
class << self
|
35
|
+
# Avoid method redefinition warning.
|
36
|
+
# `rescue nil` is added in case customers remove the method
|
37
|
+
# themselves to squelch the warning.
|
38
|
+
begin
|
39
|
+
remove_method(:now)
|
40
|
+
rescue
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
end
|
34
44
|
define_singleton_method(:now, &block)
|
35
45
|
end
|
36
46
|
|
@@ -43,6 +53,16 @@ module Datadog
|
|
43
53
|
#
|
44
54
|
# @param block [Proc] block that accepts unit and returns timestamp in the requested unit
|
45
55
|
def get_time_provider=(block)
|
56
|
+
class << self
|
57
|
+
# Avoid method redefinition warning
|
58
|
+
# `rescue nil` is added in case customers remove the method
|
59
|
+
# themselves to squelch the warning.
|
60
|
+
begin
|
61
|
+
remove_method(:get_time)
|
62
|
+
rescue
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
end
|
46
66
|
define_singleton_method(:get_time, &block)
|
47
67
|
end
|
48
68
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
module Utils
|
6
|
+
# Helper methods for truncating data
|
7
|
+
module Truncation
|
8
|
+
module_function
|
9
|
+
|
10
|
+
def truncate_in_middle(string, max_prefix_length, max_suffix_length)
|
11
|
+
max_length = max_prefix_length + 3 + max_suffix_length
|
12
|
+
if string.length > max_length
|
13
|
+
"#{string[0...max_prefix_length]}...#{string[-max_suffix_length..-1]}"
|
14
|
+
else
|
15
|
+
string
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/datadog/core/utils.rb
CHANGED
@@ -66,6 +66,13 @@ module Datadog
|
|
66
66
|
placeholder
|
67
67
|
end
|
68
68
|
|
69
|
+
def self.encode_tags(hash)
|
70
|
+
# Make sure everything is an utf-8 string, to avoid encoding issues in downstream
|
71
|
+
hash.each_with_object({}) do |(key, value), h|
|
72
|
+
h[utf8_encode(key)] = utf8_encode(value)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
69
76
|
# @!visibility private
|
70
77
|
def self.without_warnings
|
71
78
|
# This is typically used when monkey patching functions such as
|
@@ -28,29 +28,29 @@ module Datadog
|
|
28
28
|
"--#{SecureRandom.uuid}"
|
29
29
|
end
|
30
30
|
|
31
|
-
def initialize(path, params, headers={}, boundary = Multipartable.secure_boundary)
|
31
|
+
def initialize(path, params, headers = {}, boundary = Multipartable.secure_boundary)
|
32
32
|
headers = headers.clone # don't want to modify the original variable
|
33
33
|
parts_headers = headers.delete(:parts) || {}
|
34
34
|
super(path, headers)
|
35
|
-
parts = params.map do |k,v|
|
35
|
+
parts = params.map do |k, v|
|
36
36
|
case v
|
37
37
|
when Array
|
38
|
-
v.map {|item| Parts::Part.new(boundary, "#{k}[]", item, parts_headers[k]) }
|
38
|
+
v.map { |item| Parts::Part.new(boundary, "#{k}[]", item, parts_headers[k]) }
|
39
39
|
else
|
40
40
|
Parts::Part.new(boundary, k, v, parts_headers[k])
|
41
41
|
end
|
42
42
|
end.flatten
|
43
43
|
parts << Parts::EpiloguePart.new(boundary)
|
44
|
-
ios = parts.map {|p| p.to_io }
|
45
|
-
|
46
|
-
|
47
|
-
self.content_length = parts.inject(0) {|sum,i| sum + i.length }
|
44
|
+
ios = parts.map { |p| p.to_io }
|
45
|
+
set_content_type(headers["Content-Type"] || "multipart/form-data",
|
46
|
+
{"boundary" => boundary})
|
47
|
+
self.content_length = parts.inject(0) { |sum, i| sum + i.length }
|
48
48
|
self.body_stream = CompositeReadIO.new(*ios)
|
49
49
|
|
50
50
|
@boundary = boundary
|
51
51
|
end
|
52
52
|
|
53
|
-
|
53
|
+
attr_reader :boundary
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -58,7 +58,7 @@ module Datadog
|
|
58
58
|
part = ''
|
59
59
|
part << "--#{boundary}\r\n"
|
60
60
|
part << "Content-ID: #{headers["Content-ID"]}\r\n" if headers["Content-ID"]
|
61
|
-
part << "Content-Disposition: form-data; name=\"#{name
|
61
|
+
part << "Content-Disposition: form-data; name=\"#{name}\"\r\n"
|
62
62
|
part << "Content-Type: #{headers["Content-Type"]}\r\n" if headers["Content-Type"]
|
63
63
|
part << "\r\n"
|
64
64
|
part << "#{value}\r\n"
|
@@ -76,9 +76,9 @@ module Datadog
|
|
76
76
|
# @param io [IO]
|
77
77
|
# @param headers [Hash]
|
78
78
|
def initialize(boundary, name, io, headers = {})
|
79
|
-
file_length = io.respond_to?(:length) ?
|
79
|
+
file_length = io.respond_to?(:length) ? io.length : File.size(io.local_path)
|
80
80
|
@head = build_head(boundary, name, io.original_filename, io.content_type, file_length,
|
81
|
-
|
81
|
+
io.respond_to?(:opts) ? io.opts.merge(headers) : headers)
|
82
82
|
@foot = "\r\n"
|
83
83
|
@length = @head.bytesize + file_length + @foot.length
|
84
84
|
@io = CompositeReadIO.new(StringIO.new(@head), io, StringIO.new(@foot))
|
@@ -98,16 +98,16 @@ module Datadog
|
|
98
98
|
|
99
99
|
part = ''
|
100
100
|
part << "--#{boundary}\r\n"
|
101
|
-
part << "Content-Disposition: #{content_disposition}; name=\"#{name
|
101
|
+
part << "Content-Disposition: #{content_disposition}; name=\"#{name}\"; filename=\"#{filename}\"\r\n"
|
102
102
|
part << "Content-Length: #{content_len}\r\n"
|
103
103
|
if content_id = opts.delete("Content-ID")
|
104
104
|
part << "Content-ID: #{content_id}\r\n"
|
105
105
|
end
|
106
106
|
|
107
|
-
if opts["Content-Type"]
|
108
|
-
|
107
|
+
part << if !opts["Content-Type"].nil?
|
108
|
+
"Content-Type: " + opts["Content-Type"] + "\r\n"
|
109
109
|
else
|
110
|
-
|
110
|
+
"Content-Type: #{type}\r\n"
|
111
111
|
end
|
112
112
|
|
113
113
|
part << "Content-Transfer-Encoding: #{trans_encoding}\r\n"
|