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
|
+
# rubocop:disable Lint/AssignmentInCondition
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module DI
|
|
5
7
|
# Builds probe status notification and snapshot payloads.
|
|
@@ -39,60 +41,47 @@ module Datadog
|
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
# Duration is in seconds.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
snapshot = if probe.line? && probe.capture_snapshot?
|
|
46
|
-
if trace_point.nil?
|
|
47
|
-
raise "Cannot create snapshot because there is no trace point"
|
|
48
|
-
end
|
|
49
|
-
get_local_variables(trace_point)
|
|
50
|
-
end
|
|
51
|
-
# TODO check how many stack frames we should be keeping/sending,
|
|
52
|
-
# this should be all frames for enriched probes and no frames for
|
|
53
|
-
# non-enriched probes?
|
|
54
|
-
build_snapshot(probe, rv: rv, snapshot: snapshot,
|
|
55
|
-
# Actual path of the instrumented file.
|
|
56
|
-
path: trace_point&.path,
|
|
57
|
-
duration: duration, caller_locations: caller_locations, args: args, kwargs: kwargs,
|
|
58
|
-
serialized_entry_args: serialized_entry_args)
|
|
44
|
+
# path is the actual path of the instrumented file.
|
|
45
|
+
def build_executed(context)
|
|
46
|
+
build_snapshot(context)
|
|
59
47
|
end
|
|
60
48
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
49
|
+
NANOSECONDS = 10**9
|
|
50
|
+
MILLISECONDS = 1000
|
|
51
|
+
|
|
52
|
+
def build_snapshot(context)
|
|
53
|
+
probe = context.probe
|
|
54
|
+
|
|
55
|
+
if probe.capture_snapshot? && !context.target_self
|
|
56
|
+
raise ArgumentError, "Asked to build snapshot with snapshot capture but target_self is nil"
|
|
57
|
+
end
|
|
58
|
+
|
|
64
59
|
# TODO also verify that non-capturing probe does not pass
|
|
65
60
|
# snapshot or vars/args into this method
|
|
66
61
|
captures = if probe.capture_snapshot?
|
|
67
62
|
if probe.method?
|
|
63
|
+
return_arguments = {
|
|
64
|
+
"@return": serializer.serialize_value(context.return_value,
|
|
65
|
+
depth: probe.max_capture_depth || settings.dynamic_instrumentation.max_capture_depth,
|
|
66
|
+
attribute_count: probe.max_capture_attribute_count || settings.dynamic_instrumentation.max_capture_attribute_count),
|
|
67
|
+
self: serializer.serialize_value(context.target_self),
|
|
68
|
+
}
|
|
68
69
|
{
|
|
69
70
|
entry: {
|
|
70
|
-
|
|
71
|
-
arguments: if serialized_entry_args
|
|
72
|
-
serialized_entry_args
|
|
73
|
-
else
|
|
74
|
-
(args || kwargs) && serializer.serialize_args(args, kwargs,
|
|
75
|
-
depth: probe.max_capture_depth || settings.dynamic_instrumentation.max_capture_depth,
|
|
76
|
-
attribute_count: probe.max_capture_attribute_count || settings.dynamic_instrumentation.max_capture_attribute_count)
|
|
77
|
-
end,
|
|
78
|
-
throwable: nil,
|
|
79
|
-
# standard:enable all
|
|
71
|
+
arguments: context.serialized_entry_args,
|
|
80
72
|
},
|
|
81
73
|
return: {
|
|
82
|
-
arguments:
|
|
83
|
-
"@return": serializer.serialize_value(rv,
|
|
84
|
-
depth: probe.max_capture_depth || settings.dynamic_instrumentation.max_capture_depth,
|
|
85
|
-
attribute_count: probe.max_capture_attribute_count || settings.dynamic_instrumentation.max_capture_attribute_count),
|
|
86
|
-
},
|
|
74
|
+
arguments: return_arguments,
|
|
87
75
|
throwable: nil,
|
|
88
76
|
},
|
|
89
77
|
}
|
|
90
78
|
elsif probe.line?
|
|
91
79
|
{
|
|
92
|
-
lines:
|
|
93
|
-
probe.line_no => {
|
|
94
|
-
|
|
95
|
-
|
|
80
|
+
lines: (locals = context.serialized_locals) && {
|
|
81
|
+
probe.line_no => {
|
|
82
|
+
locals: locals,
|
|
83
|
+
arguments: {self: serializer.serialize_value(context.target_self)},
|
|
84
|
+
},
|
|
96
85
|
},
|
|
97
86
|
}
|
|
98
87
|
end
|
|
@@ -100,7 +89,7 @@ module Datadog
|
|
|
100
89
|
|
|
101
90
|
location = if probe.line?
|
|
102
91
|
{
|
|
103
|
-
file: path,
|
|
92
|
+
file: context.path,
|
|
104
93
|
lines: [probe.line_no],
|
|
105
94
|
}
|
|
106
95
|
elsif probe.method?
|
|
@@ -110,17 +99,23 @@ module Datadog
|
|
|
110
99
|
}
|
|
111
100
|
end
|
|
112
101
|
|
|
113
|
-
stack = if caller_locations
|
|
102
|
+
stack = if caller_locations = context.caller_locations
|
|
114
103
|
format_caller_locations(caller_locations)
|
|
115
104
|
end
|
|
116
105
|
|
|
117
106
|
timestamp = timestamp_now
|
|
107
|
+
message = nil
|
|
108
|
+
evaluation_errors = []
|
|
109
|
+
if segments = probe.template_segments
|
|
110
|
+
message, evaluation_errors = evaluate_template(segments, context)
|
|
111
|
+
end
|
|
112
|
+
duration = context.duration
|
|
118
113
|
{
|
|
119
114
|
service: settings.service,
|
|
120
115
|
"debugger.snapshot": {
|
|
121
116
|
id: SecureRandom.uuid,
|
|
122
117
|
timestamp: timestamp,
|
|
123
|
-
evaluationErrors:
|
|
118
|
+
evaluationErrors: evaluation_errors,
|
|
124
119
|
probe: {
|
|
125
120
|
id: probe.id,
|
|
126
121
|
version: 0,
|
|
@@ -133,7 +128,7 @@ module Datadog
|
|
|
133
128
|
},
|
|
134
129
|
# In python tracer duration is under debugger.snapshot,
|
|
135
130
|
# but UI appears to expect it here at top level.
|
|
136
|
-
duration: duration ? (duration *
|
|
131
|
+
duration: duration ? (duration * NANOSECONDS).to_i : 0,
|
|
137
132
|
host: nil,
|
|
138
133
|
logger: {
|
|
139
134
|
name: probe.file,
|
|
@@ -150,8 +145,7 @@ module Datadog
|
|
|
150
145
|
"dd.trace_id": active_trace&.id&.to_s,
|
|
151
146
|
"dd.span_id": active_span&.id&.to_s,
|
|
152
147
|
ddsource: 'dd_debugger',
|
|
153
|
-
message:
|
|
154
|
-
duration: duration ? duration * 1000 : 0),
|
|
148
|
+
message: message,
|
|
155
149
|
timestamp: timestamp,
|
|
156
150
|
}
|
|
157
151
|
end
|
|
@@ -182,31 +176,29 @@ module Datadog
|
|
|
182
176
|
end
|
|
183
177
|
end
|
|
184
178
|
|
|
185
|
-
def evaluate_template(
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
179
|
+
def evaluate_template(template_segments, context)
|
|
180
|
+
evaluation_errors = []
|
|
181
|
+
message = template_segments.map do |segment|
|
|
182
|
+
case segment
|
|
183
|
+
when String
|
|
184
|
+
segment
|
|
185
|
+
when EL::Expression
|
|
186
|
+
serializer.serialize_value_for_message(segment.evaluate(context))
|
|
187
|
+
else
|
|
188
|
+
raise ArgumentError, "Invalid template segment type: #{segment}"
|
|
189
|
+
end
|
|
190
|
+
rescue => exc
|
|
191
|
+
evaluation_errors << {
|
|
192
|
+
message: "#{exc.class}: #{exc}",
|
|
193
|
+
expr: segment.dsl_expr,
|
|
194
|
+
}
|
|
195
|
+
'[evaluation error]'
|
|
196
|
+
end.join
|
|
197
|
+
[message, evaluation_errors]
|
|
191
198
|
end
|
|
192
199
|
|
|
193
200
|
def timestamp_now
|
|
194
|
-
(Time.now.to_f *
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
def get_local_variables(trace_point)
|
|
198
|
-
# binding appears to be constructed on access, therefore
|
|
199
|
-
# 1) we should attempt to cache it and
|
|
200
|
-
# 2) we should not call +binding+ until we actually need variable values.
|
|
201
|
-
binding = trace_point.binding
|
|
202
|
-
|
|
203
|
-
# steep hack - should never happen
|
|
204
|
-
return {} unless binding
|
|
205
|
-
|
|
206
|
-
binding.local_variables.each_with_object({}) do |name, map|
|
|
207
|
-
value = binding.local_variable_get(name)
|
|
208
|
-
map[name] = value
|
|
209
|
-
end
|
|
201
|
+
(Core::Utils::Time.now.to_f * MILLISECONDS).to_i
|
|
210
202
|
end
|
|
211
203
|
|
|
212
204
|
def active_trace
|
|
@@ -223,3 +215,5 @@ module Datadog
|
|
|
223
215
|
end
|
|
224
216
|
end
|
|
225
217
|
end
|
|
218
|
+
|
|
219
|
+
# rubocop:enable Lint/AssignmentInCondition
|
|
@@ -171,7 +171,7 @@ module Datadog
|
|
|
171
171
|
attr_reader :last_sent
|
|
172
172
|
|
|
173
173
|
def status_transport
|
|
174
|
-
@status_transport ||= DI::Transport::HTTP.diagnostics(agent_settings: agent_settings)
|
|
174
|
+
@status_transport ||= DI::Transport::HTTP.diagnostics(agent_settings: agent_settings, logger: logger)
|
|
175
175
|
end
|
|
176
176
|
|
|
177
177
|
def do_send_status(batch)
|
|
@@ -179,11 +179,19 @@ module Datadog
|
|
|
179
179
|
end
|
|
180
180
|
|
|
181
181
|
def snapshot_transport
|
|
182
|
-
@snapshot_transport ||= DI::Transport::HTTP.input(agent_settings: agent_settings)
|
|
182
|
+
@snapshot_transport ||= DI::Transport::HTTP.input(agent_settings: agent_settings, logger: logger)
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
def do_send_snapshot(batch)
|
|
186
|
-
snapshot_transport.send_input(batch)
|
|
186
|
+
snapshot_transport.send_input(batch, tags)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def tags
|
|
190
|
+
# DEV: The tags could be cached but they need to be recreated
|
|
191
|
+
# when process forks (since the child receives new runtime IDs).
|
|
192
|
+
Core::TagBuilder.tags(settings).merge(
|
|
193
|
+
'debugger_version' => Core::Environment::Identity.gem_datadog_version,
|
|
194
|
+
)
|
|
187
195
|
end
|
|
188
196
|
|
|
189
197
|
[
|
|
@@ -227,20 +235,6 @@ module Datadog
|
|
|
227
235
|
start
|
|
228
236
|
end
|
|
229
237
|
|
|
230
|
-
# Determine how much longer the worker thread should sleep
|
|
231
|
-
# so as not to send in less than min send interval since the last send.
|
|
232
|
-
# Important: this method must be called when @lock is held.
|
|
233
|
-
#
|
|
234
|
-
# Returns the time remaining to sleep.
|
|
235
|
-
def set_sleep_remaining
|
|
236
|
-
now = Core::Utils::Time.get_time
|
|
237
|
-
@sleep_remaining = if last_sent
|
|
238
|
-
[last_sent + min_send_interval - now, 0].max
|
|
239
|
-
else
|
|
240
|
-
0
|
|
241
|
-
end
|
|
242
|
-
end
|
|
243
|
-
|
|
244
238
|
public "add_#{event_type}"
|
|
245
239
|
|
|
246
240
|
# Sends pending probe statuses or snapshots.
|
|
@@ -288,6 +282,20 @@ module Datadog
|
|
|
288
282
|
end
|
|
289
283
|
end
|
|
290
284
|
|
|
285
|
+
# Determine how much longer the worker thread should sleep
|
|
286
|
+
# so as not to send in less than min send interval since the last send.
|
|
287
|
+
# Important: this method must be called when @lock is held.
|
|
288
|
+
#
|
|
289
|
+
# Returns the time remaining to sleep.
|
|
290
|
+
def set_sleep_remaining
|
|
291
|
+
now = Core::Utils::Time.get_time
|
|
292
|
+
@sleep_remaining = if last_sent
|
|
293
|
+
[last_sent + min_send_interval - now, 0].max
|
|
294
|
+
else
|
|
295
|
+
0
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
291
299
|
def maybe_send
|
|
292
300
|
rv = maybe_send_status
|
|
293
301
|
maybe_send_snapshot || rv
|
data/lib/datadog/di/remote.rb
CHANGED
|
@@ -18,6 +18,8 @@ module Datadog
|
|
|
18
18
|
PRODUCT = 'LIVE_DEBUGGING'
|
|
19
19
|
|
|
20
20
|
def products
|
|
21
|
+
# TODO: do not send our product on unsupported runtimes
|
|
22
|
+
# (Ruby 2.5 / JRuby)
|
|
21
23
|
[PRODUCT]
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -41,6 +43,8 @@ module Datadog
|
|
|
41
43
|
if component
|
|
42
44
|
|
|
43
45
|
probe_manager = component.probe_manager
|
|
46
|
+
probe_notification_builder = component.probe_notification_builder
|
|
47
|
+
probe_notifier_worker = component.probe_notifier_worker
|
|
44
48
|
|
|
45
49
|
current_probe_ids = {}
|
|
46
50
|
repository.contents.each do |content|
|
|
@@ -48,11 +52,7 @@ module Datadog
|
|
|
48
52
|
when PRODUCT
|
|
49
53
|
begin
|
|
50
54
|
probe_spec = parse_content(content)
|
|
51
|
-
probe =
|
|
52
|
-
probe_notification_builder = component.probe_notification_builder
|
|
53
|
-
payload = probe_notification_builder.build_received(probe)
|
|
54
|
-
probe_notifier_worker = component.probe_notifier_worker
|
|
55
|
-
probe_notifier_worker.add_status(payload)
|
|
55
|
+
probe = component.parse_probe_spec_and_notify(probe_spec)
|
|
56
56
|
component.logger.debug { "di: received #{probe.type} probe at #{probe.location} (#{probe.id}) via RC" }
|
|
57
57
|
|
|
58
58
|
begin
|
|
@@ -36,6 +36,10 @@ module Datadog
|
|
|
36
36
|
# efficient but there would be additional overhead from passing this
|
|
37
37
|
# parameter all the time and the API would get more complex.
|
|
38
38
|
#
|
|
39
|
+
# Note: "self" cannot be used as a parameter name in Ruby, therefore
|
|
40
|
+
# there should never be a conflict between instance variable
|
|
41
|
+
# serialization and method parameters.
|
|
42
|
+
#
|
|
39
43
|
# @api private
|
|
40
44
|
class Serializer
|
|
41
45
|
# Third-party library integration / custom serializers.
|
|
@@ -60,6 +64,9 @@ module Datadog
|
|
|
60
64
|
# a common base class but are all of different classes) or for Mongoid
|
|
61
65
|
# models (that do not have a common base class at all but include a
|
|
62
66
|
# standard Mongoid module).
|
|
67
|
+
#
|
|
68
|
+
# Important: these serializers are NOT used in log messages.
|
|
69
|
+
# They are only used for variables that are captured in the snapshots.
|
|
63
70
|
@@flat_registry = []
|
|
64
71
|
def self.register(condition: nil, &block)
|
|
65
72
|
@@flat_registry << {condition: condition, proc: block}
|
|
@@ -75,6 +82,18 @@ module Datadog
|
|
|
75
82
|
attr_reader :redactor
|
|
76
83
|
attr_reader :telemetry
|
|
77
84
|
|
|
85
|
+
def combine_args(args, kwargs, target_self)
|
|
86
|
+
counter = 0
|
|
87
|
+
combined = args.each_with_object({}) do |value, c|
|
|
88
|
+
counter += 1
|
|
89
|
+
# Conversion to symbol is needed here to put args ahead of
|
|
90
|
+
# kwargs when they are merged below.
|
|
91
|
+
c[:"arg#{counter}"] = value
|
|
92
|
+
end.update(kwargs)
|
|
93
|
+
combined[:self] = target_self
|
|
94
|
+
combined
|
|
95
|
+
end
|
|
96
|
+
|
|
78
97
|
# Serializes positional and keyword arguments to a method,
|
|
79
98
|
# as obtained by a method probe.
|
|
80
99
|
#
|
|
@@ -82,16 +101,14 @@ module Datadog
|
|
|
82
101
|
# between positional and keyword arguments. We convert positional
|
|
83
102
|
# arguments to keyword arguments ("arg1", "arg2", ...) and ensure
|
|
84
103
|
# the positional arguments are listed first.
|
|
85
|
-
|
|
104
|
+
#
|
|
105
|
+
# Instance variables are technically a hash just like kwargs,
|
|
106
|
+
# we take them as a separate parameter to avoid a hash merge
|
|
107
|
+
# in upstream code.
|
|
108
|
+
def serialize_args(args, kwargs, target_self,
|
|
86
109
|
depth: settings.dynamic_instrumentation.max_capture_depth,
|
|
87
110
|
attribute_count: settings.dynamic_instrumentation.max_capture_attribute_count)
|
|
88
|
-
|
|
89
|
-
combined = args.each_with_object({}) do |value, c|
|
|
90
|
-
counter += 1
|
|
91
|
-
# Conversion to symbol is needed here to put args ahead of
|
|
92
|
-
# kwargs when they are merged below.
|
|
93
|
-
c[:"arg#{counter}"] = value
|
|
94
|
-
end.update(kwargs)
|
|
111
|
+
combined = combine_args(args, kwargs, target_self)
|
|
95
112
|
serialize_vars(combined, depth: depth, attribute_count: attribute_count)
|
|
96
113
|
end
|
|
97
114
|
|
|
@@ -142,6 +159,8 @@ module Datadog
|
|
|
142
159
|
end
|
|
143
160
|
|
|
144
161
|
serialized = {type: class_name(cls)}
|
|
162
|
+
# https://github.com/soutaro/steep/issues/1860
|
|
163
|
+
# @type var serialized: untyped
|
|
145
164
|
case value
|
|
146
165
|
when NilClass
|
|
147
166
|
serialized.update(isNull: true)
|
|
@@ -253,8 +272,120 @@ module Datadog
|
|
|
253
272
|
end
|
|
254
273
|
end
|
|
255
274
|
|
|
275
|
+
# This method is used for serializing arbitrary values into log messages.
|
|
276
|
+
# Because the output is meant to be human-readable, we cannot use
|
|
277
|
+
# the "normal" serialization format which is meant to be machine-readable.
|
|
278
|
+
# Serialize objects with depth of 1 and include the class name.
|
|
279
|
+
#
|
|
280
|
+
# Note that this method does not (currently) utilize the custom
|
|
281
|
+
# serializers that the "normal" serialization logic uses.
|
|
282
|
+
#
|
|
283
|
+
# This serializer differs from the RFC in two ways:
|
|
284
|
+
# 1. We omit the middle of long strings rather than the end,
|
|
285
|
+
# and also the inner entries in arrays/hashes/objects.
|
|
286
|
+
# 2. We use Ruby-ish syntax for hashes and objects.
|
|
287
|
+
#
|
|
288
|
+
# We also use the Ruby-like syntax for symbols, which don't exist
|
|
289
|
+
# in other languages.
|
|
290
|
+
def serialize_value_for_message(value, depth = 1)
|
|
291
|
+
# This method is more verbose than "normal" Ruby code to avoid
|
|
292
|
+
# array allocations.
|
|
293
|
+
case value
|
|
294
|
+
when NilClass
|
|
295
|
+
'nil'
|
|
296
|
+
when Integer, Float, TrueClass, FalseClass, Time, Date
|
|
297
|
+
value.to_s
|
|
298
|
+
when String
|
|
299
|
+
serialize_string_or_symbol_for_message(value)
|
|
300
|
+
when Symbol
|
|
301
|
+
':' + serialize_string_or_symbol_for_message(value)
|
|
302
|
+
when Array
|
|
303
|
+
return '...' if depth <= 0
|
|
304
|
+
|
|
305
|
+
max = max_capture_collection_size_for_message
|
|
306
|
+
if value.length > max
|
|
307
|
+
value_ = value[0...max - 1] || []
|
|
308
|
+
value_ << '...'
|
|
309
|
+
value_ << value[-1]
|
|
310
|
+
value = value_
|
|
311
|
+
end
|
|
312
|
+
'[' + value.map do |item|
|
|
313
|
+
serialize_value_for_message(item, depth - 1)
|
|
314
|
+
end.join(', ') + ']'
|
|
315
|
+
when Hash
|
|
316
|
+
return '...' if depth <= 0
|
|
317
|
+
|
|
318
|
+
max = max_capture_collection_size_for_message
|
|
319
|
+
keys = value.keys
|
|
320
|
+
truncated = false
|
|
321
|
+
if value.length > max
|
|
322
|
+
keys_ = keys[0...max - 1] || []
|
|
323
|
+
keys_ << keys[-1]
|
|
324
|
+
keys = keys_
|
|
325
|
+
truncated = true
|
|
326
|
+
end
|
|
327
|
+
serialized = keys.map do |key|
|
|
328
|
+
"#{serialize_value_for_message(key, depth - 1)} => #{serialize_value_for_message(value[key], depth - 1)}"
|
|
329
|
+
end
|
|
330
|
+
if truncated
|
|
331
|
+
serialized[serialized.length] = serialized[serialized.length - 1]
|
|
332
|
+
serialized[serialized.length - 2] = '...'
|
|
333
|
+
end
|
|
334
|
+
"{#{serialized.join(", ")}}"
|
|
335
|
+
else
|
|
336
|
+
return '...' if depth <= 0
|
|
337
|
+
|
|
338
|
+
vars = value.instance_variables
|
|
339
|
+
truncated = false
|
|
340
|
+
max = max_capture_attribute_count_for_message
|
|
341
|
+
if vars.length > max
|
|
342
|
+
vars_ = vars[0...max - 1] || []
|
|
343
|
+
vars_ << vars[-1]
|
|
344
|
+
truncated = true
|
|
345
|
+
vars = vars_
|
|
346
|
+
end
|
|
347
|
+
serialized = vars.map do |var|
|
|
348
|
+
# +var+ here is always the instance variable name which is a
|
|
349
|
+
# symbol, we do not need to run it through our serializer.
|
|
350
|
+
"#{var}=#{serialize_value_for_message(value.send(:instance_variable_get, var), depth - 1)}"
|
|
351
|
+
end
|
|
352
|
+
if truncated
|
|
353
|
+
serialized << serialized.last
|
|
354
|
+
serialized[-2] = '...'
|
|
355
|
+
end
|
|
356
|
+
serialized = if serialized.any?
|
|
357
|
+
' ' + serialized.join(' ')
|
|
358
|
+
end
|
|
359
|
+
"#<#{class_name(value.class)}#{serialized}>"
|
|
360
|
+
end
|
|
361
|
+
rescue => exc
|
|
362
|
+
telemetry&.report(exc, description: "Error serializing for message")
|
|
363
|
+
# TODO class_name(foo) can also fail, which we don't handle here.
|
|
364
|
+
# Telemetry reporting could potentially also fail?
|
|
365
|
+
"#<#{class_name(value.class)}: serialization error>"
|
|
366
|
+
end
|
|
367
|
+
|
|
256
368
|
private
|
|
257
369
|
|
|
370
|
+
MAX_MESSAGE_COLLECTION_SIZE = 3
|
|
371
|
+
MAX_MESSAGE_ATTRIBUTE_COUNT = 5
|
|
372
|
+
|
|
373
|
+
def max_capture_collection_size_for_message
|
|
374
|
+
max = settings.dynamic_instrumentation.max_capture_collection_size
|
|
375
|
+
if max > MAX_MESSAGE_COLLECTION_SIZE
|
|
376
|
+
max = MAX_MESSAGE_COLLECTION_SIZE
|
|
377
|
+
end
|
|
378
|
+
max
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
def max_capture_attribute_count_for_message
|
|
382
|
+
max = settings.dynamic_instrumentation.max_capture_attribute_count
|
|
383
|
+
if max > MAX_MESSAGE_ATTRIBUTE_COUNT
|
|
384
|
+
max = MAX_MESSAGE_ATTRIBUTE_COUNT
|
|
385
|
+
end
|
|
386
|
+
max
|
|
387
|
+
end
|
|
388
|
+
|
|
258
389
|
# Returns the name for the specified class object.
|
|
259
390
|
#
|
|
260
391
|
# Ruby can have nameless classes, e.g. Class.new is a class object
|
|
@@ -265,6 +396,27 @@ module Datadog
|
|
|
265
396
|
# and we don't want to invoke user code.
|
|
266
397
|
cls.name || "[Unnamed class]"
|
|
267
398
|
end
|
|
399
|
+
|
|
400
|
+
def serialize_string_or_symbol_for_message(value)
|
|
401
|
+
max = settings.dynamic_instrumentation.max_capture_string_length
|
|
402
|
+
if max > 100
|
|
403
|
+
max = 100
|
|
404
|
+
end
|
|
405
|
+
value = value.to_s
|
|
406
|
+
if (length = value.length) > max
|
|
407
|
+
if max < 5
|
|
408
|
+
value[0...max]
|
|
409
|
+
else
|
|
410
|
+
upper = length - max / 2 + 1
|
|
411
|
+
if max % 2 == 0
|
|
412
|
+
upper += 1
|
|
413
|
+
end
|
|
414
|
+
value[0...max / 2 - 1] + '...' + value[upper...length]
|
|
415
|
+
end
|
|
416
|
+
else
|
|
417
|
+
value
|
|
418
|
+
end
|
|
419
|
+
end
|
|
268
420
|
end
|
|
269
421
|
end
|
|
270
422
|
end
|
|
@@ -15,12 +15,13 @@ module Datadog
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
class Transport
|
|
18
|
-
attr_reader :client, :apis, :default_api, :current_api_id
|
|
18
|
+
attr_reader :client, :apis, :default_api, :current_api_id, :logger
|
|
19
19
|
|
|
20
|
-
def initialize(apis, default_api)
|
|
20
|
+
def initialize(apis, default_api, logger:)
|
|
21
21
|
@apis = apis
|
|
22
|
+
@logger = logger
|
|
22
23
|
|
|
23
|
-
@client = HTTP::Client.new(current_api)
|
|
24
|
+
@client = HTTP::Client.new(current_api, logger: logger)
|
|
24
25
|
end
|
|
25
26
|
|
|
26
27
|
def current_api
|
|
@@ -21,13 +21,13 @@ module Datadog
|
|
|
21
21
|
|
|
22
22
|
def defaults
|
|
23
23
|
Datadog::Core::Transport::HTTP::API::Map[
|
|
24
|
-
DIAGNOSTICS => Spec.new do |s|
|
|
24
|
+
DIAGNOSTICS => Diagnostics::API::Spec.new do |s|
|
|
25
25
|
s.diagnostics = Diagnostics::API::Endpoint.new(
|
|
26
26
|
'/debugger/v1/diagnostics',
|
|
27
27
|
Core::Encoding::JSONEncoder,
|
|
28
28
|
)
|
|
29
29
|
end,
|
|
30
|
-
INPUT => Spec.new do |s|
|
|
30
|
+
INPUT => Input::API::Spec.new do |s|
|
|
31
31
|
s.input = Input::API::Endpoint.new(
|
|
32
32
|
'/debugger/v1/input',
|
|
33
33
|
Core::Encoding::JSONEncoder,
|
|
@@ -35,16 +35,6 @@ module Datadog
|
|
|
35
35
|
end,
|
|
36
36
|
]
|
|
37
37
|
end
|
|
38
|
-
|
|
39
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
|
40
|
-
include Diagnostics::API::Instance
|
|
41
|
-
include Input::API::Instance
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
|
45
|
-
include Diagnostics::API::Spec
|
|
46
|
-
include Input::API::Spec
|
|
47
|
-
end
|
|
48
38
|
end
|
|
49
39
|
end
|
|
50
40
|
end
|
|
@@ -14,10 +14,11 @@ module Datadog
|
|
|
14
14
|
module HTTP
|
|
15
15
|
# Routes, encodes, and sends DI data to the trace agent via HTTP.
|
|
16
16
|
class Client
|
|
17
|
-
attr_reader :api
|
|
17
|
+
attr_reader :api, :logger
|
|
18
18
|
|
|
19
|
-
def initialize(api)
|
|
19
|
+
def initialize(api, logger:)
|
|
20
20
|
@api = api
|
|
21
|
+
@logger = logger
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
def send_request(request, &block)
|
|
@@ -31,7 +32,7 @@ module Datadog
|
|
|
31
32
|
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
|
32
33
|
"Location: #{Array(e.backtrace).first}"
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
logger.debug(message)
|
|
35
36
|
|
|
36
37
|
Datadog::Core::Transport::InternalErrorResponse.new(e)
|
|
37
38
|
end
|
|
@@ -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_diagnostics(env)
|
|
21
|
-
raise
|
|
23
|
+
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new('diagnostics', self) unless spec.is_a?(Diagnostics::API::Spec)
|
|
22
24
|
|
|
23
25
|
spec.send_diagnostics(env) do |request_env|
|
|
24
26
|
call(request_env)
|
|
25
27
|
end
|
|
26
28
|
end
|
|
27
|
-
|
|
28
|
-
class DiagnosticsNotSupportedError < StandardError
|
|
29
|
-
attr_reader :spec
|
|
30
|
-
|
|
31
|
-
def initialize(spec)
|
|
32
|
-
super
|
|
33
|
-
|
|
34
|
-
@spec = spec
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def message
|
|
38
|
-
'Diagnostics 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 :diagnostics
|
|
45
33
|
|
|
46
34
|
def send_diagnostics(env, &block)
|
|
47
|
-
raise
|
|
35
|
+
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('diagnostics', self) if diagnostics.nil?
|
|
48
36
|
|
|
49
37
|
diagnostics.call(env, &block)
|
|
50
38
|
end
|
|
51
|
-
|
|
52
|
-
class NoDiagnosticsEndpointDefinedError < StandardError
|
|
53
|
-
attr_reader :spec
|
|
54
|
-
|
|
55
|
-
def initialize(spec)
|
|
56
|
-
super
|
|
57
|
-
|
|
58
|
-
@spec = spec
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def message
|
|
62
|
-
'No diagnostics 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
|
attr_reader :encoder
|
|
70
43
|
|
|
@@ -79,7 +52,7 @@ module Datadog
|
|
|
79
52
|
)
|
|
80
53
|
env.form = {'event' => event_payload}
|
|
81
54
|
|
|
82
|
-
super
|
|
55
|
+
super
|
|
83
56
|
end
|
|
84
57
|
end
|
|
85
58
|
end
|