datadog 2.7.1 → 2.17.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 +310 -1
- data/ext/datadog_profiling_native_extension/clock_id.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +66 -56
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +16 -16
- data/ext/datadog_profiling_native_extension/collectors_stack.c +10 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +314 -145
- 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 +7 -8
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
- data/ext/datadog_profiling_native_extension/heap_recorder.c +61 -174
- data/ext/datadog_profiling_native_extension/heap_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/http_transport.c +64 -98
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +68 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +10 -1
- data/ext/datadog_profiling_native_extension/profiling.c +19 -8
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +8 -8
- data/ext/datadog_profiling_native_extension/stack_recorder.c +84 -131
- data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -2
- data/ext/datadog_profiling_native_extension/time_helpers.h +1 -1
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.c +47 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +31 -0
- data/ext/libdatadog_api/crashtracker.c +17 -15
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +122 -0
- data/ext/libdatadog_api/library_config.h +19 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +117 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +49 -0
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
- data/lib/datadog/appsec/api_security.rb +9 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +355 -157
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
- data/lib/datadog/appsec/assets/waf_rules/strict.json +62 -32
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +41 -33
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +152 -25
- data/lib/datadog/appsec/context.rb +74 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +92 -0
- data/lib/datadog/appsec/contrib/active_record/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +101 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +52 -0
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +33 -25
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +3 -3
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
- data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
- data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
- data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +17 -30
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +78 -98
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +10 -11
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -68
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +16 -33
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +25 -38
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
- data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +38 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +31 -68
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +5 -31
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +12 -3
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/collector.rb +38 -0
- data/lib/datadog/appsec/metrics/exporter.rb +35 -0
- data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
- data/lib/datadog/appsec/metrics.rb +13 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +52 -32
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -31
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +5 -4
- data/lib/datadog/appsec/remote.rb +26 -12
- data/lib/datadog/appsec/response.rb +19 -85
- data/lib/datadog/appsec/security_engine/result.rb +67 -0
- data/lib/datadog/appsec/security_engine/runner.rb +88 -0
- data/lib/datadog/appsec/security_engine.rb +9 -0
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +23 -10
- data/lib/datadog/auto_instrument.rb +3 -0
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +42 -14
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +76 -32
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +5 -1
- data/lib/datadog/core/configuration/option.rb +79 -43
- data/lib/datadog/core/configuration/option_definition.rb +6 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +100 -41
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +43 -11
- data/lib/datadog/{tracing → core}/contrib/rails/utils.rb +1 -3
- data/lib/datadog/core/crashtracking/component.rb +4 -13
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +17 -1
- data/lib/datadog/core/environment/agent_info.rb +78 -0
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +27 -27
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery.rb +32 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client/capabilities.rb +6 -0
- data/lib/datadog/core/remote/client.rb +107 -92
- data/lib/datadog/core/remote/component.rb +18 -19
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/api.rb +13 -18
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -55
- data/lib/datadog/core/remote/transport/http/negotiation.rb +8 -51
- data/lib/datadog/core/remote/transport/http.rb +25 -94
- data/lib/datadog/core/remote/transport/negotiation.rb +17 -4
- data/lib/datadog/core/remote/worker.rb +10 -7
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/telemetry/component.rb +84 -49
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +17 -383
- data/lib/datadog/core/telemetry/ext.rb +1 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/logging.rb +2 -2
- data/lib/datadog/core/telemetry/metric.rb +28 -6
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +128 -25
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +18 -1
- data/lib/datadog/core/transport/http/api/spec.rb +36 -0
- data/lib/datadog/{tracing → core}/transport/http/builder.rb +53 -31
- data/lib/datadog/core/transport/http.rb +75 -0
- data/lib/datadog/core/transport/response.rb +4 -0
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +6 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/base.rb +115 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/code_tracker.rb +26 -15
- data/lib/datadog/di/component.rb +23 -14
- data/lib/datadog/di/configuration/settings.rb +25 -1
- data/lib/datadog/di/contrib/active_record.rb +1 -0
- data/lib/datadog/di/contrib/railtie.rb +15 -0
- data/lib/datadog/di/contrib.rb +28 -0
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +111 -20
- data/lib/datadog/di/logger.rb +30 -0
- data/lib/datadog/di/preload.rb +18 -0
- data/lib/datadog/di/probe.rb +14 -7
- data/lib/datadog/di/probe_builder.rb +1 -0
- data/lib/datadog/di/probe_manager.rb +11 -5
- data/lib/datadog/di/probe_notification_builder.rb +34 -8
- data/lib/datadog/di/probe_notifier_worker.rb +52 -26
- data/lib/datadog/di/redactor.rb +0 -1
- data/lib/datadog/di/remote.rb +147 -0
- data/lib/datadog/di/serializer.rb +14 -7
- data/lib/datadog/di/transport/diagnostics.rb +62 -0
- data/lib/datadog/di/transport/http/api.rb +42 -0
- data/lib/datadog/di/transport/http/client.rb +47 -0
- data/lib/datadog/di/transport/http/diagnostics.rb +65 -0
- data/lib/datadog/di/transport/http/input.rb +67 -0
- data/lib/datadog/di/transport/http.rb +57 -0
- data/lib/datadog/di/transport/input.rb +62 -0
- data/lib/datadog/di/utils.rb +103 -0
- data/lib/datadog/di.rb +14 -76
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events.rb +15 -3
- data/lib/datadog/kit/identity.rb +9 -5
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/component.rb +60 -76
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +6 -85
- data/lib/datadog/profiling/load_native_extension.rb +1 -33
- data/lib/datadog/profiling/scheduler.rb +8 -1
- data/lib/datadog/profiling/stack_recorder.rb +4 -4
- data/lib/datadog/profiling/tag_builder.rb +1 -5
- data/lib/datadog/profiling.rb +6 -2
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +16 -12
- data/lib/datadog/tracing/configuration/ext.rb +8 -1
- data/lib/datadog/tracing/configuration/settings.rb +22 -10
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +6 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +7 -3
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +36 -1
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +14 -4
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -2
- data/lib/datadog/tracing/contrib/auto_instrument.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/extensions.rb +29 -3
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/httprb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
- data/lib/datadog/tracing/contrib/rack/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +22 -5
- data/lib/datadog/tracing/span_event.rb +124 -4
- data/lib/datadog/tracing/span_operation.rb +52 -16
- data/lib/datadog/tracing/sync_writer.rb +9 -5
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +44 -24
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +60 -12
- data/lib/datadog/tracing/transport/http/api.rb +5 -4
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -44
- data/lib/datadog/tracing/transport/http.rb +13 -70
- data/lib/datadog/tracing/transport/serializable_trace.rb +31 -7
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +47 -13
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +8 -5
- data/lib/datadog/tracing/workers.rb +5 -4
- data/lib/datadog/tracing/writer.rb +10 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -0
- metadata +143 -50
- data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
- data/ext/datadog_profiling_loader/extconf.rb +0 -60
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -57
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -77
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
- data/lib/datadog/appsec/contrib/patcher.rb +0 -12
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
- data/lib/datadog/appsec/processor/actions.rb +0 -49
- data/lib/datadog/appsec/processor/context.rb +0 -107
- data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
- data/lib/datadog/appsec/reactive/engine.rb +0 -47
- data/lib/datadog/appsec/reactive/operation.rb +0 -68
- data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
- data/lib/datadog/appsec/scope.rb +0 -58
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/crashtracking/agent_base_url.rb +0 -21
- data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
- data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
- data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
- data/lib/datadog/di/transport.rb +0 -81
- data/lib/datadog/tracing/transport/http/api/spec.rb +0 -19
@@ -1,219 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../../../configuration/agent_settings_resolver'
|
4
|
-
require_relative '../../../transport/http/adapters/registry'
|
5
|
-
require_relative '../../../transport/http/api/map'
|
6
|
-
|
7
|
-
# TODO: Decouple standard transport/http/api/instance
|
8
|
-
#
|
9
|
-
# Separate classes are needed because transport/http/trace includes
|
10
|
-
# Trace::API::Instance which closes over and uses a single spec, which is
|
11
|
-
# negotiated as either /v3 or /v4 for the whole API at the spec level, but we
|
12
|
-
# need an independent toplevel path at the endpoint level.
|
13
|
-
#
|
14
|
-
# Separate classes are needed because of `include Trace::API::Instance`.
|
15
|
-
#
|
16
|
-
# Below should be:
|
17
|
-
# require_relative '../../../../datadog/core/transport/http/api/instance'
|
18
|
-
require_relative 'api/instance'
|
19
|
-
|
20
|
-
# TODO: Decouple transport/http/client
|
21
|
-
#
|
22
|
-
# The standard one does `include Transport::HTTP::Statistics` and performs
|
23
|
-
# stats updates, which may or may not be desirable in general.
|
24
|
-
#
|
25
|
-
# Below should be:
|
26
|
-
# require_relative '../../../../datadog/core/transport/http/client'
|
27
|
-
require_relative 'client'
|
28
|
-
|
29
|
-
# TODO: Decouple transport/http/builder
|
30
|
-
#
|
31
|
-
# This class is duplicated even though it is tantalisingly close to the
|
32
|
-
# one in datadog/core/transport mostly because it refers to a different
|
33
|
-
# `API::Instance` in `#api_instance_class` but also because it operates on a
|
34
|
-
# different `HTTP::Client`, as well as de-hardcoding the transport class
|
35
|
-
# `Transport::Traces::Transport` in `#to_transport`
|
36
|
-
#
|
37
|
-
# Additionally, its design makes it so there can be only one (API, Client,
|
38
|
-
# Transport) triplet, requiring a new transport instance for any varying
|
39
|
-
# element of the triplet.
|
40
|
-
|
41
|
-
module Datadog
|
42
|
-
module Core
|
43
|
-
module Remote
|
44
|
-
module Transport
|
45
|
-
module HTTP
|
46
|
-
# Builds new instances of Transport::HTTP::Client
|
47
|
-
class Builder
|
48
|
-
REGISTRY = Datadog::Core::Transport::HTTP::Adapters::Registry.new
|
49
|
-
|
50
|
-
attr_reader \
|
51
|
-
:apis,
|
52
|
-
:api_options,
|
53
|
-
:default_adapter,
|
54
|
-
:default_api,
|
55
|
-
:default_headers
|
56
|
-
|
57
|
-
def initialize
|
58
|
-
# Global settings
|
59
|
-
@default_adapter = nil
|
60
|
-
@default_headers = {}
|
61
|
-
|
62
|
-
# Client settings
|
63
|
-
@apis = Datadog::Core::Transport::HTTP::API::Map.new
|
64
|
-
@default_api = nil
|
65
|
-
|
66
|
-
# API settings
|
67
|
-
@api_options = {}
|
68
|
-
|
69
|
-
yield(self) if block_given?
|
70
|
-
end
|
71
|
-
|
72
|
-
def adapter(config, *args, **kwargs)
|
73
|
-
@default_adapter = case config
|
74
|
-
when Core::Configuration::AgentSettingsResolver::AgentSettings
|
75
|
-
registry_klass = REGISTRY.get(config.adapter)
|
76
|
-
raise UnknownAdapterError, config.adapter if registry_klass.nil?
|
77
|
-
|
78
|
-
registry_klass.build(config)
|
79
|
-
when Symbol
|
80
|
-
registry_klass = REGISTRY.get(config)
|
81
|
-
raise UnknownAdapterError, config if registry_klass.nil?
|
82
|
-
|
83
|
-
registry_klass.new(*args, **kwargs)
|
84
|
-
else
|
85
|
-
config
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def headers(values = {})
|
90
|
-
@default_headers.merge!(values)
|
91
|
-
end
|
92
|
-
|
93
|
-
# Adds a new API to the client
|
94
|
-
# Valid options:
|
95
|
-
# - :adapter
|
96
|
-
# - :default
|
97
|
-
# - :fallback
|
98
|
-
# - :headers
|
99
|
-
def api(key, spec, options = {})
|
100
|
-
options = options.dup
|
101
|
-
|
102
|
-
# Copy spec into API map
|
103
|
-
@apis[key] = spec
|
104
|
-
|
105
|
-
# Apply as default API, if specified to do so.
|
106
|
-
@default_api = key if options.delete(:default) || @default_api.nil?
|
107
|
-
|
108
|
-
# Save all other settings for initialization
|
109
|
-
(@api_options[key] ||= {}).merge!(options)
|
110
|
-
end
|
111
|
-
|
112
|
-
def default_api=(key)
|
113
|
-
raise UnknownApiError, key unless @apis.key?(key)
|
114
|
-
|
115
|
-
@default_api = key
|
116
|
-
end
|
117
|
-
|
118
|
-
def to_transport(klass)
|
119
|
-
raise NoDefaultApiError if @default_api.nil?
|
120
|
-
|
121
|
-
klass.new(to_api_instances, @default_api)
|
122
|
-
end
|
123
|
-
|
124
|
-
def to_api_instances
|
125
|
-
raise NoApisError if @apis.empty?
|
126
|
-
|
127
|
-
@apis.inject(Datadog::Core::Transport::HTTP::API::Map.new) do |instances, (key, spec)|
|
128
|
-
instances.tap do
|
129
|
-
api_options = @api_options[key].dup
|
130
|
-
|
131
|
-
# Resolve the adapter to use for this API
|
132
|
-
adapter = api_options.delete(:adapter) || @default_adapter
|
133
|
-
raise NoAdapterForApiError, key if adapter.nil?
|
134
|
-
|
135
|
-
# Resolve fallback and merge headers
|
136
|
-
fallback = api_options.delete(:fallback)
|
137
|
-
api_options[:headers] = @default_headers.merge((api_options[:headers] || {}))
|
138
|
-
|
139
|
-
# Add API::Instance with all settings
|
140
|
-
instances[key] = api_instance_class.new(
|
141
|
-
spec,
|
142
|
-
adapter,
|
143
|
-
api_options
|
144
|
-
)
|
145
|
-
|
146
|
-
# Configure fallback, if provided.
|
147
|
-
instances.with_fallbacks(key => fallback) unless fallback.nil?
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def api_instance_class
|
153
|
-
API::Instance
|
154
|
-
end
|
155
|
-
|
156
|
-
# Raised when the API key does not match known APIs.
|
157
|
-
class UnknownApiError < StandardError
|
158
|
-
attr_reader :key
|
159
|
-
|
160
|
-
def initialize(key)
|
161
|
-
super()
|
162
|
-
|
163
|
-
@key = key
|
164
|
-
end
|
165
|
-
|
166
|
-
def message
|
167
|
-
"Unknown transport API '#{key}'!"
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
# Raised when the identifier cannot be matched to an adapter.
|
172
|
-
class UnknownAdapterError < StandardError
|
173
|
-
attr_reader :type
|
174
|
-
|
175
|
-
def initialize(type)
|
176
|
-
super()
|
177
|
-
|
178
|
-
@type = type
|
179
|
-
end
|
180
|
-
|
181
|
-
def message
|
182
|
-
"Unknown transport adapter '#{type}'!"
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
# Raised when an adapter cannot be resolved for an API instance.
|
187
|
-
class NoAdapterForApiError < StandardError
|
188
|
-
attr_reader :key
|
189
|
-
|
190
|
-
def initialize(key)
|
191
|
-
super()
|
192
|
-
|
193
|
-
@key = key
|
194
|
-
end
|
195
|
-
|
196
|
-
def message
|
197
|
-
"No adapter resolved for transport API '#{key}'!"
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
# Raised when built without defining APIs.
|
202
|
-
class NoApisError < StandardError
|
203
|
-
def message
|
204
|
-
'No APIs configured for transport!'
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
# Raised when client built without defining a default API.
|
209
|
-
class NoDefaultApiError < StandardError
|
210
|
-
def message
|
211
|
-
'No default API configured for transport!'
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module Core
|
5
|
-
module Telemetry
|
6
|
-
module Http
|
7
|
-
# Data structure for an HTTP request
|
8
|
-
class Env
|
9
|
-
attr_accessor :path, :body
|
10
|
-
|
11
|
-
attr_writer :headers
|
12
|
-
|
13
|
-
def headers
|
14
|
-
@headers ||= {}
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module Core
|
5
|
-
module Telemetry
|
6
|
-
module Http
|
7
|
-
module Ext
|
8
|
-
HEADER_DD_API_KEY = 'DD-API-KEY'
|
9
|
-
HEADER_CONTENT_TYPE = 'Content-Type'
|
10
|
-
HEADER_CONTENT_LENGTH = 'Content-Length'
|
11
|
-
HEADER_DD_TELEMETRY_API_VERSION = 'DD-Telemetry-API-Version'
|
12
|
-
HEADER_DD_TELEMETRY_REQUEST_TYPE = 'DD-Telemetry-Request-Type'
|
13
|
-
HEADER_TELEMETRY_DEBUG_ENABLED = 'DD-Telemetry-Debug-Enabled'
|
14
|
-
HEADER_CLIENT_LIBRARY_LANGUAGE = 'DD-Client-Library-Language'
|
15
|
-
HEADER_CLIENT_LIBRARY_VERSION = 'DD-Client-Library-Version'
|
16
|
-
|
17
|
-
CONTENT_TYPE_APPLICATION_JSON = 'application/json'
|
18
|
-
API_VERSION = 'v2'
|
19
|
-
|
20
|
-
AGENTLESS_HOST_PREFIX = 'instrumentation-telemetry-intake'
|
21
|
-
|
22
|
-
AGENT_ENDPOINT = '/telemetry/proxy/api/v2/apmtelemetry'
|
23
|
-
AGENTLESS_ENDPOINT = '/api/v2/apmtelemetry'
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module Core
|
5
|
-
module Telemetry
|
6
|
-
module Http
|
7
|
-
# Module for base HTTP response
|
8
|
-
module Response
|
9
|
-
def payload
|
10
|
-
nil
|
11
|
-
end
|
12
|
-
|
13
|
-
def ok?
|
14
|
-
nil
|
15
|
-
end
|
16
|
-
|
17
|
-
def unsupported?
|
18
|
-
nil
|
19
|
-
end
|
20
|
-
|
21
|
-
def not_found?
|
22
|
-
nil
|
23
|
-
end
|
24
|
-
|
25
|
-
def client_error?
|
26
|
-
nil
|
27
|
-
end
|
28
|
-
|
29
|
-
def server_error?
|
30
|
-
nil
|
31
|
-
end
|
32
|
-
|
33
|
-
def internal_error?
|
34
|
-
nil
|
35
|
-
end
|
36
|
-
|
37
|
-
def code
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
|
41
|
-
def inspect
|
42
|
-
"#{self.class} ok?:#{ok?} unsupported?:#{unsupported?}, " \
|
43
|
-
"not_found?:#{not_found?}, client_error?:#{client_error?}, " \
|
44
|
-
"server_error?:#{server_error?}, internal_error?:#{internal_error?}, " \
|
45
|
-
"payload:#{payload}"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# A generic error response for internal errors
|
50
|
-
class InternalErrorResponse
|
51
|
-
include Response
|
52
|
-
|
53
|
-
attr_reader :error
|
54
|
-
|
55
|
-
def initialize(error)
|
56
|
-
@error = error
|
57
|
-
end
|
58
|
-
|
59
|
-
def internal_error?
|
60
|
-
true
|
61
|
-
end
|
62
|
-
|
63
|
-
def inspect
|
64
|
-
"#{super}, error_type:#{error.class} error:#{error}"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../../configuration/settings'
|
4
|
-
require_relative '../../environment/ext'
|
5
|
-
require_relative '../../transport/ext'
|
6
|
-
require_relative 'env'
|
7
|
-
require_relative 'ext'
|
8
|
-
require_relative 'adapters/net'
|
9
|
-
|
10
|
-
module Datadog
|
11
|
-
module Core
|
12
|
-
module Telemetry
|
13
|
-
module Http
|
14
|
-
# Class to send telemetry data to Telemetry API
|
15
|
-
# Currently only supports the HTTP protocol.
|
16
|
-
class Transport
|
17
|
-
def self.build_agent_transport(agent_settings)
|
18
|
-
Transport.new(
|
19
|
-
host: agent_settings.hostname,
|
20
|
-
port: agent_settings.port,
|
21
|
-
path: Http::Ext::AGENT_ENDPOINT
|
22
|
-
)
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.build_agentless_transport(api_key:, dd_site:, url_override: nil)
|
26
|
-
url = url_override || "https://#{Http::Ext::AGENTLESS_HOST_PREFIX}.#{dd_site}:443"
|
27
|
-
|
28
|
-
uri = URI.parse(url)
|
29
|
-
raise "Invalid agentless mode URL: #{url}" if uri.host.nil?
|
30
|
-
|
31
|
-
Transport.new(
|
32
|
-
host: uri.host,
|
33
|
-
port: uri.port || 80,
|
34
|
-
path: Http::Ext::AGENTLESS_ENDPOINT,
|
35
|
-
ssl: uri.scheme == 'https' || uri.port == 443,
|
36
|
-
api_key: api_key
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
attr_reader \
|
41
|
-
:host,
|
42
|
-
:port,
|
43
|
-
:ssl,
|
44
|
-
:path,
|
45
|
-
:api_key
|
46
|
-
|
47
|
-
def initialize(host:, port:, path:, ssl: false, api_key: nil)
|
48
|
-
@host = host
|
49
|
-
@port = port
|
50
|
-
@ssl = ssl
|
51
|
-
@path = path
|
52
|
-
@api_key = api_key
|
53
|
-
end
|
54
|
-
|
55
|
-
def request(request_type:, payload:)
|
56
|
-
env = Http::Env.new
|
57
|
-
env.path = @path
|
58
|
-
env.body = payload
|
59
|
-
env.headers = headers(request_type: request_type)
|
60
|
-
adapter.post(env)
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
def headers(request_type:, api_version: Http::Ext::API_VERSION)
|
66
|
-
result = {
|
67
|
-
Core::Transport::Ext::HTTP::HEADER_DD_INTERNAL_UNTRACED_REQUEST => '1',
|
68
|
-
Ext::HEADER_CONTENT_TYPE => Http::Ext::CONTENT_TYPE_APPLICATION_JSON,
|
69
|
-
Ext::HEADER_DD_TELEMETRY_API_VERSION => api_version,
|
70
|
-
Ext::HEADER_DD_TELEMETRY_REQUEST_TYPE => request_type,
|
71
|
-
Ext::HEADER_CLIENT_LIBRARY_LANGUAGE => Core::Environment::Ext::LANG,
|
72
|
-
Ext::HEADER_CLIENT_LIBRARY_VERSION => Core::Environment::Identity.gem_datadog_version_semver2,
|
73
|
-
|
74
|
-
# Enable debug mode for telemetry
|
75
|
-
# HEADER_TELEMETRY_DEBUG_ENABLED => 'true',
|
76
|
-
}
|
77
|
-
|
78
|
-
result[Ext::HEADER_DD_API_KEY] = api_key unless api_key.nil?
|
79
|
-
|
80
|
-
result
|
81
|
-
end
|
82
|
-
|
83
|
-
def adapter
|
84
|
-
@adapter ||= Http::Adapters::Net.new(hostname: @host, port: @port, ssl: @ssl)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
data/lib/datadog/di/transport.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'ostruct'
|
4
|
-
require_relative 'error'
|
5
|
-
|
6
|
-
module Datadog
|
7
|
-
module DI
|
8
|
-
# Transport for sending probe statuses and snapshots to local agent.
|
9
|
-
#
|
10
|
-
# Handles encoding of the payloads into multipart posts if necessary,
|
11
|
-
# body formatting/encoding, setting correct headers, etc.
|
12
|
-
#
|
13
|
-
# The transport does not handle batching of statuses or snapshots -
|
14
|
-
# the batching should be implemented upstream of this class.
|
15
|
-
#
|
16
|
-
# Timeout settings are forwarded from agent settings to the Net adapter.
|
17
|
-
#
|
18
|
-
# The send_* methods raise Error::AgentCommunicationError on errors
|
19
|
-
# (network errors and HTTP protocol errors). It is the responsibility
|
20
|
-
# of upstream code to rescue these exceptions appropriately to prevent them
|
21
|
-
# from being propagated to the application.
|
22
|
-
#
|
23
|
-
# @api private
|
24
|
-
class Transport
|
25
|
-
DIAGNOSTICS_PATH = '/debugger/v1/diagnostics'
|
26
|
-
INPUT_PATH = '/debugger/v1/input'
|
27
|
-
|
28
|
-
def initialize(agent_settings)
|
29
|
-
# Note that this uses host, port, timeout and TLS flag from
|
30
|
-
# agent settings.
|
31
|
-
@client = Core::Transport::HTTP::Adapters::Net.new(agent_settings)
|
32
|
-
end
|
33
|
-
|
34
|
-
def send_diagnostics(payload)
|
35
|
-
event_payload = Core::Vendor::Multipart::Post::UploadIO.new(
|
36
|
-
StringIO.new(JSON.dump(payload)), 'application/json', 'event.json'
|
37
|
-
)
|
38
|
-
payload = {'event' => event_payload}
|
39
|
-
# Core transport unconditionally specifies headers to underlying
|
40
|
-
# Net::HTTP client, ends up passing 'nil' as headers if none are
|
41
|
-
# specified by us, which then causes Net::HTTP to die with an exception.
|
42
|
-
send_request('Probe status submission',
|
43
|
-
path: DIAGNOSTICS_PATH, form: payload, headers: {})
|
44
|
-
end
|
45
|
-
|
46
|
-
def send_input(payload)
|
47
|
-
send_request('Probe snapshot submission',
|
48
|
-
path: INPUT_PATH, body: payload.to_s,
|
49
|
-
headers: {'content-type' => 'application/json'},)
|
50
|
-
end
|
51
|
-
|
52
|
-
# TODO status should use either input or diagnostics endpoints
|
53
|
-
# depending on agent version.
|
54
|
-
alias_method :send_status, :send_diagnostics
|
55
|
-
|
56
|
-
alias_method :send_snapshot, :send_input
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
attr_reader :client
|
61
|
-
|
62
|
-
def send_request(desc, **options)
|
63
|
-
# steep:ignore:start
|
64
|
-
env = OpenStruct.new(**options)
|
65
|
-
# steep:ignore:end
|
66
|
-
response = client.post(env)
|
67
|
-
unless response.ok?
|
68
|
-
raise Error::AgentCommunicationError, "#{desc} failed: #{response.code}: #{response.payload}"
|
69
|
-
end
|
70
|
-
# Datadog::Core::Transport does not perform any exception mapping,
|
71
|
-
# therefore we could have any exception here from failure to parse
|
72
|
-
# agent URI for example.
|
73
|
-
# If we ever implement retries for network errors, we should distinguish
|
74
|
-
# actual network errors from non-network errors that are raised by
|
75
|
-
# transport code.
|
76
|
-
rescue => exc
|
77
|
-
raise Error::AgentCommunicationError, "#{desc} failed: #{exc.class}: #{exc}"
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module Tracing
|
5
|
-
module Transport
|
6
|
-
module HTTP
|
7
|
-
module API
|
8
|
-
# Specification for an HTTP API
|
9
|
-
# Defines behaviors without specific configuration details.
|
10
|
-
class Spec
|
11
|
-
def initialize
|
12
|
-
yield(self) if block_given?
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|