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
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../patcher'
|
4
|
+
require_relative 'ext'
|
5
|
+
require_relative 'distributed/propagation'
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module Tracing
|
9
|
+
module Contrib
|
10
|
+
module Karafka
|
11
|
+
# Patch to add tracing to Karafka::Messages::Messages
|
12
|
+
module MessagesPatch
|
13
|
+
def configuration
|
14
|
+
Datadog.configuration.tracing[:karafka]
|
15
|
+
end
|
16
|
+
|
17
|
+
def propagation
|
18
|
+
@propagation ||= Contrib::Karafka::Distributed::Propagation.new
|
19
|
+
end
|
20
|
+
|
21
|
+
# `each` is the most popular access point to Karafka messages,
|
22
|
+
# but not the only one
|
23
|
+
# Other access patterns do not have a straightforward tracing avenue
|
24
|
+
# (e.g. `my_batch_operation messages.payloads`)
|
25
|
+
# @see https://github.com/karafka/karafka/blob/b06d1f7c17818e1605f80c2bb573454a33376b40/README.md?plain=1#L29-L35
|
26
|
+
def each(&block)
|
27
|
+
@messages_array.each do |message|
|
28
|
+
if configuration[:distributed_tracing]
|
29
|
+
headers = if message.metadata.respond_to?(:raw_headers)
|
30
|
+
message.metadata.raw_headers
|
31
|
+
else
|
32
|
+
message.metadata.headers
|
33
|
+
end
|
34
|
+
trace_digest = Karafka.extract(headers)
|
35
|
+
Datadog::Tracing.continue_trace!(trace_digest) if trace_digest
|
36
|
+
end
|
37
|
+
|
38
|
+
Tracing.trace(Ext::SPAN_MESSAGE_CONSUME) do |span|
|
39
|
+
span.set_tag(Ext::TAG_OFFSET, message.metadata.offset)
|
40
|
+
span.set_tag(Contrib::Ext::Messaging::TAG_DESTINATION, message.topic)
|
41
|
+
span.set_tag(Contrib::Ext::Messaging::TAG_SYSTEM, Ext::TAG_SYSTEM)
|
42
|
+
|
43
|
+
span.resource = message.topic
|
44
|
+
|
45
|
+
yield message
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Patcher enables patching of 'karafka' module.
|
52
|
+
module Patcher
|
53
|
+
include Contrib::Patcher
|
54
|
+
|
55
|
+
module_function
|
56
|
+
|
57
|
+
def target_version
|
58
|
+
Integration.version
|
59
|
+
end
|
60
|
+
|
61
|
+
def patch
|
62
|
+
require_relative 'monitor'
|
63
|
+
|
64
|
+
::Karafka::Instrumentation::Monitor.prepend(Monitor)
|
65
|
+
::Karafka::Messages::Messages.prepend(MessagesPatch)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'component'
|
4
|
+
require_relative 'karafka/integration'
|
5
|
+
require_relative 'karafka/distributed/propagation'
|
6
|
+
|
7
|
+
module Datadog
|
8
|
+
module Tracing
|
9
|
+
module Contrib
|
10
|
+
# `Karafka` integration public API
|
11
|
+
module Karafka
|
12
|
+
def self.inject(digest, data)
|
13
|
+
raise 'Please invoke Datadog.configure at least once before calling this method' unless @propagation
|
14
|
+
|
15
|
+
@propagation.inject!(digest, data)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.extract(data)
|
19
|
+
raise 'Please invoke Datadog.configure at least once before calling this method' unless @propagation
|
20
|
+
|
21
|
+
@propagation.extract(data)
|
22
|
+
end
|
23
|
+
|
24
|
+
Contrib::Component.register('karafka') do |config|
|
25
|
+
tracing = config.tracing
|
26
|
+
tracing.propagation_style
|
27
|
+
|
28
|
+
@propagation = Karafka::Distributed::Propagation.new(
|
29
|
+
propagation_style_inject: tracing.propagation_style_inject,
|
30
|
+
propagation_style_extract: tracing.propagation_style_extract,
|
31
|
+
propagation_extract_first: tracing.propagation_extract_first
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -20,10 +20,12 @@ module Datadog
|
|
20
20
|
|
21
21
|
# patch applies our patch
|
22
22
|
def patch
|
23
|
+
# First check Lograge logger directly for when keep_original_rails_log option is used
|
24
|
+
used_logger = ::Lograge.logger || ::Lograge::LogSubscribers::ActionController.logger
|
25
|
+
|
23
26
|
# ActiveSupport::TaggedLogging is the default Rails logger since Rails 5
|
24
27
|
if defined?(::ActiveSupport::TaggedLogging::Formatter) &&
|
25
|
-
::
|
26
|
-
.logger&.formatter.is_a?(::ActiveSupport::TaggedLogging::Formatter)
|
28
|
+
used_logger&.formatter.is_a?(::ActiveSupport::TaggedLogging::Formatter)
|
27
29
|
Datadog.logger.warn(
|
28
30
|
'Lograge and ActiveSupport::TaggedLogging (the default Rails log formatter) are not compatible: ' \
|
29
31
|
'Lograge does not account for Rails log tags, creating polluted logs and breaking log formatting. ' \
|
@@ -48,6 +48,14 @@ module Datadog
|
|
48
48
|
o.type :string, nilable: true
|
49
49
|
o.env Ext::ENV_PEER_SERVICE
|
50
50
|
end
|
51
|
+
|
52
|
+
# Serializes the command to JSON format, which is the desired format for the agent and Datadog UI.
|
53
|
+
# Setting this to false is deprecated and does not have any advantages.
|
54
|
+
option :json_command do |o|
|
55
|
+
o.type :bool
|
56
|
+
o.env Ext::ENV_JSON_COMMAND
|
57
|
+
o.default false
|
58
|
+
end
|
51
59
|
end
|
52
60
|
end
|
53
61
|
end
|
@@ -13,6 +13,7 @@ module Datadog
|
|
13
13
|
# @!visibility private
|
14
14
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_MONGO_ANALYTICS_ENABLED'
|
15
15
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE'
|
16
|
+
ENV_JSON_COMMAND = 'DD_TRACE_MONGO_JSON_COMMAND'
|
16
17
|
DEFAULT_PEER_SERVICE_NAME = 'mongodb'
|
17
18
|
SPAN_COMMAND = 'mongo.cmd'
|
18
19
|
SPAN_TYPE_COMMAND = 'mongodb'
|
@@ -17,6 +17,9 @@ module Datadog
|
|
17
17
|
|
18
18
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
19
19
|
register_as :mongo, auto_patch: true
|
20
|
+
def self.gem_name
|
21
|
+
'mongo'
|
22
|
+
end
|
20
23
|
|
21
24
|
def self.version
|
22
25
|
Gem.loaded_specs['mongo'] && Gem.loaded_specs['mongo'].version
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'json'
|
4
|
+
|
3
5
|
require_relative '../analytics'
|
4
6
|
require_relative 'ext'
|
5
7
|
require_relative '../ext'
|
@@ -30,7 +32,7 @@ module Datadog
|
|
30
32
|
|
31
33
|
# build a quantized Query using the Parser module
|
32
34
|
query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
|
33
|
-
serialized_query = query
|
35
|
+
serialized_query = serialize_query(query)
|
34
36
|
|
35
37
|
if datadog_configuration[:peer_service]
|
36
38
|
span.set_tag(
|
@@ -109,6 +111,21 @@ module Datadog
|
|
109
111
|
|
110
112
|
private
|
111
113
|
|
114
|
+
def serialize_query(query)
|
115
|
+
if datadog_configuration[:json_command]
|
116
|
+
query.to_json
|
117
|
+
else
|
118
|
+
# Incorrect Hash#to_s serialization. The Mongo command should only be encoded as JSON.
|
119
|
+
# This code path should be removed, and is only kept to avoid a breaking change.
|
120
|
+
Datadog::Core.log_deprecation(key: :mongo_json_command) do
|
121
|
+
'MongoDB integration: `json_command: false` causes invalid command serialization. '\
|
122
|
+
'Use `json_command: true` or `DD_TRACE_MONGO_JSON_COMMAND=1` instead.'
|
123
|
+
end
|
124
|
+
|
125
|
+
query.to_s
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
112
129
|
def get_span(event)
|
113
130
|
Thread.current[:datadog_mongo_span] \
|
114
131
|
&& Thread.current[:datadog_mongo_span][event.request_id]
|
@@ -46,6 +46,23 @@ module Datadog
|
|
46
46
|
o.type :string, nilable: true
|
47
47
|
o.env Ext::ENV_PEER_SERVICE
|
48
48
|
end
|
49
|
+
|
50
|
+
option :resource_pattern do |o|
|
51
|
+
o.type :string
|
52
|
+
o.env Ext::ENV_RESOURCE_PATTERN
|
53
|
+
o.default Ext::DEFAULT_RESOURCE_PATTERN
|
54
|
+
o.setter do |value|
|
55
|
+
next value if Ext::VALID_RESOURCE_PATTERNS.include?(value)
|
56
|
+
|
57
|
+
Datadog.logger.warn(
|
58
|
+
"Invalid resource pattern: #{value}. " \
|
59
|
+
"Supported values are: #{Ext::VALID_RESOURCE_PATTERNS.join(' | ')}. " \
|
60
|
+
"Using default value: #{Ext::DEFAULT_RESOURCE_PATTERN}."
|
61
|
+
)
|
62
|
+
|
63
|
+
Ext::DEFAULT_RESOURCE_PATTERN
|
64
|
+
end
|
65
|
+
end
|
49
66
|
end
|
50
67
|
end
|
51
68
|
end
|
@@ -13,6 +13,15 @@ module Datadog
|
|
13
13
|
# @!visibility private
|
14
14
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_OPENSEARCH_ANALYTICS_ENABLED'
|
15
15
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_OPENSEARCH_ANALYTICS_SAMPLE_RATE'
|
16
|
+
ENV_RESOURCE_PATTERN = 'DD_TRACE_OPENSEARCH_RESOURCE_PATTERN'
|
17
|
+
ABSOLUTE_RESOURCE_PATTERN = 'absolute'
|
18
|
+
RELATIVE_RESOURCE_PATTERN = 'relative'
|
19
|
+
VALID_RESOURCE_PATTERNS = [
|
20
|
+
ABSOLUTE_RESOURCE_PATTERN,
|
21
|
+
RELATIVE_RESOURCE_PATTERN
|
22
|
+
].freeze
|
23
|
+
# Default should be changed to RELATIVE in 3.0 to match the Elasticsearch integration
|
24
|
+
DEFAULT_RESOURCE_PATTERN = ABSOLUTE_RESOURCE_PATTERN
|
16
25
|
DEFAULT_PEER_SERVICE_NAME = 'opensearch'
|
17
26
|
SPAN_QUERY = 'opensearch.query'
|
18
27
|
SPAN_TYPE_QUERY = 'opensearch'
|
@@ -16,6 +16,9 @@ module Datadog
|
|
16
16
|
|
17
17
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
18
18
|
register_as :opensearch, auto_patch: true
|
19
|
+
def self.gem_name
|
20
|
+
'opensearch-ruby'
|
21
|
+
end
|
19
22
|
|
20
23
|
def self.version
|
21
24
|
Gem.loaded_specs['opensearch-ruby'] \
|
@@ -77,7 +77,11 @@ module Datadog
|
|
77
77
|
span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, host) if host
|
78
78
|
|
79
79
|
# Define span resource
|
80
|
-
quantized_url =
|
80
|
+
quantized_url = if datadog_configuration[:resource_pattern] == Ext::RELATIVE_RESOURCE_PATTERN
|
81
|
+
OpenSearch::Quantize.format_url(url.path)
|
82
|
+
else # Default to Ext::ABSOLUTE_RESOURCE_PATTERN
|
83
|
+
OpenSearch::Quantize.format_url(url)
|
84
|
+
end
|
81
85
|
span.resource = "#{method} #{quantized_url}"
|
82
86
|
Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
|
83
87
|
rescue StandardError => e
|
@@ -20,8 +20,11 @@ module Datadog
|
|
20
20
|
# @public_api
|
21
21
|
module CommonMethods
|
22
22
|
attr_accessor \
|
23
|
-
:patch_error_result
|
24
|
-
|
23
|
+
:patch_error_result
|
24
|
+
|
25
|
+
def patch_successful
|
26
|
+
!!@patch_successful
|
27
|
+
end
|
25
28
|
|
26
29
|
def patch_name
|
27
30
|
self.class != Class && self.class != Module ? self.class.name : name
|
@@ -16,6 +16,9 @@ module Datadog
|
|
16
16
|
|
17
17
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
18
18
|
register_as :presto
|
19
|
+
def self.gem_name
|
20
|
+
'presto-client'
|
21
|
+
end
|
19
22
|
|
20
23
|
def self.version
|
21
24
|
Gem.loaded_specs['presto-client'] && Gem.loaded_specs['presto-client'].version
|
@@ -31,7 +31,17 @@ module Datadog
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.to_rack_header(name)
|
34
|
-
|
34
|
+
key = name.to_s.upcase.gsub(/[-\s]/, '_')
|
35
|
+
case key
|
36
|
+
when 'CONTENT_TYPE', 'CONTENT_LENGTH'
|
37
|
+
# NOTE: The Rack spec says:
|
38
|
+
# > The environment must not contain the keys HTTP_CONTENT_TYPE or HTTP_CONTENT_LENGTH
|
39
|
+
# > (use the versions without HTTP_).
|
40
|
+
# See https://github.com/rack/rack/blob/e217a399eb116362710aac7c5b8dc691ea2189b3/SPEC.rdoc?plain=1#L119-L121
|
41
|
+
key
|
42
|
+
else
|
43
|
+
"HTTP_#{key}"
|
44
|
+
end
|
35
45
|
end
|
36
46
|
end
|
37
47
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require_relative '../integration'
|
4
4
|
require_relative 'configuration/settings'
|
5
5
|
require_relative 'patcher'
|
6
|
-
require_relative '
|
6
|
+
require_relative '../../../core/contrib/rails/utils'
|
7
7
|
|
8
8
|
module Datadog
|
9
9
|
module Tracing
|
@@ -33,7 +33,7 @@ module Datadog
|
|
33
33
|
# enabled by rails integration so should only auto instrument
|
34
34
|
# if detected that it is being used without rails
|
35
35
|
def auto_instrument?
|
36
|
-
!Contrib::Rails::Utils.railtie_supported?
|
36
|
+
!Core::Contrib::Rails::Utils.railtie_supported?
|
37
37
|
end
|
38
38
|
|
39
39
|
def new_configuration
|
@@ -43,7 +43,7 @@ module Datadog
|
|
43
43
|
# so that all spans will be added to the distributed trace.
|
44
44
|
if configuration[:distributed_tracing]
|
45
45
|
trace_digest = Contrib::HTTP.extract(env)
|
46
|
-
Tracing.continue_trace!(trace_digest)
|
46
|
+
Tracing.continue_trace!(trace_digest) if trace_digest
|
47
47
|
end
|
48
48
|
|
49
49
|
TraceProxyMiddleware.call(env, configuration) do
|
@@ -9,7 +9,7 @@ require_relative '../active_support/integration'
|
|
9
9
|
require_relative '../grape/endpoint'
|
10
10
|
require_relative '../lograge/integration'
|
11
11
|
require_relative 'ext'
|
12
|
-
require_relative 'utils'
|
12
|
+
require_relative '../../../core/contrib/rails/utils'
|
13
13
|
require_relative '../semantic_logger/integration'
|
14
14
|
|
15
15
|
module Datadog
|
@@ -41,7 +41,7 @@ module Datadog
|
|
41
41
|
# being executed, but here we know better, get it from Rails config.
|
42
42
|
# Don't set this if service has been explicitly provided by the user.
|
43
43
|
if datadog_config.service_without_fallback.nil?
|
44
|
-
datadog_config.service = rails_config[:service_name] || Utils.app_name
|
44
|
+
datadog_config.service = rails_config[:service_name] || Core::Contrib::Rails::Utils.app_name
|
45
45
|
end
|
46
46
|
|
47
47
|
activate_rack!(datadog_config, rails_config)
|
@@ -6,7 +6,7 @@ require_relative 'framework'
|
|
6
6
|
require_relative 'log_injection'
|
7
7
|
require_relative 'middlewares'
|
8
8
|
require_relative 'runner'
|
9
|
-
require_relative 'utils'
|
9
|
+
require_relative '../../../core/contrib/rails/utils'
|
10
10
|
require_relative '../semantic_logger/patcher'
|
11
11
|
|
12
12
|
module Datadog
|
@@ -16,6 +16,9 @@ module Datadog
|
|
16
16
|
|
17
17
|
# @public_api Changing the integration name or integration options can cause breaking changes
|
18
18
|
register_as :rest_client
|
19
|
+
def self.gem_name
|
20
|
+
'rest-client'
|
21
|
+
end
|
19
22
|
|
20
23
|
def self.version
|
21
24
|
Gem.loaded_specs['rest-client'] && Gem.loaded_specs['rest-client'].version
|
@@ -25,10 +25,12 @@ module Datadog
|
|
25
25
|
return super(&block) unless Tracing.enabled?
|
26
26
|
|
27
27
|
datadog_trace_request(uri) do |_span, trace|
|
28
|
-
if
|
29
|
-
|
28
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
29
|
+
global_config: datadog_configuration,
|
30
|
+
trace: trace
|
31
|
+
)
|
32
|
+
Contrib::HTTP.inject(trace, processed_headers)
|
30
33
|
end
|
31
|
-
Contrib::HTTP.inject(trace, processed_headers) if datadog_configuration[:distributed_tracing]
|
32
34
|
|
33
35
|
super(&block)
|
34
36
|
end
|
@@ -24,7 +24,12 @@ module Datadog
|
|
24
24
|
resource = job_resource(job)
|
25
25
|
|
26
26
|
Datadog::Tracing.trace(Ext::SPAN_PUSH, service: @sidekiq_service) do |span, trace_op|
|
27
|
-
|
27
|
+
if Tracing::Distributed::PropagationPolicy.enabled?(
|
28
|
+
global_config: configuration,
|
29
|
+
trace: trace_op
|
30
|
+
)
|
31
|
+
Sidekiq.inject(trace_op, job)
|
32
|
+
end
|
28
33
|
|
29
34
|
span.resource = resource
|
30
35
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative '../../../distributed/fetcher'
|
4
4
|
require_relative '../../../distributed/propagation'
|
5
|
+
require_relative '../../../distributed/propagation_policy'
|
5
6
|
require_relative '../../../distributed/b3_multi'
|
6
7
|
require_relative '../../../distributed/b3_single'
|
7
8
|
require_relative '../../../distributed/datadog'
|
@@ -31,6 +32,8 @@ module Datadog
|
|
31
32
|
Tracing::Distributed::Datadog.new(fetcher: Tracing::Distributed::Fetcher),
|
32
33
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT =>
|
33
34
|
Tracing::Distributed::TraceContext.new(fetcher: Tracing::Distributed::Fetcher),
|
35
|
+
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
|
36
|
+
Tracing::Distributed::Baggage.new(fetcher: Tracing::Distributed::Fetcher),
|
34
37
|
Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
|
35
38
|
},
|
36
39
|
propagation_style_inject: propagation_style_inject,
|
@@ -13,6 +13,7 @@ module Datadog
|
|
13
13
|
ENV_ANALYTICS_ENABLED = 'DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED'
|
14
14
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE'
|
15
15
|
SERVICE_NAME = 'sidekiq'
|
16
|
+
SIDEKIQ_8_SECONDS_PER_INTEGER = 0.001 # Sidekiq 8 uses integer epoch milliseconds, rather than epoch floats
|
16
17
|
SPAN_PUSH = 'sidekiq.push'
|
17
18
|
SPAN_JOB = 'sidekiq.job'
|
18
19
|
SPAN_JOB_FETCH = 'sidekiq.job_fetch'
|
@@ -22,7 +22,7 @@ module Datadog
|
|
22
22
|
@quantize = options[:quantize] || configuration[:quantize]
|
23
23
|
end
|
24
24
|
|
25
|
-
def call(worker, job, queue)
|
25
|
+
def call(worker, job, queue) # rubocop:disable Metrics/MethodLength
|
26
26
|
resource = job_resource(job)
|
27
27
|
|
28
28
|
if @distributed_tracing
|
@@ -61,7 +61,10 @@ module Datadog
|
|
61
61
|
span.set_tag(Ext::TAG_JOB_RETRY_COUNT, job['retry_count'])
|
62
62
|
span.set_tag(Ext::TAG_JOB_QUEUE, job['queue'])
|
63
63
|
span.set_tag(Ext::TAG_JOB_WRAPPER, job['class']) if job['wrapped']
|
64
|
-
|
64
|
+
|
65
|
+
enqueued_at = job['enqueued_at']
|
66
|
+
enqueued_at *= Ext::SIDEKIQ_8_SECONDS_PER_INTEGER if enqueued_at.is_a?(Integer)
|
67
|
+
span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Core::Utils::Time.now.utc.to_f - enqueued_at.to_f))
|
65
68
|
|
66
69
|
args = job['args']
|
67
70
|
if args && !args.empty?
|
@@ -21,9 +21,14 @@ module Datadog
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.set_peer_service!(span, sources)
|
24
|
+
config = Datadog.configuration.tracing.contrib
|
25
|
+
|
26
|
+
# If `peer_service_defaults` is disabled, we only read peer service from an explicitly set `peer.service` tag
|
27
|
+
sources = Datadog::Tracing::Contrib::SpanAttributeSchema::REFLEXIVE_SOURCES unless config.peer_service_defaults
|
28
|
+
|
24
29
|
# Acquire all peer.service values as well as any potential remapping
|
25
30
|
peer_service_val, peer_service_source = set_peer_service_from_source(span, sources)
|
26
|
-
remap_val =
|
31
|
+
remap_val = config.peer_service_mapping[peer_service_val]
|
27
32
|
|
28
33
|
# Only continue to setting peer.service if actual source is found
|
29
34
|
return false unless peer_service_source
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module Tracing
|
5
|
+
module Contrib
|
6
|
+
# Miscellaneous support methods to aid in the creation of integrations.
|
7
|
+
module Support
|
8
|
+
module_function
|
9
|
+
|
10
|
+
# Checks if a constant is loaded in a module, handling autoloaded constants correctly.
|
11
|
+
#
|
12
|
+
# This method is particularly useful when you need to check if a constant is fully loaded,
|
13
|
+
# not just defined. It handles the special case of autoloaded constants, which return
|
14
|
+
# non-nil for `defined?` even when they haven't been loaded yet.
|
15
|
+
#
|
16
|
+
# @param base_module [Module] the module to check for the constant
|
17
|
+
# @param constant [Symbol] the name of the constant to check
|
18
|
+
# @return [Boolean] true if the constant has been loaded, false otherwise
|
19
|
+
def fully_loaded?(base_module, constant)
|
20
|
+
# Autoload constants return `constant` for `defined?`, but that doesn't mean they are loaded...
|
21
|
+
base_module.const_defined?(constant) &&
|
22
|
+
# ... to check that we need to call `autoload?`. If it returns `nil`, it's loaded.
|
23
|
+
base_module.autoload?(constant).nil?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -55,6 +55,7 @@ require_relative 'contrib/httpclient/integration'
|
|
55
55
|
require_relative 'contrib/httprb/integration'
|
56
56
|
require_relative 'contrib/integration'
|
57
57
|
require_relative 'contrib/kafka/integration'
|
58
|
+
require_relative 'contrib/karafka'
|
58
59
|
require_relative 'contrib/lograge/integration'
|
59
60
|
require_relative 'contrib/mongodb/integration'
|
60
61
|
require_relative 'contrib/mysql2/integration'
|
@@ -94,8 +94,15 @@ module Datadog
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def format_trace_id(trace_id)
|
97
|
-
if Datadog.configuration.tracing.trace_id_128_bit_logging_enabled
|
98
|
-
|
97
|
+
if Datadog.configuration.tracing.trace_id_128_bit_logging_enabled
|
98
|
+
format_trace_id_128(trace_id)
|
99
|
+
else
|
100
|
+
Tracing::Utils::TraceId.to_low_order(trace_id).to_s
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def format_trace_id_128(trace_id)
|
105
|
+
if !Tracing::Utils::TraceId.to_high_order(trace_id).zero?
|
99
106
|
Kernel.format('%032x', trace_id)
|
100
107
|
else
|
101
108
|
Tracing::Utils::TraceId.to_low_order(trace_id).to_s
|
@@ -55,7 +55,7 @@ module Datadog
|
|
55
55
|
span_id = Helpers.parse_hex_id(fetcher[@span_id_key])
|
56
56
|
|
57
57
|
# Return early if this propagation is not valid
|
58
|
-
return if span_id.nil? || span_id <= 0 || span_id
|
58
|
+
return if span_id.nil? || span_id <= 0 || span_id > Tracing::Utils::EXTERNAL_MAX_ID
|
59
59
|
|
60
60
|
# We don't need to try and convert sampled since B3 supports 0/1 (AUTO_REJECT/AUTO_KEEP)
|
61
61
|
sampling_priority = Helpers.parse_decimal_id(fetcher[@sampled_key])
|
@@ -54,7 +54,7 @@ module Datadog
|
|
54
54
|
|
55
55
|
span_id = Helpers.parse_hex_id(parts[1]) if parts.length > 1
|
56
56
|
# Return early if this propagation is not valid
|
57
|
-
return if span_id.nil? || span_id <= 0 || span_id
|
57
|
+
return if span_id.nil? || span_id <= 0 || span_id > Tracing::Utils::EXTERNAL_MAX_ID
|
58
58
|
|
59
59
|
sampling_priority = Helpers.parse_decimal_id(parts[2]) if parts.length > 2
|
60
60
|
|