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
@@ -18,7 +18,7 @@ module Datadog
|
|
18
18
|
module Configuration
|
19
19
|
# Global configuration settings for the Datadog library.
|
20
20
|
# @public_api
|
21
|
-
#
|
21
|
+
# standard:disable Metrics/BlockLength
|
22
22
|
class Settings
|
23
23
|
include Base
|
24
24
|
|
@@ -123,7 +123,7 @@ module Datadog
|
|
123
123
|
# @return [Boolean]
|
124
124
|
option :debug do |o|
|
125
125
|
o.env [Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED,
|
126
|
-
|
126
|
+
Datadog::Core::Configuration::Ext::Diagnostics::ENV_OTEL_LOG_LEVEL]
|
127
127
|
o.default false
|
128
128
|
o.type :bool
|
129
129
|
o.env_parser do |value|
|
@@ -137,7 +137,7 @@ module Datadog
|
|
137
137
|
o.after_set do |enabled|
|
138
138
|
# Enable rich debug print statements.
|
139
139
|
# We do not need to unnecessarily load 'pp' unless in debugging mode.
|
140
|
-
require 'pp' if enabled
|
140
|
+
require 'pp' if enabled # standard:disable Lint/RedundantRequireStatement
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
@@ -313,7 +313,7 @@ module Datadog
|
|
313
313
|
|
314
314
|
# Can be used to enable/disable the collection of heap profiles.
|
315
315
|
#
|
316
|
-
# This feature is
|
316
|
+
# This feature is in preview and disabled by default. Requires Ruby 3.1+.
|
317
317
|
#
|
318
318
|
# @warn To enable heap profiling you are required to also enable allocation profiling.
|
319
319
|
#
|
@@ -326,12 +326,12 @@ module Datadog
|
|
326
326
|
|
327
327
|
# Can be used to enable/disable the collection of heap size profiles.
|
328
328
|
#
|
329
|
-
# This feature is
|
329
|
+
# This feature is in preview and by default is enabled whenever heap profiling is enabled.
|
330
330
|
#
|
331
|
-
# @warn
|
331
|
+
# @warn Heap size profiling depends on allocation and heap profiling, so they must be enabled as well.
|
332
332
|
#
|
333
|
-
# @default `DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED` environment variable as a boolean, otherwise
|
334
|
-
#
|
333
|
+
# @default `DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED` environment variable as a boolean, otherwise it
|
334
|
+
# follows the value of `experimental_heap_enabled`.
|
335
335
|
option :experimental_heap_size_enabled do |o|
|
336
336
|
o.type :bool
|
337
337
|
o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED'
|
@@ -341,17 +341,19 @@ module Datadog
|
|
341
341
|
# Can be used to configure the heap sampling rate: a heap sample will be collected for every x allocation
|
342
342
|
# samples.
|
343
343
|
#
|
344
|
-
# The
|
345
|
-
#
|
344
|
+
# The higher the value, the less accuracy in heap tracking but the smaller the overhead.
|
345
|
+
#
|
346
|
+
# If you needed to tweak this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>,
|
347
|
+
# so we can fix it!
|
346
348
|
#
|
347
349
|
# The effective heap sampling rate in terms of allocations (not allocation samples) can be calculated via
|
348
350
|
# effective_heap_sample_rate = allocation_sample_rate * heap_sample_rate.
|
349
351
|
#
|
350
|
-
# @default `DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE` environment variable, otherwise `
|
352
|
+
# @default `DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE` environment variable, otherwise `1`.
|
351
353
|
option :experimental_heap_sample_rate do |o|
|
352
354
|
o.type :int
|
353
355
|
o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE'
|
354
|
-
o.default
|
356
|
+
o.default 1
|
355
357
|
end
|
356
358
|
|
357
359
|
# Can be used to disable checking which version of `libmysqlclient` is being used by the `mysql2` gem.
|
@@ -454,22 +456,38 @@ module Datadog
|
|
454
456
|
o.after_set do |_, _, precedence|
|
455
457
|
unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
|
456
458
|
Core.log_deprecation(key: :experimental_crash_tracking_enabled) do
|
457
|
-
'The profiling.advanced.experimental_crash_tracking_enabled setting has been deprecated for removal '\
|
459
|
+
'The profiling.advanced.experimental_crash_tracking_enabled setting has been deprecated for removal ' \
|
458
460
|
'and no longer does anything. Please remove it from your Datadog.configure block.'
|
459
461
|
end
|
460
462
|
end
|
461
463
|
end
|
462
464
|
end
|
463
465
|
|
464
|
-
#
|
465
|
-
#
|
466
|
-
# This is a preview feature and disabled by default. It requires Ruby 3.2+.
|
467
|
-
#
|
468
|
-
# @default `DD_PROFILING_PREVIEW_GVL_ENABLED` environment variable as a boolean, otherwise `false`
|
466
|
+
# @deprecated Use {:gvl_enabled} instead.
|
469
467
|
option :preview_gvl_enabled do |o|
|
470
468
|
o.type :bool
|
471
|
-
o.env 'DD_PROFILING_PREVIEW_GVL_ENABLED'
|
472
469
|
o.default false
|
470
|
+
o.after_set do |_, _, precedence|
|
471
|
+
unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
|
472
|
+
Datadog.logger.warn(
|
473
|
+
'The profiling.advanced.preview_gvl_enabled setting has been deprecated for removal and ' \
|
474
|
+
'no longer does anything. Please remove it from your Datadog.configure block. ' \
|
475
|
+
'GVL profiling is now controlled by the profiling.advanced.gvl_enabled setting instead.'
|
476
|
+
)
|
477
|
+
end
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
# Controls GVL profiling. This will show when threads are waiting for GVL in the timeline view.
|
482
|
+
#
|
483
|
+
# This feature requires Ruby 3.2+.
|
484
|
+
#
|
485
|
+
# @default `DD_PROFILING_GVL_ENABLED` environment variable as a boolean, otherwise `true`
|
486
|
+
option :gvl_enabled do |o|
|
487
|
+
o.type :bool
|
488
|
+
o.deprecated_env 'DD_PROFILING_PREVIEW_GVL_ENABLED'
|
489
|
+
o.env 'DD_PROFILING_GVL_ENABLED'
|
490
|
+
o.default true
|
473
491
|
end
|
474
492
|
|
475
493
|
# Controls the smallest time period the profiler will report a thread waiting for the GVL.
|
@@ -526,6 +544,16 @@ module Datadog
|
|
526
544
|
o.env 'DD_PROFILING_HEAP_CLEAN_AFTER_GC_ENABLED'
|
527
545
|
o.default true
|
528
546
|
end
|
547
|
+
|
548
|
+
# Controls if the profiler should use native filenames for frames in stack traces for functions implemented using
|
549
|
+
# native code. Setting to `false` will make the profiler fall back to default Ruby stack trace behavior (only show .rb files).
|
550
|
+
#
|
551
|
+
# @default true
|
552
|
+
option :native_filenames_enabled do |o|
|
553
|
+
o.type :bool
|
554
|
+
o.env 'DD_PROFILING_NATIVE_FILENAMES_ENABLED'
|
555
|
+
o.default true
|
556
|
+
end
|
529
557
|
end
|
530
558
|
|
531
559
|
# @public_api
|
@@ -554,6 +582,12 @@ module Datadog
|
|
554
582
|
o.type :bool
|
555
583
|
end
|
556
584
|
|
585
|
+
option :experimental_runtime_id_enabled do |o|
|
586
|
+
o.type :bool
|
587
|
+
o.env ['DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED', 'DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED']
|
588
|
+
o.default false
|
589
|
+
end
|
590
|
+
|
557
591
|
option :opts, default: {}, type: :hash
|
558
592
|
option :statsd
|
559
593
|
end
|
@@ -603,38 +637,31 @@ module Datadog
|
|
603
637
|
o.type :hash, nilable: true
|
604
638
|
o.env [Core::Environment::Ext::ENV_TAGS, Core::Environment::Ext::ENV_OTEL_RESOURCE_ATTRIBUTES]
|
605
639
|
o.env_parser do |env_value|
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
when 'deployment.environment'
|
629
|
-
tags['env'] = value
|
630
|
-
when 'service.version'
|
631
|
-
tags['version'] = value
|
632
|
-
when 'service.name'
|
633
|
-
tags['service'] = value
|
634
|
-
else
|
635
|
-
tags[key] = value
|
640
|
+
# Parses a string containing key-value pairs and returns a hash.
|
641
|
+
# Key-value pairs are delimited by ':' OR `=`, and pairs are separated by whitespace, comma, OR BOTH.
|
642
|
+
result = {}
|
643
|
+
unless env_value.nil? || env_value.empty?
|
644
|
+
# falling back to comma as separator
|
645
|
+
sep = env_value.include?(',') ? ',' : ' '
|
646
|
+
# split by separator
|
647
|
+
env_value.split(sep).each do |tag|
|
648
|
+
tag.strip!
|
649
|
+
next if tag.empty?
|
650
|
+
|
651
|
+
# tag by : or = (for OpenTelemetry)
|
652
|
+
key, val = tag.split(/[:=]/, 2).map(&:strip)
|
653
|
+
val ||= ''
|
654
|
+
# maps OpenTelemetry semantic attributes to Datadog tags
|
655
|
+
key = case key.downcase
|
656
|
+
when 'deployment.environment' then 'env'
|
657
|
+
when 'service.version' then 'version'
|
658
|
+
when 'service.name' then 'service'
|
659
|
+
else key
|
660
|
+
end
|
661
|
+
result[key] = val unless key.empty?
|
636
662
|
end
|
637
663
|
end
|
664
|
+
result
|
638
665
|
end
|
639
666
|
o.setter do |new_value, old_value|
|
640
667
|
raw_tags = new_value || {}
|
@@ -863,6 +890,26 @@ module Datadog
|
|
863
890
|
o.type :float
|
864
891
|
o.default 1.0
|
865
892
|
end
|
893
|
+
|
894
|
+
# Enable log collection for telemetry. Log collection only works when telemetry is enabled and
|
895
|
+
# logs are enabled.
|
896
|
+
# @default `DD_TELEMETRY_LOG_COLLECTION_ENABLED` environment variable, otherwise `true`.
|
897
|
+
# @return [Boolean]
|
898
|
+
option :log_collection_enabled do |o|
|
899
|
+
o.type :bool
|
900
|
+
o.env Core::Telemetry::Ext::ENV_LOG_COLLECTION
|
901
|
+
o.default true
|
902
|
+
end
|
903
|
+
|
904
|
+
# For internal use only.
|
905
|
+
# Enables telemetry debugging through the Datadog platform.
|
906
|
+
#
|
907
|
+
# @default `false`.
|
908
|
+
# @return [Boolean]
|
909
|
+
option :debug do |o|
|
910
|
+
o.type :bool
|
911
|
+
o.default false
|
912
|
+
end
|
866
913
|
end
|
867
914
|
|
868
915
|
# Remote configuration
|
@@ -932,11 +979,35 @@ module Datadog
|
|
932
979
|
end
|
933
980
|
end
|
934
981
|
|
982
|
+
# Tracer specific configuration starting with APM (e.g. DD_APM_TRACING_ENABLED).
|
983
|
+
# @public_api
|
984
|
+
settings :apm do
|
985
|
+
# Tracing as a transport
|
986
|
+
# @public_api
|
987
|
+
settings :tracing do
|
988
|
+
# Enables tracing as transport.
|
989
|
+
# Disabling it will set sampling priority to -1 (FORCE_DROP) on most traces,
|
990
|
+
# (which tells to the agent to drop these traces)
|
991
|
+
# except heartbeat ones (1 per minute) and manually kept ones (sampling priority to 2) (e.g. appsec events)
|
992
|
+
#
|
993
|
+
# This is different than `DD_TRACE_ENABLED`, which completely disables tracing (sends no trace at all),
|
994
|
+
# while this will send heartbeat traces (1 per minute) so that the service is considered alive in the backend.
|
995
|
+
#
|
996
|
+
# @default `DD_APM_TRACING_ENABLED` environment variable, otherwise `true`
|
997
|
+
# @return [Boolean]
|
998
|
+
option :enabled do |o|
|
999
|
+
o.env Configuration::Ext::APM::ENV_TRACING_ENABLED
|
1000
|
+
o.default true
|
1001
|
+
o.type :bool
|
1002
|
+
end
|
1003
|
+
end
|
1004
|
+
end
|
1005
|
+
|
935
1006
|
# TODO: Tracing should manage its own settings.
|
936
1007
|
# Keep this extension here for now to keep things working.
|
937
1008
|
extend Datadog::Tracing::Configuration::Settings
|
938
1009
|
end
|
939
|
-
#
|
1010
|
+
# standard:enable Metrics/BlockLength
|
940
1011
|
end
|
941
1012
|
end
|
942
1013
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
module Configuration
|
6
|
+
# Import config from config files (fleet automation)
|
7
|
+
module StableConfig
|
8
|
+
def self.extract_configuration
|
9
|
+
if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
|
10
|
+
Datadog.config_init_logger.debug("Cannot enable stable config: #{libdatadog_api_failure}")
|
11
|
+
return {}
|
12
|
+
end
|
13
|
+
Configurator.new.get
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configuration
|
17
|
+
@configuration ||= StableConfig.extract_configuration
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -172,6 +172,10 @@ module Datadog
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
175
|
+
def config_init_logger
|
176
|
+
configuration? ? logger : logger_without_configuration
|
177
|
+
end
|
178
|
+
|
175
179
|
# Gracefully shuts down all components.
|
176
180
|
#
|
177
181
|
# Components will still respond to method calls as usual,
|
@@ -231,19 +235,21 @@ module Datadog
|
|
231
235
|
end
|
232
236
|
|
233
237
|
COMPONENTS_WRITE_LOCK.synchronize do
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
nil
|
243
|
-
end
|
238
|
+
yield write_components
|
239
|
+
rescue ThreadError => e
|
240
|
+
logger_without_components.error(
|
241
|
+
'Detected deadlock during datadog initialization. ' \
|
242
|
+
'Please report this at https://github.com/datadog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
|
243
|
+
"\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
|
244
|
+
)
|
245
|
+
nil
|
244
246
|
end
|
245
247
|
end
|
246
248
|
|
249
|
+
def configuration?
|
250
|
+
(defined?(@configuration) && @configuration) != nil
|
251
|
+
end
|
252
|
+
|
247
253
|
def components?
|
248
254
|
# This does not need to grab the COMPONENTS_READ_LOCK because it's not returning the components
|
249
255
|
(defined?(@components) && @components) != nil
|
@@ -258,14 +264,25 @@ module Datadog
|
|
258
264
|
def replace_components!(settings, old)
|
259
265
|
components = Components.new(settings)
|
260
266
|
|
267
|
+
# Carry over state from existing components to the new ones.
|
268
|
+
# Currently:
|
269
|
+
# 1. If we already started the remote component (which
|
270
|
+
# happens after a request goes through installed Rack middleware),
|
271
|
+
# we will start the new remote component as well.
|
272
|
+
# 2. If telemetry has been enabled and is enabled in the new
|
273
|
+
# component tree, we send AppConfigurationChange event instead
|
274
|
+
# of AppStarted event.
|
275
|
+
old_state = old.state
|
276
|
+
|
261
277
|
old.shutdown!(components)
|
262
|
-
components.startup!(settings)
|
278
|
+
components.startup!(settings, old_state: old_state)
|
263
279
|
components
|
264
280
|
end
|
265
281
|
|
266
282
|
def logger_without_components
|
267
283
|
# Use default logger without initializing components.
|
268
284
|
# This enables logging during initialization, otherwise we'd run into deadlocks.
|
285
|
+
|
269
286
|
@temp_logger ||= begin
|
270
287
|
logger = configuration.logger.instance || Core::Logger.new($stdout)
|
271
288
|
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
@@ -273,6 +290,21 @@ module Datadog
|
|
273
290
|
end
|
274
291
|
end
|
275
292
|
|
293
|
+
def logger_without_configuration
|
294
|
+
# There's rare cases where we need to use logger during configuration initialization,
|
295
|
+
# such as reading stable config. In this case we cannot access configuration.
|
296
|
+
|
297
|
+
@temp_config_logger ||= begin
|
298
|
+
debug_env_value = ENV[Ext::Diagnostics::ENV_DEBUG_ENABLED]&.strip&.downcase
|
299
|
+
debug_value = debug_env_value == 'true' || debug_env_value == '1'
|
300
|
+
|
301
|
+
logger = Core::Logger.new($stdout)
|
302
|
+
# We cannot access config and the default level is INFO, so we need to set the level manually
|
303
|
+
logger.level = debug_value ? ::Logger::DEBUG : ::Logger::INFO
|
304
|
+
logger
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
276
308
|
# Called from our at_exit hook whenever there was a pending Interrupt exception (e.g. typically due to ctrl+c)
|
277
309
|
# to print a nice message whenever we're taking a bit longer than usual to finish the process.
|
278
310
|
def handle_interrupt_shutdown!
|
@@ -3,7 +3,6 @@
|
|
3
3
|
require 'libdatadog'
|
4
4
|
|
5
5
|
require_relative 'tag_builder'
|
6
|
-
require_relative 'agent_base_url'
|
7
6
|
require_relative '../utils/only_once'
|
8
7
|
require_relative '../utils/at_fork_monkey_patch'
|
9
8
|
|
@@ -19,20 +18,11 @@ module Datadog
|
|
19
18
|
#
|
20
19
|
# Methods prefixed with _native_ are implemented in `crashtracker.c`
|
21
20
|
class Component
|
22
|
-
LIBDATADOG_API_FAILURE =
|
23
|
-
begin
|
24
|
-
require "libdatadog_api.#{RUBY_VERSION[/\d+.\d+/]}_#{RUBY_PLATFORM}"
|
25
|
-
nil
|
26
|
-
rescue LoadError => e
|
27
|
-
e.message
|
28
|
-
end
|
29
|
-
|
30
21
|
ONLY_ONCE = Core::Utils::OnlyOnce.new
|
31
22
|
|
32
23
|
def self.build(settings, agent_settings, logger:)
|
33
24
|
tags = TagBuilder.call(settings)
|
34
|
-
agent_base_url =
|
35
|
-
logger.warn('Missing agent base URL; cannot enable crash tracking') unless agent_base_url
|
25
|
+
agent_base_url = agent_settings.url
|
36
26
|
|
37
27
|
ld_library_path = ::Libdatadog.ld_library_path
|
38
28
|
logger.warn('Missing ld_library_path; cannot enable crash tracking') unless ld_library_path
|
@@ -73,7 +63,7 @@ module Datadog
|
|
73
63
|
# Must NOT reference `self` here, as only the first instance will
|
74
64
|
# be captured by the ONLY_ONCE and we want to pick the latest active one
|
75
65
|
# (which may have different tags or agent config)
|
76
|
-
Datadog.send(:components)
|
66
|
+
Datadog.send(:components, allow_initialization: false)&.crashtracker&.update_on_fork
|
77
67
|
end
|
78
68
|
end
|
79
69
|
end
|
@@ -102,7 +92,8 @@ module Datadog
|
|
102
92
|
path_to_crashtracking_receiver_binary: path_to_crashtracking_receiver_binary,
|
103
93
|
ld_library_path: ld_library_path,
|
104
94
|
tags_as_array: tags.to_a,
|
105
|
-
|
95
|
+
# @ivoanjo: On my machine this needs to be > 5 seconds, and seems to work with 10; the extra 15 is extra margin
|
96
|
+
upload_timeout_seconds: 15,
|
106
97
|
)
|
107
98
|
logger.debug("Crash tracking action: #{action} successful")
|
108
99
|
rescue => e
|
@@ -1,9 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../tag_builder'
|
3
4
|
require_relative '../utils'
|
4
|
-
require_relative '../environment/socket'
|
5
|
-
require_relative '../environment/identity'
|
6
|
-
require_relative '../environment/git'
|
7
5
|
|
8
6
|
module Datadog
|
9
7
|
module Core
|
@@ -11,27 +9,11 @@ module Datadog
|
|
11
9
|
# This module builds a hash of tags
|
12
10
|
module TagBuilder
|
13
11
|
def self.call(settings)
|
14
|
-
hash =
|
15
|
-
'host' => Environment::Socket.hostname,
|
16
|
-
'process_id' => Process.pid.to_s,
|
17
|
-
'runtime_engine' => Environment::Identity.lang_engine,
|
18
|
-
'runtime-id' => Environment::Identity.id,
|
19
|
-
'runtime_platform' => Environment::Identity.lang_platform,
|
20
|
-
'runtime_version' => Environment::Identity.lang_version,
|
21
|
-
'env' => settings.env,
|
22
|
-
'service' => settings.service,
|
23
|
-
'version' => settings.version,
|
24
|
-
'git.repository_url' => Environment::Git.git_repository_url,
|
25
|
-
'git.commit.sha' => Environment::Git.git_commit_sha,
|
12
|
+
hash = Core::TagBuilder.tags(settings).merge(
|
26
13
|
'is_crash' => 'true',
|
27
|
-
|
28
|
-
'library_version' => Core::Environment::Identity.gem_datadog_version,
|
29
|
-
}.compact
|
14
|
+
)
|
30
15
|
|
31
|
-
|
32
|
-
settings.tags.merge(hash).each_with_object({}) do |(key, value), h|
|
33
|
-
h[Utils.utf8_encode(key)] = Utils.utf8_encode(value)
|
34
|
-
end
|
16
|
+
Utils.encode_tags(hash)
|
35
17
|
end
|
36
18
|
end
|
37
19
|
end
|
@@ -10,6 +10,7 @@ module Datadog
|
|
10
10
|
# Encoder interface that provides the logic to encode traces and service
|
11
11
|
# @abstract
|
12
12
|
module Encoder
|
13
|
+
# :nocov:
|
13
14
|
def content_type
|
14
15
|
raise NotImplementedError
|
15
16
|
end
|
@@ -23,6 +24,13 @@ module Datadog
|
|
23
24
|
def encode(_)
|
24
25
|
raise NotImplementedError
|
25
26
|
end
|
27
|
+
|
28
|
+
# Deserializes a value serialized with {#encode}.
|
29
|
+
# This method is used for debugging purposes.
|
30
|
+
def decode(_)
|
31
|
+
raise NotImplementedError
|
32
|
+
end
|
33
|
+
# :nocov:
|
26
34
|
end
|
27
35
|
|
28
36
|
# Encoder for the JSON format
|
@@ -41,8 +49,12 @@ module Datadog
|
|
41
49
|
JSON.dump(obj)
|
42
50
|
end
|
43
51
|
|
52
|
+
def decode(obj)
|
53
|
+
JSON.parse(obj)
|
54
|
+
end
|
55
|
+
|
44
56
|
def join(encoded_data)
|
45
|
-
"[#{encoded_data.join(
|
57
|
+
"[#{encoded_data.join(",")}]"
|
46
58
|
end
|
47
59
|
end
|
48
60
|
|
@@ -62,6 +74,10 @@ module Datadog
|
|
62
74
|
MessagePack.pack(obj)
|
63
75
|
end
|
64
76
|
|
77
|
+
def decode(obj)
|
78
|
+
MessagePack.unpack(obj)
|
79
|
+
end
|
80
|
+
|
65
81
|
def join(encoded_data)
|
66
82
|
packer = MessagePack::Packer.new
|
67
83
|
packer.write_array_header(encoded_data.size)
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Core
|
5
|
+
module Environment
|
6
|
+
# Retrieves the agent's `/info` endpoint data.
|
7
|
+
# This data can be used to determine the capabilities of the local Datadog agent.
|
8
|
+
#
|
9
|
+
# @example Example response payload
|
10
|
+
# {
|
11
|
+
# "version" : "7.57.2",
|
12
|
+
# "git_commit" : "38ba0c7",
|
13
|
+
# "endpoints" : [ "/v0.4/traces", "/v0.4/services", "/v0.7/traces", "/v0.7/config" ],
|
14
|
+
# "client_drop_p0s" : true,
|
15
|
+
# "span_meta_structs" : true,
|
16
|
+
# "long_running_spans" : true,
|
17
|
+
# "evp_proxy_allowed_headers" : [ "Content-Type", "Accept-Encoding", "Content-Encoding", "User-Agent" ],
|
18
|
+
# "config" : {
|
19
|
+
# "default_env" : "none",
|
20
|
+
# "target_tps" : 10,
|
21
|
+
# "max_eps" : 200,
|
22
|
+
# "receiver_port" : 8126,
|
23
|
+
# "receiver_socket" : "/var/run/datadog/apm.socket",
|
24
|
+
# "connection_limit" : 0,
|
25
|
+
# "receiver_timeout" : 0,
|
26
|
+
# "max_request_bytes" : 26214400,
|
27
|
+
# "statsd_port" : 8125,
|
28
|
+
# "analyzed_spans_by_service" : { },
|
29
|
+
# "obfuscation" : {
|
30
|
+
# "elastic_search" : true,
|
31
|
+
# "mongo" : true,
|
32
|
+
# "sql_exec_plan" : false,
|
33
|
+
# "sql_exec_plan_normalize" : false,
|
34
|
+
# "http" : {
|
35
|
+
# "remove_query_string" : false,
|
36
|
+
# "remove_path_digits" : false
|
37
|
+
# },
|
38
|
+
# "remove_stack_traces" : false,
|
39
|
+
# "redis" : {
|
40
|
+
# "Enabled" : true,
|
41
|
+
# "RemoveAllArgs" : false
|
42
|
+
# },
|
43
|
+
# "memcached" : {
|
44
|
+
# "Enabled" : true,
|
45
|
+
# "KeepCommand" : false
|
46
|
+
# }
|
47
|
+
# }
|
48
|
+
# },
|
49
|
+
# "peer_tags" : null
|
50
|
+
# }
|
51
|
+
#
|
52
|
+
# @see https://github.com/DataDog/datadog-agent/blob/f07df0a3c1fca0c83b5a15f553bd994091b0c8ac/pkg/trace/api/info.go#L20
|
53
|
+
class AgentInfo
|
54
|
+
attr_reader :agent_settings, :logger
|
55
|
+
|
56
|
+
def initialize(agent_settings, logger: Datadog.logger)
|
57
|
+
@agent_settings = agent_settings
|
58
|
+
@logger = logger
|
59
|
+
@client = Remote::Transport::HTTP.root(agent_settings: agent_settings, logger: logger)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Fetches the information from the agent.
|
63
|
+
# @return [Datadog::Core::Remote::Transport::HTTP::Negotiation::Response] the response from the agent
|
64
|
+
# @return [nil] if an error occurred while fetching the information
|
65
|
+
def fetch
|
66
|
+
res = @client.send_info
|
67
|
+
return unless res.ok?
|
68
|
+
|
69
|
+
res
|
70
|
+
end
|
71
|
+
|
72
|
+
def ==(other)
|
73
|
+
other.is_a?(self.class) && other.agent_settings == agent_settings
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -23,20 +23,18 @@ module Datadog
|
|
23
23
|
|
24
24
|
def descriptors(process = 'self')
|
25
25
|
[].tap do |descriptors|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
descriptors << parse(line) unless line.empty?
|
33
|
-
end
|
26
|
+
filepath = "/proc/#{process}/cgroup"
|
27
|
+
|
28
|
+
if File.exist?(filepath)
|
29
|
+
File.foreach("/proc/#{process}/cgroup") do |line|
|
30
|
+
line = line.strip
|
31
|
+
descriptors << parse(line) unless line.empty?
|
34
32
|
end
|
35
|
-
rescue StandardError => e
|
36
|
-
Datadog.logger.error(
|
37
|
-
"Error while parsing cgroup. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
38
|
-
)
|
39
33
|
end
|
34
|
+
rescue => e
|
35
|
+
Datadog.logger.error(
|
36
|
+
"Error while parsing cgroup. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
37
|
+
)
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|