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,60 +0,0 @@
|
|
1
|
-
# rubocop:disable Style/StderrPuts
|
2
|
-
|
3
|
-
if RUBY_ENGINE != "ruby" || Gem.win_platform?
|
4
|
-
$stderr.puts(
|
5
|
-
"WARN: Skipping build of Datadog profiling loader. See Datadog profiling native extension note for details."
|
6
|
-
)
|
7
|
-
|
8
|
-
File.write("Makefile", "all install clean: # dummy makefile that does nothing")
|
9
|
-
exit
|
10
|
-
end
|
11
|
-
|
12
|
-
require "mkmf"
|
13
|
-
|
14
|
-
# Because we can't control what compiler versions our customers use, shipping with -Werror by default is a no-go.
|
15
|
-
# But we can enable it in CI, so that we quickly spot any new warnings that just got introduced.
|
16
|
-
append_cflags "-Werror" if ENV["DATADOG_GEM_CI"] == "true"
|
17
|
-
|
18
|
-
# Older gcc releases may not default to C99 and we need to ask for this. This is also used:
|
19
|
-
# * by upstream Ruby -- search for gnu99 in the codebase
|
20
|
-
# * by msgpack, another datadog gem dependency
|
21
|
-
# (https://github.com/msgpack/msgpack-ruby/blob/18ce08f6d612fe973843c366ac9a0b74c4e50599/ext/msgpack/extconf.rb#L8)
|
22
|
-
append_cflags "-std=gnu99"
|
23
|
-
|
24
|
-
# Gets really noisy when we include the MJIT header, let's omit it (TODO: Use #pragma GCC diagnostic instead?)
|
25
|
-
append_cflags "-Wno-unused-function"
|
26
|
-
|
27
|
-
# Allow defining variables at any point in a function
|
28
|
-
append_cflags "-Wno-declaration-after-statement"
|
29
|
-
|
30
|
-
# If we forget to include a Ruby header, the function call may still appear to work, but then
|
31
|
-
# cause a segfault later. Let's ensure that never happens.
|
32
|
-
append_cflags "-Werror-implicit-function-declaration"
|
33
|
-
|
34
|
-
# Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
|
35
|
-
append_cflags "-Wunused-parameter"
|
36
|
-
|
37
|
-
# The native extension is not intended to expose any symbols/functions for other native libraries to use;
|
38
|
-
# the sole exception being `Init_datadog_profiling_loader` which needs to be visible for Ruby to call it when
|
39
|
-
# it `dlopen`s the library.
|
40
|
-
#
|
41
|
-
# By setting this compiler flag, we tell it to assume that everything is private unless explicitly stated.
|
42
|
-
# For more details see https://gcc.gnu.org/wiki/Visibility
|
43
|
-
append_cflags "-fvisibility=hidden"
|
44
|
-
|
45
|
-
# Avoid legacy C definitions
|
46
|
-
append_cflags "-Wold-style-definition"
|
47
|
-
|
48
|
-
# Enable all other compiler warnings
|
49
|
-
append_cflags "-Wall"
|
50
|
-
append_cflags "-Wextra"
|
51
|
-
|
52
|
-
# Tag the native extension library with the Ruby version and Ruby platform.
|
53
|
-
# This makes it easier for development (avoids "oops I forgot to rebuild when I switched my Ruby") and ensures that
|
54
|
-
# the wrong library is never loaded.
|
55
|
-
# When requiring, we need to use the exact same string, including the version and the platform.
|
56
|
-
EXTENSION_NAME = "datadog_profiling_loader.#{RUBY_VERSION}_#{RUBY_PLATFORM}".freeze
|
57
|
-
|
58
|
-
create_makefile(EXTENSION_NAME)
|
59
|
-
|
60
|
-
# rubocop:enable Style/StderrPuts
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
module Contrib
|
6
|
-
module Devise
|
7
|
-
# Class to extract event information from the resource
|
8
|
-
class Event
|
9
|
-
UUID_REGEX = /^\h{8}-\h{4}-\h{4}-\h{4}-\h{12}$/.freeze
|
10
|
-
|
11
|
-
SAFE_MODE = 'safe'
|
12
|
-
EXTENDED_MODE = 'extended'
|
13
|
-
|
14
|
-
attr_reader :user_id
|
15
|
-
|
16
|
-
def initialize(resource, mode)
|
17
|
-
@resource = resource
|
18
|
-
@mode = mode
|
19
|
-
@user_id = nil
|
20
|
-
@email = nil
|
21
|
-
@username = nil
|
22
|
-
|
23
|
-
extract if @resource
|
24
|
-
end
|
25
|
-
|
26
|
-
def to_h
|
27
|
-
return @event if defined?(@event)
|
28
|
-
|
29
|
-
@event = {}
|
30
|
-
@event[:email] = @email if @email
|
31
|
-
@event[:username] = @username if @username
|
32
|
-
@event
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def extract
|
38
|
-
@user_id = @resource.id
|
39
|
-
|
40
|
-
case @mode
|
41
|
-
when EXTENDED_MODE
|
42
|
-
@email = @resource.email
|
43
|
-
@username = @resource.username
|
44
|
-
when SAFE_MODE
|
45
|
-
@user_id = nil unless @user_id && @user_id.to_s =~ UUID_REGEX
|
46
|
-
else
|
47
|
-
Datadog.logger.warn(
|
48
|
-
"Invalid automated user evenst mode: `#{@mode}`. "\
|
49
|
-
'Supported modes are: `safe` and `extended`.'
|
50
|
-
)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../tracking'
|
4
|
-
require_relative '../resource'
|
5
|
-
require_relative '../event'
|
6
|
-
|
7
|
-
module Datadog
|
8
|
-
module AppSec
|
9
|
-
module Contrib
|
10
|
-
module Devise
|
11
|
-
module Patcher
|
12
|
-
# Hook in devise validate method
|
13
|
-
module AuthenticatablePatch
|
14
|
-
# rubocop:disable Metrics/MethodLength
|
15
|
-
def validate(resource, &block)
|
16
|
-
result = super
|
17
|
-
return result unless AppSec.enabled?
|
18
|
-
return result if @_datadog_skip_track_login_event
|
19
|
-
|
20
|
-
track_user_events_configuration = Datadog.configuration.appsec.track_user_events
|
21
|
-
|
22
|
-
return result unless track_user_events_configuration.enabled
|
23
|
-
|
24
|
-
automated_track_user_events_mode = track_user_events_configuration.mode
|
25
|
-
|
26
|
-
appsec_scope = Datadog::AppSec.active_scope
|
27
|
-
|
28
|
-
return result unless appsec_scope
|
29
|
-
|
30
|
-
devise_resource = resource ? Resource.new(resource) : nil
|
31
|
-
|
32
|
-
event_information = Event.new(devise_resource, automated_track_user_events_mode)
|
33
|
-
|
34
|
-
if result
|
35
|
-
if event_information.user_id
|
36
|
-
Datadog.logger.debug { 'User Login Event success' }
|
37
|
-
else
|
38
|
-
Datadog.logger.debug { 'User Login Event success, but can\'t extract user ID. Tracking empty event' }
|
39
|
-
end
|
40
|
-
|
41
|
-
Tracking.track_login_success(
|
42
|
-
appsec_scope.trace,
|
43
|
-
appsec_scope.service_entry_span,
|
44
|
-
user_id: event_information.user_id,
|
45
|
-
**event_information.to_h
|
46
|
-
)
|
47
|
-
|
48
|
-
return result
|
49
|
-
end
|
50
|
-
|
51
|
-
user_exists = nil
|
52
|
-
|
53
|
-
if resource
|
54
|
-
user_exists = true
|
55
|
-
Datadog.logger.debug { 'User Login Event failure users exists' }
|
56
|
-
else
|
57
|
-
user_exists = false
|
58
|
-
Datadog.logger.debug { 'User Login Event failure user do not exists' }
|
59
|
-
end
|
60
|
-
|
61
|
-
Tracking.track_login_failure(
|
62
|
-
appsec_scope.trace,
|
63
|
-
appsec_scope.service_entry_span,
|
64
|
-
user_id: event_information.user_id,
|
65
|
-
user_exists: user_exists,
|
66
|
-
**event_information.to_h
|
67
|
-
)
|
68
|
-
|
69
|
-
result
|
70
|
-
end
|
71
|
-
# rubocop:enable Metrics/MethodLength
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../tracking'
|
4
|
-
require_relative '../resource'
|
5
|
-
require_relative '../event'
|
6
|
-
|
7
|
-
module Datadog
|
8
|
-
module AppSec
|
9
|
-
module Contrib
|
10
|
-
module Devise
|
11
|
-
module Patcher
|
12
|
-
# Hook in devise registration controller
|
13
|
-
module RegistrationControllerPatch
|
14
|
-
def create
|
15
|
-
return super unless AppSec.enabled?
|
16
|
-
|
17
|
-
track_user_events_configuration = Datadog.configuration.appsec.track_user_events
|
18
|
-
|
19
|
-
return super unless track_user_events_configuration.enabled
|
20
|
-
|
21
|
-
automated_track_user_events_mode = track_user_events_configuration.mode
|
22
|
-
|
23
|
-
appsec_scope = Datadog::AppSec.active_scope
|
24
|
-
return super unless appsec_scope
|
25
|
-
|
26
|
-
super do |resource|
|
27
|
-
if resource.persisted?
|
28
|
-
devise_resource = Resource.new(resource)
|
29
|
-
|
30
|
-
event_information = Event.new(devise_resource, automated_track_user_events_mode)
|
31
|
-
|
32
|
-
if event_information.user_id
|
33
|
-
Datadog.logger.debug { 'User Signup Event' }
|
34
|
-
else
|
35
|
-
Datadog.logger.warn { 'User Signup Event, but can\'t extract user ID. Tracking empty event' }
|
36
|
-
end
|
37
|
-
|
38
|
-
Tracking.track_signup(
|
39
|
-
appsec_scope.trace,
|
40
|
-
appsec_scope.service_entry_span,
|
41
|
-
user_id: event_information.user_id,
|
42
|
-
**event_information.to_h
|
43
|
-
)
|
44
|
-
end
|
45
|
-
|
46
|
-
yield resource if block_given?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
module Contrib
|
6
|
-
module Devise
|
7
|
-
# Class to encpasulate extracting information from a Devise resource
|
8
|
-
# Normally a devise resource would be an Active::Record instance
|
9
|
-
class Resource
|
10
|
-
def initialize(resource)
|
11
|
-
@resource = resource
|
12
|
-
end
|
13
|
-
|
14
|
-
def id
|
15
|
-
extract(:id) || extract(:uuid)
|
16
|
-
end
|
17
|
-
|
18
|
-
def email
|
19
|
-
extract(:email)
|
20
|
-
end
|
21
|
-
|
22
|
-
def username
|
23
|
-
extract(:username)
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def extract(method)
|
29
|
-
@resource.send(method) if @resource.respond_to?(method)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../../../kit/identity'
|
4
|
-
|
5
|
-
module Datadog
|
6
|
-
module AppSec
|
7
|
-
module Contrib
|
8
|
-
module Devise
|
9
|
-
# Internal module to track user events
|
10
|
-
module Tracking
|
11
|
-
LOGIN_SUCCESS_EVENT = 'users.login.success'
|
12
|
-
LOGIN_FAILURE_EVENT = 'users.login.failure'
|
13
|
-
SIGNUP_EVENT = 'users.signup'
|
14
|
-
|
15
|
-
def self.track_login_success(trace, span, user_id:, **others)
|
16
|
-
return if trace.nil? || span.nil?
|
17
|
-
|
18
|
-
track(LOGIN_SUCCESS_EVENT, trace, span, **others)
|
19
|
-
|
20
|
-
Kit::Identity.set_user(trace, span, id: user_id.to_s, **others) if user_id
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.track_login_failure(trace, span, user_id:, user_exists:, **others)
|
24
|
-
return if trace.nil? || span.nil?
|
25
|
-
|
26
|
-
track(LOGIN_FAILURE_EVENT, trace, span, **others)
|
27
|
-
|
28
|
-
span.set_tag('appsec.events.users.login.failure.usr.id', user_id) if user_id
|
29
|
-
span.set_tag('appsec.events.users.login.failure.usr.exists', user_exists)
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.track_signup(trace, span, user_id:, **others)
|
33
|
-
return if trace.nil? || span.nil?
|
34
|
-
|
35
|
-
track(SIGNUP_EVENT, trace, span, **others)
|
36
|
-
Kit::Identity.set_user(trace, id: user_id.to_s, **others) if user_id
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.track(event, trace, span, **others)
|
40
|
-
return if trace.nil? || span.nil?
|
41
|
-
|
42
|
-
span.set_tag("appsec.events.#{event}.track", 'true')
|
43
|
-
span.set_tag("_dd.appsec.events.#{event}.auto.mode", Datadog.configuration.appsec.track_user_events.mode)
|
44
|
-
|
45
|
-
others.each do |k, v|
|
46
|
-
raise ArgumentError, 'key cannot be :track' if k.to_sym == :track
|
47
|
-
|
48
|
-
span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
|
49
|
-
end
|
50
|
-
|
51
|
-
trace.keep!
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
module Contrib
|
6
|
-
module GraphQL
|
7
|
-
module Reactive
|
8
|
-
# Dispatch data from a GraphQL resolve query to the WAF context
|
9
|
-
module Multiplex
|
10
|
-
ADDRESSES = [
|
11
|
-
'graphql.server.all_resolvers'
|
12
|
-
].freeze
|
13
|
-
private_constant :ADDRESSES
|
14
|
-
|
15
|
-
def self.publish(op, gateway_multiplex)
|
16
|
-
catch(:block) do
|
17
|
-
op.publish('graphql.server.all_resolvers', gateway_multiplex.arguments)
|
18
|
-
|
19
|
-
nil
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.subscribe(op, waf_context)
|
24
|
-
op.subscribe(*ADDRESSES) do |*values|
|
25
|
-
Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
|
26
|
-
arguments = values[0]
|
27
|
-
|
28
|
-
persistent_data = {
|
29
|
-
'graphql.server.all_resolvers' => arguments
|
30
|
-
}
|
31
|
-
|
32
|
-
waf_timeout = Datadog.configuration.appsec.waf_timeout
|
33
|
-
result = waf_context.run(persistent_data, {}, waf_timeout)
|
34
|
-
|
35
|
-
next if result.status != :match
|
36
|
-
|
37
|
-
yield result
|
38
|
-
throw(:block, true) unless result.actions.empty?
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
module Contrib
|
6
|
-
module Rack
|
7
|
-
module Reactive
|
8
|
-
# Dispatch data from a Rack request to the WAF context
|
9
|
-
module Request
|
10
|
-
ADDRESSES = [
|
11
|
-
'request.headers',
|
12
|
-
'request.uri.raw',
|
13
|
-
'request.query',
|
14
|
-
'request.cookies',
|
15
|
-
'request.client_ip',
|
16
|
-
'server.request.method'
|
17
|
-
].freeze
|
18
|
-
private_constant :ADDRESSES
|
19
|
-
|
20
|
-
def self.publish(op, gateway_request)
|
21
|
-
catch(:block) do
|
22
|
-
op.publish('request.query', gateway_request.query)
|
23
|
-
op.publish('request.headers', gateway_request.headers)
|
24
|
-
op.publish('request.uri.raw', gateway_request.fullpath)
|
25
|
-
op.publish('request.cookies', gateway_request.cookies)
|
26
|
-
op.publish('request.client_ip', gateway_request.client_ip)
|
27
|
-
op.publish('server.request.method', gateway_request.method)
|
28
|
-
|
29
|
-
nil
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.subscribe(op, waf_context)
|
34
|
-
op.subscribe(*ADDRESSES) do |*values|
|
35
|
-
Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
|
36
|
-
|
37
|
-
headers = values[0]
|
38
|
-
headers_no_cookies = headers.dup.tap { |h| h.delete('cookie') }
|
39
|
-
uri_raw = values[1]
|
40
|
-
query = values[2]
|
41
|
-
cookies = values[3]
|
42
|
-
client_ip = values[4]
|
43
|
-
request_method = values[5]
|
44
|
-
|
45
|
-
persistent_data = {
|
46
|
-
'server.request.cookies' => cookies,
|
47
|
-
'server.request.query' => query,
|
48
|
-
'server.request.uri.raw' => uri_raw,
|
49
|
-
'server.request.headers' => headers,
|
50
|
-
'server.request.headers.no_cookies' => headers_no_cookies,
|
51
|
-
'http.client_ip' => client_ip,
|
52
|
-
'server.request.method' => request_method,
|
53
|
-
}
|
54
|
-
|
55
|
-
waf_timeout = Datadog.configuration.appsec.waf_timeout
|
56
|
-
result = waf_context.run(persistent_data, {}, waf_timeout)
|
57
|
-
|
58
|
-
next if result.status != :match
|
59
|
-
|
60
|
-
yield result
|
61
|
-
throw(:block, true) unless result.actions.empty?
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
module Contrib
|
6
|
-
module Rack
|
7
|
-
module Reactive
|
8
|
-
# Dispatch data from a Rack request to the WAF context
|
9
|
-
module RequestBody
|
10
|
-
ADDRESSES = [
|
11
|
-
'request.body',
|
12
|
-
].freeze
|
13
|
-
private_constant :ADDRESSES
|
14
|
-
|
15
|
-
def self.publish(op, gateway_request)
|
16
|
-
catch(:block) do
|
17
|
-
# params have been parsed from the request body
|
18
|
-
op.publish('request.body', gateway_request.form_hash)
|
19
|
-
|
20
|
-
nil
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.subscribe(op, waf_context)
|
25
|
-
op.subscribe(*ADDRESSES) do |*values|
|
26
|
-
Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
|
27
|
-
body = values[0]
|
28
|
-
|
29
|
-
persistent_data = {
|
30
|
-
'server.request.body' => body,
|
31
|
-
}
|
32
|
-
|
33
|
-
waf_timeout = Datadog.configuration.appsec.waf_timeout
|
34
|
-
result = waf_context.run(persistent_data, {}, waf_timeout)
|
35
|
-
|
36
|
-
next if result.status != :match
|
37
|
-
|
38
|
-
yield result
|
39
|
-
throw(:block, true) unless result.actions.empty?
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
module Contrib
|
6
|
-
module Rack
|
7
|
-
module Reactive
|
8
|
-
# Dispatch data from a Rack response to the WAF context
|
9
|
-
module Response
|
10
|
-
ADDRESSES = [
|
11
|
-
'response.status',
|
12
|
-
'response.headers',
|
13
|
-
].freeze
|
14
|
-
private_constant :ADDRESSES
|
15
|
-
|
16
|
-
def self.publish(op, gateway_response)
|
17
|
-
catch(:block) do
|
18
|
-
op.publish('response.status', gateway_response.status)
|
19
|
-
op.publish('response.headers', gateway_response.headers)
|
20
|
-
|
21
|
-
nil
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.subscribe(op, waf_context)
|
26
|
-
op.subscribe(*ADDRESSES) do |*values|
|
27
|
-
Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
|
28
|
-
|
29
|
-
response_status = values[0]
|
30
|
-
response_headers = values[1]
|
31
|
-
response_headers_no_cookies = response_headers.dup.tap { |h| h.delete('set-cookie') }
|
32
|
-
|
33
|
-
persistent_data = {
|
34
|
-
'server.response.status' => response_status.to_s,
|
35
|
-
'server.response.headers' => response_headers,
|
36
|
-
'server.response.headers.no_cookies' => response_headers_no_cookies,
|
37
|
-
}
|
38
|
-
|
39
|
-
waf_timeout = Datadog.configuration.appsec.waf_timeout
|
40
|
-
result = waf_context.run(persistent_data, {}, waf_timeout)
|
41
|
-
|
42
|
-
next if result.status != :match
|
43
|
-
|
44
|
-
yield result
|
45
|
-
throw(:block, true) unless result.actions.empty?
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative '../request'
|
4
|
-
|
5
|
-
module Datadog
|
6
|
-
module AppSec
|
7
|
-
module Contrib
|
8
|
-
module Rails
|
9
|
-
module Reactive
|
10
|
-
# Dispatch data from a Rails request to the WAF context
|
11
|
-
module Action
|
12
|
-
ADDRESSES = [
|
13
|
-
'rails.request.body',
|
14
|
-
'rails.request.route_params',
|
15
|
-
].freeze
|
16
|
-
private_constant :ADDRESSES
|
17
|
-
|
18
|
-
def self.publish(op, gateway_request)
|
19
|
-
catch(:block) do
|
20
|
-
# params have been parsed from the request body
|
21
|
-
op.publish('rails.request.body', gateway_request.parsed_body)
|
22
|
-
op.publish('rails.request.route_params', gateway_request.route_params)
|
23
|
-
|
24
|
-
nil
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.subscribe(op, waf_context)
|
29
|
-
op.subscribe(*ADDRESSES) do |*values|
|
30
|
-
Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
|
31
|
-
body = values[0]
|
32
|
-
path_params = values[1]
|
33
|
-
|
34
|
-
persistent_data = {
|
35
|
-
'server.request.body' => body,
|
36
|
-
'server.request.path_params' => path_params,
|
37
|
-
}
|
38
|
-
|
39
|
-
waf_timeout = Datadog.configuration.appsec.waf_timeout
|
40
|
-
result = waf_context.run(persistent_data, {}, waf_timeout)
|
41
|
-
|
42
|
-
next if result.status != :match
|
43
|
-
|
44
|
-
yield result
|
45
|
-
throw(:block, true) unless result.actions.empty?
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Datadog
|
4
|
-
module AppSec
|
5
|
-
module Contrib
|
6
|
-
module Sinatra
|
7
|
-
module Reactive
|
8
|
-
# Dispatch data from a Sinatra request to the WAF context
|
9
|
-
module Routed
|
10
|
-
ADDRESSES = [
|
11
|
-
'sinatra.request.route_params',
|
12
|
-
].freeze
|
13
|
-
private_constant :ADDRESSES
|
14
|
-
|
15
|
-
def self.publish(op, data)
|
16
|
-
_request, route_params = data
|
17
|
-
|
18
|
-
catch(:block) do
|
19
|
-
op.publish('sinatra.request.route_params', route_params.params)
|
20
|
-
|
21
|
-
nil
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.subscribe(op, waf_context)
|
26
|
-
op.subscribe(*ADDRESSES) do |*values|
|
27
|
-
Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
|
28
|
-
path_params = values[0]
|
29
|
-
|
30
|
-
persistent_data = {
|
31
|
-
'server.request.path_params' => path_params,
|
32
|
-
}
|
33
|
-
|
34
|
-
waf_timeout = Datadog.configuration.appsec.waf_timeout
|
35
|
-
result = waf_context.run(persistent_data, {}, waf_timeout)
|
36
|
-
|
37
|
-
next if result.status != :match
|
38
|
-
|
39
|
-
yield result
|
40
|
-
throw(:block, true) unless result.actions.empty?
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|