datadog 2.12.0 → 2.22.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 +348 -1
- data/README.md +0 -1
- data/ext/LIBDATADOG_DEVELOPMENT.md +60 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
- data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
- 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 +10 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
- data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- 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 +41 -21
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
- data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
- data/ext/libdatadog_api/crashtracker.c +11 -12
- 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/ddsketch.c +106 -0
- data/ext/libdatadog_api/extconf.rb +5 -3
- data/ext/libdatadog_api/init.c +18 -0
- data/ext/libdatadog_api/library_config.c +172 -0
- data/ext/libdatadog_api/library_config.h +25 -0
- data/ext/libdatadog_api/process_discovery.c +118 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +15 -5
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +75 -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 +44 -5
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +601 -74
- data/lib/datadog/appsec/assets/waf_rules/strict.json +48 -75
- data/lib/datadog/appsec/autoload.rb +2 -2
- data/lib/datadog/appsec/component.rb +46 -71
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +162 -30
- data/lib/datadog/appsec/context.rb +30 -7
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +35 -18
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +62 -11
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- 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 +34 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +103 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +70 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +11 -12
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +10 -10
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +10 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +53 -31
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -44
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +35 -11
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +65 -47
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +12 -12
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +45 -22
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/event.rb +91 -147
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +23 -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 +23 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +2 -2
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +29 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
- data/lib/datadog/appsec/remote.rb +43 -59
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/engine.rb +176 -0
- data/lib/datadog/appsec/security_engine/result.rb +44 -9
- data/lib/datadog/appsec/security_engine/runner.rb +44 -21
- data/lib/datadog/appsec/security_event.rb +37 -0
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +5 -15
- data/lib/datadog/auto_instrument_base.rb +2 -1
- 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 +8 -50
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +69 -37
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/config_helper.rb +100 -0
- data/lib/datadog/core/configuration/deprecations.rb +36 -0
- data/lib/datadog/core/configuration/ext.rb +4 -1
- data/lib/datadog/core/configuration/option.rb +117 -77
- data/lib/datadog/core/configuration/option_definition.rb +5 -14
- data/lib/datadog/core/configuration/options.rb +15 -13
- data/lib/datadog/core/configuration/settings.rb +117 -48
- data/lib/datadog/core/configuration/stable_config.rb +32 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +337 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
- data/lib/datadog/core/ddsketch.rb +21 -0
- data/lib/datadog/core/deprecations.rb +2 -2
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- 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 -8
- data/lib/datadog/core/environment/git.rb +3 -2
- 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 +4 -4
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +29 -29
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/pin.rb +4 -8
- data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
- data/lib/datadog/core/process_discovery.rb +61 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +44 -35
- data/lib/datadog/core/remote/component.rb +12 -17
- 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/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +25 -89
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/ext.rb +0 -1
- 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 +92 -52
- 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_endpoints_loaded.rb +30 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +18 -472
- 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 +11 -5
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- 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 +90 -24
- 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/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +19 -17
- 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 -1
- 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 +25 -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 +10 -0
- data/lib/datadog/di/boot.rb +43 -0
- data/lib/datadog/di/component.rb +21 -2
- data/lib/datadog/di/context.rb +70 -0
- data/lib/datadog/di/el/compiler.rb +164 -0
- data/lib/datadog/di/el/evaluator.rb +159 -0
- data/lib/datadog/di/el/expression.rb +42 -0
- data/lib/datadog/di/el.rb +5 -0
- data/lib/datadog/di/error.rb +25 -0
- data/lib/datadog/di/instrumenter.rb +132 -20
- data/lib/datadog/di/probe.rb +35 -15
- data/lib/datadog/di/probe_builder.rb +39 -1
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/probe_manager.rb +3 -2
- data/lib/datadog/di/probe_notification_builder.rb +61 -67
- data/lib/datadog/di/probe_notifier_worker.rb +25 -17
- data/lib/datadog/di/remote.rb +5 -5
- data/lib/datadog/di/serializer.rb +160 -8
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +18 -35
- data/lib/datadog/di/transport/http.rb +15 -77
- data/lib/datadog/di/transport/input.rb +14 -5
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +0 -34
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events/v2.rb +196 -0
- data/lib/datadog/kit/appsec/events.rb +17 -4
- data/lib/datadog/kit/identity.rb +22 -12
- 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 +21 -6
- data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
- data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +15 -11
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- 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 +6 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/collectors/info.rb +44 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
- data/lib/datadog/profiling/component.rb +8 -9
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +12 -7
- data/lib/datadog/profiling/ext.rb +2 -15
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +8 -62
- data/lib/datadog/profiling/profiler.rb +2 -0
- data/lib/datadog/profiling/scheduler.rb +10 -2
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/stack_recorder.rb +9 -9
- data/lib/datadog/profiling/tag_builder.rb +7 -41
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- data/lib/datadog/profiling/tasks/setup.rb +2 -0
- data/lib/datadog/profiling.rb +13 -10
- data/lib/datadog/single_step_instrument.rb +9 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/component.rb +21 -29
- data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
- data/lib/datadog/tracing/configuration/ext.rb +8 -4
- data/lib/datadog/tracing/configuration/settings.rb +50 -12
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +19 -4
- 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 +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
- data/lib/datadog/tracing/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +17 -8
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +12 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +8 -2
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/component.rb +2 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +6 -6
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
- data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +7 -5
- data/lib/datadog/tracing/contrib/ext.rb +4 -3
- data/lib/datadog/tracing/contrib/extensions.rb +9 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +9 -5
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +84 -48
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +15 -9
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +11 -15
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -19
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +11 -19
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- 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/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +9 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +23 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +12 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -66
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +12 -11
- data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -3
- data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +8 -6
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- 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/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +2 -2
- data/lib/datadog/tracing/distributed/baggage.rb +196 -0
- data/lib/datadog/tracing/distributed/datadog.rb +8 -7
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
- data/lib/datadog/tracing/distributed/helpers.rb +1 -1
- data/lib/datadog/tracing/distributed/none.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +28 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +13 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata/tagging.rb +4 -4
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +0 -2
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +11 -2
- data/lib/datadog/tracing/span_event.rb +11 -11
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +76 -26
- data/lib/datadog/tracing/sync_writer.rb +5 -4
- data/lib/datadog/tracing/trace_digest.rb +29 -24
- data/lib/datadog/tracing/trace_operation.rb +121 -97
- data/lib/datadog/tracing/trace_segment.rb +8 -6
- data/lib/datadog/tracing/tracer.rb +90 -43
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +6 -5
- data/lib/datadog/tracing/transport/http/traces.rb +15 -43
- data/lib/datadog/tracing/transport/http.rb +13 -75
- data/lib/datadog/tracing/transport/io/client.rb +5 -5
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +31 -14
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +16 -16
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing/writer.rb +4 -4
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +8 -2
- metadata +115 -24
- data/ext/libdatadog_api/macos_development.md +0 -26
- 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 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
- data/lib/datadog/appsec/processor.rb +0 -107
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- 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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../../../core/transport/http/api/instance'
|
|
4
|
+
require_relative '../../../core/transport/http/api/spec'
|
|
3
5
|
require_relative 'client'
|
|
4
6
|
|
|
5
7
|
module Datadog
|
|
@@ -16,55 +18,26 @@ module Datadog
|
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
module API
|
|
19
|
-
|
|
21
|
+
class Instance < Core::Transport::HTTP::API::Instance
|
|
20
22
|
def send_input(env)
|
|
21
|
-
raise
|
|
23
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new('input', self) unless spec.is_a?(Input::API::Spec)
|
|
22
24
|
|
|
23
25
|
spec.send_input(env) do |request_env|
|
|
24
26
|
call(request_env)
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
|
-
|
|
28
|
-
class InputNotSupportedError < StandardError
|
|
29
|
-
attr_reader :spec
|
|
30
|
-
|
|
31
|
-
def initialize(spec)
|
|
32
|
-
super
|
|
33
|
-
|
|
34
|
-
@spec = spec
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def message
|
|
38
|
-
'Input not supported for this API!'
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
29
|
end
|
|
42
30
|
|
|
43
|
-
|
|
31
|
+
class Spec < Core::Transport::HTTP::API::Spec
|
|
44
32
|
attr_accessor :input
|
|
45
33
|
|
|
46
34
|
def send_input(env, &block)
|
|
47
|
-
raise
|
|
35
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('input', self) if input.nil?
|
|
48
36
|
|
|
49
37
|
input.call(env, &block)
|
|
50
38
|
end
|
|
51
|
-
|
|
52
|
-
class NoInputEndpointDefinedError < StandardError
|
|
53
|
-
attr_reader :spec
|
|
54
|
-
|
|
55
|
-
def initialize(spec)
|
|
56
|
-
super
|
|
57
|
-
|
|
58
|
-
@spec = spec
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def message
|
|
62
|
-
'No input endpoint is defined for API specification!'
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
39
|
end
|
|
66
40
|
|
|
67
|
-
# Endpoint for negotiation
|
|
68
41
|
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
69
42
|
HEADER_CONTENT_TYPE = 'Content-Type'
|
|
70
43
|
|
|
@@ -80,8 +53,18 @@ module Datadog
|
|
|
80
53
|
# Encode body & type
|
|
81
54
|
env.headers[HEADER_CONTENT_TYPE] = encoder.content_type
|
|
82
55
|
env.body = env.request.parcel.data
|
|
83
|
-
|
|
84
|
-
|
|
56
|
+
env.query = {
|
|
57
|
+
# DEV: In theory we could serialize the tags here
|
|
58
|
+
# rather than requiring them to be pre-serialized.
|
|
59
|
+
# In practice the tags should be relatively static
|
|
60
|
+
# (they would change when process forks, and hostname
|
|
61
|
+
# could change at any time but probably we should ignore
|
|
62
|
+
# those changes), therefore serializing the tags
|
|
63
|
+
# every time would be wasteful.
|
|
64
|
+
ddtags: env.request.serialized_tags,
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
super
|
|
85
68
|
end
|
|
86
69
|
end
|
|
87
70
|
end
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'uri'
|
|
4
|
-
|
|
5
|
-
require_relative '../../core/environment/container'
|
|
6
|
-
require_relative '../../core/environment/ext'
|
|
7
|
-
require_relative '../../core/transport/ext'
|
|
8
|
-
require_relative '../../core/transport/http/adapters/net'
|
|
9
|
-
require_relative '../../core/transport/http/adapters/test'
|
|
10
|
-
require_relative '../../core/transport/http/adapters/unix_socket'
|
|
11
3
|
require_relative 'diagnostics'
|
|
12
4
|
require_relative 'input'
|
|
13
5
|
require_relative 'http/api'
|
|
14
|
-
require_relative '../../core/transport/http
|
|
15
|
-
require_relative '../../../datadog/version'
|
|
6
|
+
require_relative '../../core/transport/http'
|
|
16
7
|
|
|
17
8
|
module Datadog
|
|
18
9
|
module DI
|
|
@@ -21,98 +12,45 @@ module Datadog
|
|
|
21
12
|
module HTTP
|
|
22
13
|
module_function
|
|
23
14
|
|
|
24
|
-
# Builds a new Transport::HTTP::Client
|
|
25
|
-
def new(klass, &block)
|
|
26
|
-
Core::Transport::HTTP::Builder.new(
|
|
27
|
-
api_instance_class: API::Instance, &block
|
|
28
|
-
).to_transport(klass)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
15
|
# Builds a new Transport::HTTP::Client with default settings
|
|
32
16
|
# Pass a block to override any settings.
|
|
33
17
|
def diagnostics(
|
|
34
18
|
agent_settings:,
|
|
35
|
-
|
|
19
|
+
logger:,
|
|
20
|
+
api_version: nil,
|
|
21
|
+
headers: nil
|
|
36
22
|
)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
23
|
+
Core::Transport::HTTP.build(api_instance_class: Diagnostics::API::Instance,
|
|
24
|
+
logger: logger,
|
|
25
|
+
agent_settings: agent_settings, api_version: api_version, headers: headers) do |transport|
|
|
41
26
|
apis = API.defaults
|
|
42
27
|
|
|
43
28
|
transport.api API::DIAGNOSTICS, apis[API::DIAGNOSTICS]
|
|
44
29
|
|
|
45
|
-
# Apply any settings given by options
|
|
46
|
-
unless options.empty?
|
|
47
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
|
48
|
-
transport.headers options[:headers] if options.key?(:headers)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
30
|
# Call block to apply any customization, if provided
|
|
52
31
|
yield(transport) if block_given?
|
|
53
|
-
end
|
|
32
|
+
end.to_transport(DI::Transport::Diagnostics::Transport)
|
|
54
33
|
end
|
|
55
34
|
|
|
56
35
|
# Builds a new Transport::HTTP::Client with default settings
|
|
57
36
|
# Pass a block to override any settings.
|
|
58
37
|
def input(
|
|
59
38
|
agent_settings:,
|
|
60
|
-
|
|
39
|
+
logger:,
|
|
40
|
+
api_version: nil,
|
|
41
|
+
headers: nil
|
|
61
42
|
)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
43
|
+
Core::Transport::HTTP.build(api_instance_class: Input::API::Instance,
|
|
44
|
+
logger: logger,
|
|
45
|
+
agent_settings: agent_settings, api_version: api_version, headers: headers) do |transport|
|
|
66
46
|
apis = API.defaults
|
|
67
47
|
|
|
68
48
|
transport.api API::INPUT, apis[API::INPUT]
|
|
69
49
|
|
|
70
|
-
# Apply any settings given by options
|
|
71
|
-
unless options.empty?
|
|
72
|
-
transport.default_api = options[:api_version] if options.key?(:api_version)
|
|
73
|
-
transport.headers options[:headers] if options.key?(:headers)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
50
|
# Call block to apply any customization, if provided
|
|
77
51
|
yield(transport) if block_given?
|
|
78
|
-
end
|
|
52
|
+
end.to_transport(DI::Transport::Input::Transport)
|
|
79
53
|
end
|
|
80
|
-
|
|
81
|
-
def default_headers
|
|
82
|
-
{
|
|
83
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_TOP_LEVEL => '1',
|
|
84
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
|
|
85
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
|
|
86
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
|
|
87
|
-
Datadog::Core::Environment::Ext::LANG_INTERPRETER,
|
|
88
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
|
|
89
|
-
Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
|
|
90
|
-
Datadog::Core::Environment::Ext::GEM_DATADOG_VERSION
|
|
91
|
-
}.tap do |headers|
|
|
92
|
-
# Add container ID, if present.
|
|
93
|
-
container_id = Datadog::Core::Environment::Container.container_id
|
|
94
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
|
95
|
-
# Pretend that stats computation are already done by the client
|
|
96
|
-
if Datadog.configuration.appsec.standalone.enabled
|
|
97
|
-
headers[Datadog::Core::Transport::Ext::HTTP::HEADER_CLIENT_COMPUTED_STATS] = 'yes'
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def default_adapter
|
|
103
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Add adapters to registry
|
|
107
|
-
Datadog::Core::Transport::HTTP::Builder::REGISTRY.set(
|
|
108
|
-
Datadog::Core::Transport::HTTP::Adapters::Net,
|
|
109
|
-
Datadog::Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
|
110
|
-
)
|
|
111
|
-
Datadog::Core::Transport::HTTP::Builder::REGISTRY.set(Datadog::Core::Transport::HTTP::Adapters::Test, Datadog::Core::Transport::Ext::Test::ADAPTER)
|
|
112
|
-
Datadog::Core::Transport::HTTP::Builder::REGISTRY.set(
|
|
113
|
-
Datadog::Core::Transport::HTTP::Adapters::UnixSocket,
|
|
114
|
-
Datadog::Core::Transport::Ext::UnixSocket::ADAPTER
|
|
115
|
-
)
|
|
116
54
|
end
|
|
117
55
|
end
|
|
118
56
|
end
|
|
@@ -12,25 +12,34 @@ module Datadog
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
class Request < Datadog::Core::Transport::Request
|
|
15
|
+
attr_reader :serialized_tags
|
|
16
|
+
|
|
17
|
+
def initialize(parcel, serialized_tags)
|
|
18
|
+
super(parcel)
|
|
19
|
+
|
|
20
|
+
@serialized_tags = serialized_tags
|
|
21
|
+
end
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
class Transport
|
|
18
|
-
attr_reader :client, :apis, :default_api, :current_api_id
|
|
25
|
+
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
|
19
26
|
|
|
20
|
-
def initialize(apis, default_api)
|
|
27
|
+
def initialize(apis, default_api, logger:)
|
|
21
28
|
@apis = apis
|
|
29
|
+
@logger = logger
|
|
22
30
|
|
|
23
|
-
@client = HTTP::Client.new(current_api)
|
|
31
|
+
@client = HTTP::Client.new(current_api, logger: logger)
|
|
24
32
|
end
|
|
25
33
|
|
|
26
34
|
def current_api
|
|
27
35
|
@apis[HTTP::API::INPUT]
|
|
28
36
|
end
|
|
29
37
|
|
|
30
|
-
def send_input(payload)
|
|
38
|
+
def send_input(payload, tags)
|
|
31
39
|
json = JSON.dump(payload)
|
|
32
40
|
parcel = EncodedParcel.new(json)
|
|
33
|
-
|
|
41
|
+
serialized_tags = Core::TagBuilder.serialize_tags(tags)
|
|
42
|
+
request = Request.new(parcel, serialized_tags)
|
|
34
43
|
|
|
35
44
|
response = @client.send_input_payload(request)
|
|
36
45
|
unless response.ok?
|
data/lib/datadog/di/utils.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# standard gets itself into an infinite loop over this
|
|
4
|
+
# rubocop:disable Layout/SpaceAfterNot
|
|
5
|
+
|
|
3
6
|
module Datadog
|
|
4
7
|
module DI
|
|
5
8
|
module Utils
|
|
@@ -135,3 +138,5 @@ module Datadog
|
|
|
135
138
|
end
|
|
136
139
|
end
|
|
137
140
|
end
|
|
141
|
+
|
|
142
|
+
# rubocop:enable Layout/SpaceAfterNot
|
data/lib/datadog/di.rb
CHANGED
|
@@ -1,24 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'di/logger'
|
|
4
|
-
require_relative 'di/base'
|
|
5
|
-
require_relative 'di/error'
|
|
6
|
-
require_relative 'di/code_tracker'
|
|
7
|
-
require_relative 'di/component'
|
|
8
3
|
require_relative 'di/configuration'
|
|
9
4
|
require_relative 'di/extensions'
|
|
10
|
-
require_relative 'di/instrumenter'
|
|
11
|
-
require_relative 'di/probe'
|
|
12
|
-
require_relative 'di/probe_builder'
|
|
13
|
-
require_relative 'di/probe_manager'
|
|
14
|
-
require_relative 'di/probe_notification_builder'
|
|
15
|
-
require_relative 'di/probe_notifier_worker'
|
|
16
|
-
require_relative 'di/redactor'
|
|
17
5
|
require_relative 'di/remote'
|
|
18
|
-
require_relative 'di/serializer'
|
|
19
|
-
#require_relative 'di/transport'
|
|
20
|
-
require_relative 'di/transport/http'
|
|
21
|
-
require_relative 'di/utils'
|
|
22
6
|
|
|
23
7
|
module Datadog
|
|
24
8
|
# Namespace for Datadog dynamic instrumentation.
|
|
@@ -35,7 +19,6 @@ module Datadog
|
|
|
35
19
|
Extensions.activate!
|
|
36
20
|
|
|
37
21
|
class << self
|
|
38
|
-
|
|
39
22
|
# This method is called from DI Remote handler to issue DI operations
|
|
40
23
|
# to the probe manager (add or remove probes).
|
|
41
24
|
#
|
|
@@ -51,20 +34,3 @@ module Datadog
|
|
|
51
34
|
end
|
|
52
35
|
end
|
|
53
36
|
end
|
|
54
|
-
|
|
55
|
-
if %w(1 true).include?(ENV['DD_DYNAMIC_INSTRUMENTATION_ENABLED']) # steep:ignore
|
|
56
|
-
# For initial release of Dynamic Instrumentation, activate code tracking
|
|
57
|
-
# only if DI is explicitly requested in the environment.
|
|
58
|
-
# Code tracking is required for line probes to work; see the comments
|
|
59
|
-
# above for the implementation of the method.
|
|
60
|
-
#
|
|
61
|
-
# If DI is enabled programmatically, the application can (and must,
|
|
62
|
-
# for line probes to work) activate tracking in an initializer.
|
|
63
|
-
# We seem to have Datadog.logger here already
|
|
64
|
-
Datadog.logger.debug("di: activating code tracking")
|
|
65
|
-
Datadog::DI.activate_tracking
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
require_relative 'di/contrib'
|
|
69
|
-
|
|
70
|
-
Datadog::DI::Contrib.load_now_or_later
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module ErrorTracking
|
|
7
|
+
# The Collector is in charge, for a SpanOperation of storing the span events
|
|
8
|
+
# created when an error is handled. Each SpanOperation has a Collector as soon
|
|
9
|
+
# as a span event is created and the Collector has the same life time as the SpanOp.
|
|
10
|
+
#
|
|
11
|
+
# If an error is handled then rethrown, the SpanEvent corresponding to the error
|
|
12
|
+
# will be deleted. That is why we do not add directly the SpanEvent to the SpanOp.
|
|
13
|
+
#
|
|
14
|
+
# @api private
|
|
15
|
+
class Collector
|
|
16
|
+
SPAN_EVENTS_LIMIT = 100
|
|
17
|
+
LOCK = Mutex.new
|
|
18
|
+
# Proc called when the span_operation :after_stop event is published
|
|
19
|
+
def self.after_stop
|
|
20
|
+
@after_stop ||= proc do |span_op, error|
|
|
21
|
+
# if this proc is called, we are sure that span_op has a collector
|
|
22
|
+
collector = span_op.get_collector_or_initialize
|
|
23
|
+
# if an error exited the scope of the span, we delete the corresponding SpanEvent.
|
|
24
|
+
collector.on_error(span_op, error) if error
|
|
25
|
+
|
|
26
|
+
span_events = collector.span_events
|
|
27
|
+
span_op.span_events.concat(span_events)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def initialize
|
|
32
|
+
@span_event_per_error = {}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def add_span_event(span_op, span_event, error)
|
|
36
|
+
# When this is the first time we add a span event for a span,
|
|
37
|
+
# we suscribe to the :after_stop event
|
|
38
|
+
if @span_event_per_error.empty?
|
|
39
|
+
events = span_op.send(:events)
|
|
40
|
+
events.after_stop.subscribe(&self.class.after_stop)
|
|
41
|
+
|
|
42
|
+
# This tag is used by the Error Tracking product to report
|
|
43
|
+
# the error in Error Tracking
|
|
44
|
+
span_op.set_tag(Ext::SPAN_EVENTS_HAS_EXCEPTION, true)
|
|
45
|
+
end
|
|
46
|
+
# Set a limit to the number of span event we can store per SpanOp
|
|
47
|
+
# If an error has been handled several times in the same span we can still
|
|
48
|
+
# modify the event (even if the capacity is reached) in order to report
|
|
49
|
+
# the information of the last rescue
|
|
50
|
+
if @span_event_per_error.key?(error) || @span_event_per_error.length < SPAN_EVENTS_LIMIT
|
|
51
|
+
@span_event_per_error[error] = span_event
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
if RUBY_VERSION >= Ext::RUBY_VERSION_WITH_RESCUE_EVENT
|
|
56
|
+
# Starting from ruby3.3, as we are listening to :rescue event,
|
|
57
|
+
# we just want to remove the span event if the error was
|
|
58
|
+
# previously handled
|
|
59
|
+
def on_error(_span_op, error)
|
|
60
|
+
@span_event_per_error.delete(error)
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
# Up to ruby3.2, we are listening to :raise event. We need to ensure
|
|
64
|
+
# that an error exiting the scope of a span is not handled in a parent span.
|
|
65
|
+
# This function will propagate the span event to the parent span. If the
|
|
66
|
+
# error is not handled in the parent span, it will be deleted by design.
|
|
67
|
+
def on_error(span_op, error)
|
|
68
|
+
return unless @span_event_per_error.key?(error)
|
|
69
|
+
|
|
70
|
+
unless span_op.root?
|
|
71
|
+
parent = span_op.send(:parent)
|
|
72
|
+
LOCK.synchronize do
|
|
73
|
+
parent_collector = parent.get_collector_or_initialize { Collector.new }
|
|
74
|
+
parent_collector.add_span_event(parent, @span_event_per_error[error], error)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
@span_event_per_error.delete(error)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def span_events
|
|
83
|
+
@span_event_per_error.values
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
require_relative 'collector'
|
|
5
|
+
require_relative 'filters'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module ErrorTracking
|
|
9
|
+
# Component for Error Tracking.
|
|
10
|
+
#
|
|
11
|
+
# Only one instance of the Component should ever be active.
|
|
12
|
+
#
|
|
13
|
+
# The component instance records every handled exceptions from the configured scopes
|
|
14
|
+
# (user, third_party packages, specified files or everything).
|
|
15
|
+
class Component
|
|
16
|
+
LOCK = Mutex.new
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
def build(settings, tracer, logger)
|
|
20
|
+
return if !settings.respond_to?(:error_tracking) || (settings.error_tracking.handled_errors.nil? &&
|
|
21
|
+
settings.error_tracking.handled_errors_include.empty?)
|
|
22
|
+
|
|
23
|
+
return unless environment_supported?(logger)
|
|
24
|
+
|
|
25
|
+
new(
|
|
26
|
+
tracer: tracer,
|
|
27
|
+
handled_errors: settings.error_tracking.handled_errors,
|
|
28
|
+
handled_errors_include: settings.error_tracking.handled_errors_include,
|
|
29
|
+
).tap(&:start)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def environment_supported?(logger)
|
|
33
|
+
if RUBY_ENGINE != 'ruby'
|
|
34
|
+
logger.warn("error tracking: cannot enable error tracking: MRI is required, but running on #{RUBY_ENGINE}")
|
|
35
|
+
false
|
|
36
|
+
elsif RUBY_VERSION < '2.7'
|
|
37
|
+
logger.warn(
|
|
38
|
+
"error tracking: cannot enable error tracking: Ruby 2.7+ is required, but running
|
|
39
|
+
on #{RUBY_VERSION}"
|
|
40
|
+
)
|
|
41
|
+
false
|
|
42
|
+
else
|
|
43
|
+
true
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def initialize(tracer:, handled_errors:, handled_errors_include:)
|
|
49
|
+
@tracer = tracer
|
|
50
|
+
|
|
51
|
+
# Hash containing the paths to the instrumented files
|
|
52
|
+
@instrumented_files = Set.new unless handled_errors_include.empty?
|
|
53
|
+
# Array containing file paths, file names and gems names to instrument.
|
|
54
|
+
# This is coming from the DD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE env variable
|
|
55
|
+
@handled_errors_include = handled_errors_include
|
|
56
|
+
|
|
57
|
+
# Filter function is used to filter out the exception
|
|
58
|
+
# we do not want to report. For instance exception from gems.
|
|
59
|
+
@filter_function = Filters.generate_filter(handled_errors, @instrumented_files)
|
|
60
|
+
|
|
61
|
+
# :rescue event was added in Ruby 3.3
|
|
62
|
+
#
|
|
63
|
+
# Before Ruby3.3 the TracePoint listen for :raise events.
|
|
64
|
+
# If an error is not handled, we will delete the according
|
|
65
|
+
# span event in the collector.
|
|
66
|
+
event = (RUBY_VERSION >= '3.3') ? :rescue : :raise
|
|
67
|
+
|
|
68
|
+
# This TracePoint is in charge of capturing the handled exceptions
|
|
69
|
+
# and of adding the corresponding span events to the collector
|
|
70
|
+
@handled_exc_tracker = create_exc_tracker_trace_point(event)
|
|
71
|
+
|
|
72
|
+
if @instrumented_files
|
|
73
|
+
# The only thing we know about the handled errors is the path of the file
|
|
74
|
+
# in which the error was rescued. Therefore, we need to retrieve the path
|
|
75
|
+
# of the files the user want to instrument. This TracePoint is used for that
|
|
76
|
+
# purpose
|
|
77
|
+
@include_path_getter = create_script_compiled_trace_point
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def create_exc_tracker_trace_point(event)
|
|
82
|
+
TracePoint.new(event) do |tp|
|
|
83
|
+
active_span = @tracer.active_span
|
|
84
|
+
if active_span
|
|
85
|
+
raised_exception = tp.raised_exception
|
|
86
|
+
# Note that in 3.2, this will give the path of where the error was raised
|
|
87
|
+
# which may cause the handled_error_include env variable to malfunction.
|
|
88
|
+
rescue_file_path = tp.path
|
|
89
|
+
if @filter_function.call(rescue_file_path)
|
|
90
|
+
span_event = generate_span_event(raised_exception)
|
|
91
|
+
LOCK.synchronize do
|
|
92
|
+
collector = active_span.get_collector_or_initialize { Collector.new }
|
|
93
|
+
collector.add_span_event(active_span, span_event, raised_exception)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def create_script_compiled_trace_point
|
|
101
|
+
TracePoint.new(:script_compiled) do |tp|
|
|
102
|
+
next if tp.eval_script
|
|
103
|
+
|
|
104
|
+
path = tp.instruction_sequence.path
|
|
105
|
+
next if path.nil?
|
|
106
|
+
|
|
107
|
+
@handled_errors_include.each do |file_to_instr|
|
|
108
|
+
# The user can provide either
|
|
109
|
+
# - absolute_path starting with '/'. In that case the path of the file
|
|
110
|
+
# should begin with file_to_instr
|
|
111
|
+
# - a relative_path starting with './'. In that case, we extend the path
|
|
112
|
+
# and it is the same as above
|
|
113
|
+
# - otherwise we just check if the name provided is in the path and is
|
|
114
|
+
# either the name of a folder or of a ruby file.
|
|
115
|
+
regex =
|
|
116
|
+
if file_to_instr.start_with?('/')
|
|
117
|
+
%r{\A#{Regexp.escape(file_to_instr)}(?:/|\.rb\z|\z)}
|
|
118
|
+
elsif file_to_instr.start_with?('./')
|
|
119
|
+
abs_path = File.expand_path(file_to_instr)
|
|
120
|
+
%r{\A#{Regexp.escape(abs_path)}(?:/|\.rb\z|\z)}
|
|
121
|
+
else
|
|
122
|
+
%r{/#{Regexp.escape(file_to_instr)}(?:/|\.rb\z|\z)}
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
add_instrumented_file(path) if path.match?(regex)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Starts the TracePoints.
|
|
131
|
+
#
|
|
132
|
+
# Enables the script_compiled TracePoint if handled_errors_include is not empty.
|
|
133
|
+
def start
|
|
134
|
+
@handled_exc_tracker.enable
|
|
135
|
+
@include_path_getter&.enable
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Shuts down error tracker.
|
|
139
|
+
#
|
|
140
|
+
# Disables the TracePoints.
|
|
141
|
+
def shutdown!
|
|
142
|
+
@handled_exc_tracker.disable
|
|
143
|
+
@include_path_getter&.disable
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
private
|
|
147
|
+
|
|
148
|
+
# Generates a span event from the exception info.
|
|
149
|
+
#
|
|
150
|
+
# The event follows the otel semantics.
|
|
151
|
+
# https://opentelemetry.io/docs/specs/otel/trace/exceptions/
|
|
152
|
+
def generate_span_event(exception)
|
|
153
|
+
formatted_exception = Datadog::Core::Error.build_from(exception)
|
|
154
|
+
attributes = {
|
|
155
|
+
'exception.type' => formatted_exception.type,
|
|
156
|
+
'exception.message' => formatted_exception.message,
|
|
157
|
+
'exception.stacktrace' => formatted_exception.backtrace
|
|
158
|
+
}
|
|
159
|
+
Datadog::Tracing::SpanEvent.new('exception', attributes: attributes)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def add_instrumented_file(file_path)
|
|
163
|
+
@instrumented_files&.add(file_path)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module ErrorTracking
|
|
7
|
+
module Configuration
|
|
8
|
+
# Settings
|
|
9
|
+
module Settings
|
|
10
|
+
def self.extended(base)
|
|
11
|
+
base = base.singleton_class unless base.is_a?(Class)
|
|
12
|
+
add_settings!(base)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.add_settings!(base)
|
|
16
|
+
base.class_eval do
|
|
17
|
+
# Error Tracking specific configurations.
|
|
18
|
+
# @public_api
|
|
19
|
+
settings :error_tracking do
|
|
20
|
+
# Enable automatic reporting of handled errors and defines the scope
|
|
21
|
+
# for which to report errors: user code, gems, or both. Possible
|
|
22
|
+
# values are: all | user | third_party.
|
|
23
|
+
#
|
|
24
|
+
# @default 'DD_ERROR_TRACKING_HANDLED_ERRORS' environment variable, otherwise `nil`
|
|
25
|
+
# @return [String, nil]
|
|
26
|
+
option :handled_errors do |o|
|
|
27
|
+
o.type :string, nilable: true
|
|
28
|
+
o.default Ext::DEFAULT_HANDLED_ERRORS
|
|
29
|
+
o.env Ext::ENV_HANDLED_ERRORS
|
|
30
|
+
o.setter do |value|
|
|
31
|
+
next value if Ext::VALID_HANDLED_ERRORS.include?(value)
|
|
32
|
+
|
|
33
|
+
unless value.nil?
|
|
34
|
+
Datadog.logger.warn(
|
|
35
|
+
"Invalid handled errors scope: #{value}. " \
|
|
36
|
+
"Supported values are: #{Ext::VALID_HANDLED_ERRORS.join(" | ")}. " \
|
|
37
|
+
'Deactivating the feature.'
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Ext::DEFAULT_HANDLED_ERRORS
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Enable automatic reporting of handled errors and specify what files should be
|
|
46
|
+
# instrumented. The value is a list of comma separated paths, filenames or gem names.
|
|
47
|
+
# The paths can be absolute, starting with '/' or relative to directory in which the program
|
|
48
|
+
# is launched, starting with './'.
|
|
49
|
+
#
|
|
50
|
+
# @default 'DD_ERROR_TRACKING_HANDLED_ERRORS_MODULES' environment variable, otherwise `nil`
|
|
51
|
+
# @return [String, nil]
|
|
52
|
+
option :handled_errors_include do |o|
|
|
53
|
+
o.type :array
|
|
54
|
+
o.default []
|
|
55
|
+
o.env Ext::ENV_HANDLED_ERRORS_INCLUDE
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module ErrorTracking
|
|
5
|
+
# Error Tracking constants
|
|
6
|
+
module Ext
|
|
7
|
+
ENV_HANDLED_ERRORS = 'DD_ERROR_TRACKING_HANDLED_ERRORS'
|
|
8
|
+
ENV_HANDLED_ERRORS_INCLUDE = 'DD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE'
|
|
9
|
+
HANDLED_ERRORS_ALL = 'all'
|
|
10
|
+
HANDLED_ERRORS_USER = 'user'
|
|
11
|
+
HANDLED_ERRORS_THIRD_PARTY = 'third_party'
|
|
12
|
+
DEFAULT_HANDLED_ERRORS = nil
|
|
13
|
+
VALID_HANDLED_ERRORS = [HANDLED_ERRORS_ALL, HANDLED_ERRORS_USER, HANDLED_ERRORS_THIRD_PARTY].freeze
|
|
14
|
+
SPAN_EVENTS_HAS_EXCEPTION = '_dd.span_events.has_exception'
|
|
15
|
+
RUBY_VERSION_WITH_RESCUE_EVENT = '3.3'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|