datadog 2.18.0 → 2.20.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 +73 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +51 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.c +58 -49
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -1
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +5 -6
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +37 -26
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +0 -1
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +1 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/api_security/route_extractor.rb +7 -1
- data/lib/datadog/appsec/component.rb +3 -13
- data/lib/datadog/appsec/context.rb +23 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
- 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/request_ssrf_detection_patch.rb +0 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
- 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 +3 -18
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +17 -1
- data/lib/datadog/appsec/metrics/collector.rb +7 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/security_engine/engine.rb +14 -32
- data/lib/datadog/appsec/security_engine/result.rb +16 -0
- data/lib/datadog/appsec/security_engine/runner.rb +18 -4
- 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.rb +0 -7
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/option.rb +29 -20
- data/lib/datadog/core/configuration/option_definition.rb +2 -2
- data/lib/datadog/core/configuration/options.rb +13 -7
- data/lib/datadog/core/configuration/settings.rb +20 -0
- data/lib/datadog/core/telemetry/component.rb +8 -4
- data/lib/datadog/core/telemetry/event/app_started.rb +21 -3
- data/lib/datadog/di/boot.rb +7 -0
- data/lib/datadog/di/component.rb +7 -0
- data/lib/datadog/di/instrumenter.rb +11 -18
- 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_notification_builder.rb +21 -16
- data/lib/datadog/di/remote.rb +3 -5
- data/lib/datadog/di/serializer.rb +6 -2
- data/lib/datadog/di.rb +0 -7
- data/lib/datadog/kit/appsec/events/v2.rb +196 -0
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- 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 +14 -10
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +2 -0
- data/lib/datadog/profiling/collectors/info.rb +41 -0
- data/lib/datadog/profiling/component.rb +1 -0
- data/lib/datadog/profiling/exporter.rb +9 -3
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/tag_builder.rb +2 -0
- data/lib/datadog/profiling.rb +7 -8
- 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/configuration/dynamic.rb +4 -6
- data/lib/datadog/tracing/configuration/ext.rb +3 -2
- data/lib/datadog/tracing/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/context.rb +2 -2
- 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 +4 -4
- 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 +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +13 -7
- 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 +2 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
- 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/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/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 +2 -2
- 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 +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +3 -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 +4 -2
- 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/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
- 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/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/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
- 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 +4 -4
- 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/monitor.rb +13 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
- 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/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -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 +6 -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 +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- 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 +2 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
- 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 +3 -3
- 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/integration.rb +1 -1
- 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/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/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/diagnostics/environment_logger.rb +8 -2
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +73 -8
- data/lib/datadog/tracing/distributed/datadog.rb +4 -5
- 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 +4 -1
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- 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/tagging.rb +4 -4
- 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/rule_sampler.rb +30 -30
- 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 +1 -1
- data/lib/datadog/tracing/span_event.rb +10 -10
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +31 -11
- data/lib/datadog/tracing/trace_digest.rb +21 -23
- data/lib/datadog/tracing/trace_operation.rb +84 -88
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +36 -38
- data/lib/datadog/tracing/transport/http/client.rb +1 -1
- data/lib/datadog/tracing/transport/http/traces.rb +2 -2
- 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/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/traces.rb +5 -5
- data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +7 -0
- metadata +17 -6
@@ -8,6 +8,7 @@ require_relative 'framework'
|
|
8
8
|
require_relative 'gateway/watcher'
|
9
9
|
require_relative 'gateway/route_params'
|
10
10
|
require_relative 'gateway/request'
|
11
|
+
require_relative 'patches/json_patch'
|
11
12
|
require_relative '../../../tracing/contrib/sinatra/framework'
|
12
13
|
|
13
14
|
module Datadog
|
@@ -51,7 +52,6 @@ module Datadog
|
|
51
52
|
module DispatchPatch
|
52
53
|
def dispatch!
|
53
54
|
env = @request.env
|
54
|
-
|
55
55
|
context = env[Datadog::AppSec::Ext::CONTEXT_KEY]
|
56
56
|
|
57
57
|
return super unless context
|
@@ -59,7 +59,6 @@ module Datadog
|
|
59
59
|
# TODO: handle exceptions, except for super
|
60
60
|
|
61
61
|
gateway_request = Gateway::Request.new(env)
|
62
|
-
|
63
62
|
request_return, _gateway_request = Instrumentation.gateway.push('sinatra.request.dispatch', gateway_request) do
|
64
63
|
super
|
65
64
|
end
|
@@ -113,27 +112,18 @@ module Datadog
|
|
113
112
|
|
114
113
|
def patch
|
115
114
|
Gateway::Watcher.watch
|
116
|
-
patch_default_middlewares
|
117
|
-
patch_dispatch
|
118
|
-
patch_route
|
119
|
-
setup_security
|
120
|
-
Patcher.instance_variable_set(:@patched, true)
|
121
|
-
end
|
122
|
-
|
123
|
-
def setup_security
|
124
|
-
::Sinatra::Base.singleton_class.prepend(AppSecSetupPatch)
|
125
|
-
end
|
126
115
|
|
127
|
-
def patch_default_middlewares
|
128
116
|
::Sinatra::Base.singleton_class.prepend(DefaultMiddlewarePatch)
|
129
|
-
end
|
130
|
-
|
131
|
-
def patch_dispatch
|
132
117
|
::Sinatra::Base.prepend(DispatchPatch)
|
118
|
+
::Sinatra::Base.prepend(RoutePatch)
|
119
|
+
::Sinatra::Base.prepend(Patches::JsonPatch) if patch_json?
|
120
|
+
::Sinatra::Base.singleton_class.prepend(AppSecSetupPatch)
|
121
|
+
|
122
|
+
Patcher.instance_variable_set(:@patched, true)
|
133
123
|
end
|
134
124
|
|
135
|
-
def
|
136
|
-
::Sinatra::Base
|
125
|
+
def patch_json?
|
126
|
+
defined?(::Sinatra::JSON) && ::Sinatra::Base < ::Sinatra::JSON
|
137
127
|
end
|
138
128
|
end
|
139
129
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../utils/hash_coercion'
|
4
|
+
require_relative '../../../instrumentation/gateway/argument'
|
5
|
+
|
6
|
+
module Datadog
|
7
|
+
module AppSec
|
8
|
+
module Contrib
|
9
|
+
module Sinatra
|
10
|
+
module Patches
|
11
|
+
# A patch targeting `Sinatra::JSON#json` method to capture JSON response
|
12
|
+
# body right before it is serialized.
|
13
|
+
module JsonPatch
|
14
|
+
def json(object, options = {})
|
15
|
+
context = @request.env[Datadog::AppSec::Ext::CONTEXT_KEY]
|
16
|
+
return super unless context
|
17
|
+
|
18
|
+
data = Utils::HashCoercion.coerce(object)
|
19
|
+
return super unless data
|
20
|
+
|
21
|
+
container = Instrumentation::Gateway::DataContainer.new(data, context: context)
|
22
|
+
Instrumentation.gateway.push('sinatra.response.body.json', container)
|
23
|
+
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/datadog/appsec/event.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'json'
|
4
4
|
require_relative 'rate_limiter'
|
5
|
+
require_relative 'trace_keeper'
|
5
6
|
require_relative 'compressed_json'
|
6
7
|
|
7
8
|
module Datadog
|
@@ -40,8 +41,7 @@ module Datadog
|
|
40
41
|
|
41
42
|
class << self
|
42
43
|
def tag_and_keep!(context, waf_result)
|
43
|
-
|
44
|
-
context.trace&.keep!
|
44
|
+
TraceKeeper.keep!(context.trace)
|
45
45
|
|
46
46
|
if context.span
|
47
47
|
if waf_result.actions.key?('block_request') || waf_result.actions.key?('redirect_request')
|
@@ -50,8 +50,6 @@ module Datadog
|
|
50
50
|
|
51
51
|
context.span.set_tag('appsec.event', 'true')
|
52
52
|
end
|
53
|
-
|
54
|
-
add_distributed_tags(context.trace)
|
55
53
|
end
|
56
54
|
|
57
55
|
def record(context, request: nil, response: nil)
|
@@ -66,8 +64,7 @@ module Datadog
|
|
66
64
|
end
|
67
65
|
|
68
66
|
if event_group.any? { |event| event.attack? || event.schema? }
|
69
|
-
|
70
|
-
trace[Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER] = Tracing::Sampling::Ext::Decision::ASM
|
67
|
+
TraceKeeper.keep!(trace)
|
71
68
|
|
72
69
|
context.span['_dd.origin'] = 'appsec'
|
73
70
|
context.span.set_tags(request_tags(request)) if request
|
@@ -138,18 +135,6 @@ module Datadog
|
|
138
135
|
|
139
136
|
nil
|
140
137
|
end
|
141
|
-
|
142
|
-
# Propagate to downstream services the information that the current distributed trace is
|
143
|
-
# containing at least one ASM security event.
|
144
|
-
def add_distributed_tags(trace)
|
145
|
-
return unless trace
|
146
|
-
|
147
|
-
trace.set_tag(
|
148
|
-
Datadog::Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
149
|
-
Datadog::Tracing::Sampling::Ext::Decision::ASM
|
150
|
-
)
|
151
|
-
trace.set_distributed_source(Datadog::AppSec::Ext::PRODUCT_BIT)
|
152
|
-
end
|
153
138
|
end
|
154
139
|
end
|
155
140
|
end
|
@@ -13,7 +13,7 @@ module Datadog
|
|
13
13
|
class User < Argument
|
14
14
|
attr_reader :id, :login, :session_id
|
15
15
|
|
16
|
-
def initialize(id, login = nil, session_id = nil)
|
16
|
+
def initialize(id = nil, login = nil, session_id = nil)
|
17
17
|
super()
|
18
18
|
|
19
19
|
@id = id
|
@@ -21,6 +21,22 @@ module Datadog
|
|
21
21
|
@session_id = session_id
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
# This class is used to pass arbitrary data to the event system with an
|
26
|
+
# option to tie it to a context.
|
27
|
+
#
|
28
|
+
# NOTE: This class is a subject of elimination and will be removed when
|
29
|
+
# the event system is refactored.
|
30
|
+
class DataContainer < Argument
|
31
|
+
attr_reader :data, :context
|
32
|
+
|
33
|
+
def initialize(data, context:)
|
34
|
+
super()
|
35
|
+
|
36
|
+
@data = data
|
37
|
+
@context = context
|
38
|
+
end
|
39
|
+
end
|
24
40
|
end
|
25
41
|
end
|
26
42
|
end
|
@@ -5,19 +5,21 @@ module Datadog
|
|
5
5
|
module Metrics
|
6
6
|
# A class responsible for collecting WAF and RASP call metrics.
|
7
7
|
class Collector
|
8
|
-
Store = Struct.new(:evals, :timeouts, :duration_ns, :duration_ext_ns, keyword_init: true)
|
8
|
+
Store = Struct.new(:evals, :matches, :errors, :timeouts, :duration_ns, :duration_ext_ns, keyword_init: true)
|
9
9
|
|
10
10
|
attr_reader :waf, :rasp
|
11
11
|
|
12
12
|
def initialize
|
13
13
|
@mutex = Mutex.new
|
14
|
-
@waf = Store.new(evals: 0, timeouts: 0, duration_ns: 0, duration_ext_ns: 0)
|
15
|
-
@rasp = Store.new(evals: 0, timeouts: 0, duration_ns: 0, duration_ext_ns: 0)
|
14
|
+
@waf = Store.new(evals: 0, matches: 0, errors: 0, timeouts: 0, duration_ns: 0, duration_ext_ns: 0)
|
15
|
+
@rasp = Store.new(evals: 0, matches: 0, errors: 0, timeouts: 0, duration_ns: 0, duration_ext_ns: 0)
|
16
16
|
end
|
17
17
|
|
18
18
|
def record_waf(result)
|
19
19
|
@mutex.synchronize do
|
20
20
|
@waf.evals += 1
|
21
|
+
@waf.matches += 1 if result.match?
|
22
|
+
@waf.errors += 1 if result.error?
|
21
23
|
@waf.timeouts += 1 if result.timeout?
|
22
24
|
@waf.duration_ns += result.duration_ns
|
23
25
|
@waf.duration_ext_ns += result.duration_ext_ns
|
@@ -27,6 +29,8 @@ module Datadog
|
|
27
29
|
def record_rasp(result)
|
28
30
|
@mutex.synchronize do
|
29
31
|
@rasp.evals += 1
|
32
|
+
@waf.matches += 1 if result.match?
|
33
|
+
@waf.errors += 1 if result.error?
|
30
34
|
@rasp.timeouts += 1 if result.timeout?
|
31
35
|
@rasp.duration_ns += result.duration_ns
|
32
36
|
@rasp.duration_ext_ns += result.duration_ext_ns
|
@@ -8,7 +8,7 @@ module Datadog
|
|
8
8
|
module_function
|
9
9
|
|
10
10
|
def report_rasp(type, result)
|
11
|
-
return if result.
|
11
|
+
return if result.error?
|
12
12
|
|
13
13
|
tags = {rule_type: type, waf_version: Datadog::AppSec::WAF::VERSION::BASE_STRING}
|
14
14
|
namespace = Ext::TELEMETRY_METRICS_NAMESPACE
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module AppSec
|
5
|
+
module Metrics
|
6
|
+
# A class responsible for exporting WAF request metrics via Telemetry.
|
7
|
+
module TelemetryExporter
|
8
|
+
module_function
|
9
|
+
|
10
|
+
def export_waf_request_metrics(metrics, context)
|
11
|
+
AppSec.telemetry.inc(
|
12
|
+
Ext::TELEMETRY_METRICS_NAMESPACE, 'waf.requests', 1,
|
13
|
+
tags: {
|
14
|
+
waf_version: WAF::VERSION::BASE_STRING,
|
15
|
+
event_rules_version: context.waf_runner_ruleset_version,
|
16
|
+
rule_triggered: metrics.matches.positive?.to_s,
|
17
|
+
waf_error: metrics.errors.positive?.to_s,
|
18
|
+
waf_timeout: metrics.timeouts.positive?.to_s,
|
19
|
+
request_blocked: context.interrupted?.to_s,
|
20
|
+
block_failure: 'false',
|
21
|
+
rate_limited: (!context.trace.sampled?).to_s
|
22
|
+
}
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -20,8 +20,6 @@ module Datadog
|
|
20
20
|
exclusion_data
|
21
21
|
].freeze
|
22
22
|
|
23
|
-
attr_reader :waf_addresses, :ruleset_version
|
24
|
-
|
25
23
|
def initialize(appsec_settings:, telemetry:)
|
26
24
|
@default_ruleset = appsec_settings.ruleset
|
27
25
|
|
@@ -39,9 +37,9 @@ module Datadog
|
|
39
37
|
|
40
38
|
diagnostics = load_default_config(telemetry: telemetry)
|
41
39
|
report_configuration_diagnostics(diagnostics, action: 'init', telemetry: telemetry)
|
40
|
+
@ruleset_version = diagnostics['ruleset_version']
|
42
41
|
|
43
|
-
@
|
44
|
-
@waf_addresses = @waf_handle.known_addresses
|
42
|
+
@handle_ref = ThreadSafeRef.new(@waf_builder.build_handle)
|
45
43
|
rescue WAF::Error => e
|
46
44
|
error_message = "AppSec security engine failed to initialize"
|
47
45
|
|
@@ -51,16 +49,8 @@ module Datadog
|
|
51
49
|
raise e
|
52
50
|
end
|
53
51
|
|
54
|
-
def finalize!
|
55
|
-
@waf_handle&.finalize!
|
56
|
-
@waf_builder&.finalize!
|
57
|
-
|
58
|
-
@waf_addresses = []
|
59
|
-
@ruleset_version = nil
|
60
|
-
end
|
61
|
-
|
62
52
|
def new_runner
|
63
|
-
SecurityEngine::Runner.new(@
|
53
|
+
SecurityEngine::Runner.new(@handle_ref, ruleset_version: @ruleset_version)
|
64
54
|
end
|
65
55
|
|
66
56
|
def add_or_update_config(config, path:)
|
@@ -70,7 +60,7 @@ module Datadog
|
|
70
60
|
remove_config_at_path(DEFAULT_RULES_CONFIG_PATH) if @is_ruleset_update
|
71
61
|
|
72
62
|
diagnostics = @waf_builder.add_or_update_config(config, path: path)
|
73
|
-
@
|
63
|
+
@reconfigured_ruleset_version = diagnostics['ruleset_version'] if diagnostics.key?('ruleset_version')
|
74
64
|
report_configuration_diagnostics(diagnostics, action: 'update', telemetry: AppSec.telemetry)
|
75
65
|
|
76
66
|
# we need to load default config if diagnostics contains top-level error for rules or processors
|
@@ -79,6 +69,7 @@ module Datadog
|
|
79
69
|
diagnostics.dig('rules', 'error') ||
|
80
70
|
diagnostics.dig('processors', 'errors'))
|
81
71
|
diagnostics = load_default_config(telemetry: AppSec.telemetry)
|
72
|
+
@reconfigured_ruleset_version = diagnostics['ruleset_version']
|
82
73
|
report_configuration_diagnostics(diagnostics, action: 'update', telemetry: AppSec.telemetry)
|
83
74
|
end
|
84
75
|
|
@@ -95,6 +86,7 @@ module Datadog
|
|
95
86
|
|
96
87
|
if result && path != DEFAULT_RULES_CONFIG_PATH && path.include?('ASM_DD')
|
97
88
|
diagnostics = load_default_config(telemetry: AppSec.telemetry)
|
89
|
+
@reconfigured_ruleset_version = diagnostics['ruleset_version']
|
98
90
|
report_configuration_diagnostics(diagnostics, action: 'update', telemetry: AppSec.telemetry)
|
99
91
|
end
|
100
92
|
|
@@ -107,24 +99,17 @@ module Datadog
|
|
107
99
|
end
|
108
100
|
|
109
101
|
def reconfigure!
|
110
|
-
|
111
|
-
|
112
|
-
@waf_handle = @waf_builder.build_handle
|
113
|
-
@waf_addresses = @waf_handle.known_addresses
|
102
|
+
new_waf_handle = @waf_builder.build_handle
|
103
|
+
@ruleset_version = @reconfigured_ruleset_version
|
114
104
|
|
115
|
-
|
105
|
+
@handle_ref.current = new_waf_handle
|
116
106
|
rescue WAF::Error => e
|
117
|
-
|
107
|
+
# WAF::Error can only be raised during new WAF handle creation or when reading known addresses.
|
108
|
+
# This means that the current WAF handle was not yet substituted.
|
109
|
+
error_message = "AppSec security engine failed to reconfigure, reverting to the previous configuration"
|
118
110
|
|
119
111
|
Datadog.logger.error("#{error_message}, error #{e.inspect}")
|
120
112
|
AppSec.telemetry.report(e, description: error_message)
|
121
|
-
|
122
|
-
if old_waf_handle
|
123
|
-
Datadog.logger.warn("Reverting to the previous configuration")
|
124
|
-
|
125
|
-
@waf_handle = old_waf_handle
|
126
|
-
@waf_addresses = old_waf_handle.known_addresses
|
127
|
-
end
|
128
113
|
end
|
129
114
|
|
130
115
|
private
|
@@ -141,10 +126,7 @@ module Datadog
|
|
141
126
|
# deprecated - ip passlist should be configured via RC
|
142
127
|
config['exclusions'] ||= AppSec::Processor::RuleLoader.load_exclusions(ip_passlist: @default_ip_passlist)
|
143
128
|
|
144
|
-
|
145
|
-
@ruleset_version = diagnostics['ruleset_version']
|
146
|
-
|
147
|
-
diagnostics
|
129
|
+
@waf_builder.add_or_update_config(config, path: DEFAULT_RULES_CONFIG_PATH)
|
148
130
|
end
|
149
131
|
|
150
132
|
def report_configuration_diagnostics(diagnostics, action:, telemetry:)
|
@@ -152,7 +134,7 @@ module Datadog
|
|
152
134
|
|
153
135
|
common_tags = {
|
154
136
|
waf_version: Datadog::AppSec::WAF::VERSION::BASE_STRING,
|
155
|
-
event_rules_version: diagnostics
|
137
|
+
event_rules_version: diagnostics['ruleset_version'].to_s,
|
156
138
|
action: action
|
157
139
|
}
|
158
140
|
|
@@ -26,6 +26,10 @@ module Datadog
|
|
26
26
|
def match?
|
27
27
|
raise NotImplementedError
|
28
28
|
end
|
29
|
+
|
30
|
+
def error?
|
31
|
+
raise NotImplementedError
|
32
|
+
end
|
29
33
|
end
|
30
34
|
|
31
35
|
# A result that indicates a security rule match
|
@@ -33,6 +37,10 @@ module Datadog
|
|
33
37
|
def match?
|
34
38
|
true
|
35
39
|
end
|
40
|
+
|
41
|
+
def error?
|
42
|
+
false
|
43
|
+
end
|
36
44
|
end
|
37
45
|
|
38
46
|
# A result that indicates a successful security rules check without a match
|
@@ -40,6 +48,10 @@ module Datadog
|
|
40
48
|
def match?
|
41
49
|
false
|
42
50
|
end
|
51
|
+
|
52
|
+
def error?
|
53
|
+
false
|
54
|
+
end
|
43
55
|
end
|
44
56
|
|
45
57
|
# A result that indicates an internal security library error
|
@@ -60,6 +72,10 @@ module Datadog
|
|
60
72
|
def match?
|
61
73
|
false
|
62
74
|
end
|
75
|
+
|
76
|
+
def error?
|
77
|
+
true
|
78
|
+
end
|
63
79
|
end
|
64
80
|
end
|
65
81
|
end
|
@@ -9,9 +9,13 @@ module Datadog
|
|
9
9
|
class Runner
|
10
10
|
SUCCESSFUL_EXECUTION_CODES = [:ok, :match].freeze
|
11
11
|
|
12
|
-
|
12
|
+
attr_reader :ruleset_version
|
13
|
+
|
14
|
+
def initialize(handle_ref, ruleset_version:)
|
13
15
|
@mutex = Mutex.new
|
14
|
-
@
|
16
|
+
@handle_ref = handle_ref
|
17
|
+
@waf_handle = handle_ref.acquire
|
18
|
+
@ruleset_version = ruleset_version
|
15
19
|
|
16
20
|
@debug_tag = "libddwaf:#{WAF::VERSION::STRING} method:ddwaf_run"
|
17
21
|
end
|
@@ -54,14 +58,24 @@ module Datadog
|
|
54
58
|
@mutex.unlock
|
55
59
|
end
|
56
60
|
|
61
|
+
def waf_context
|
62
|
+
@waf_context ||= @waf_handle.build_context
|
63
|
+
end
|
64
|
+
|
65
|
+
def waf_addresses
|
66
|
+
@waf_handle.known_addresses
|
67
|
+
end
|
68
|
+
|
57
69
|
def finalize!
|
58
|
-
@waf_context
|
70
|
+
@waf_context&.finalize!
|
71
|
+
ensure
|
72
|
+
@handle_ref.release(@waf_handle)
|
59
73
|
end
|
60
74
|
|
61
75
|
private
|
62
76
|
|
63
77
|
def try_run(persistent_data, ephemeral_data, timeout)
|
64
|
-
|
78
|
+
waf_context.run(persistent_data, ephemeral_data, timeout)
|
65
79
|
rescue WAF::LibDDWAFError => e
|
66
80
|
Datadog.logger.debug { "#{@debug_tag} execution error: #{e} backtrace: #{e.backtrace&.first(3)}" }
|
67
81
|
AppSec.telemetry.report(e, description: 'libddwaf-rb internal low-level error')
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module AppSec
|
5
|
+
# This class is used for referencing an object that might be marked
|
6
|
+
# for finalization in another thread.
|
7
|
+
#
|
8
|
+
# References to the object are counted, and objects marked for finalization
|
9
|
+
# can be safely finalized when their reference count reaches zero.
|
10
|
+
class ThreadSafeRef
|
11
|
+
def initialize(initial_obj, finalizer: :finalize!)
|
12
|
+
@current = initial_obj
|
13
|
+
@finalizer = finalizer
|
14
|
+
|
15
|
+
@counters = Hash.new(0)
|
16
|
+
@outdated = []
|
17
|
+
@mutex = Mutex.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def acquire
|
21
|
+
@mutex.synchronize do
|
22
|
+
@counters[@current] += 1
|
23
|
+
|
24
|
+
@current
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def release(obj)
|
29
|
+
@mutex.synchronize do
|
30
|
+
@counters[obj] -= 1
|
31
|
+
|
32
|
+
@outdated.reject! do |outdated_obj|
|
33
|
+
next unless @counters[outdated_obj].zero?
|
34
|
+
|
35
|
+
finalize(outdated_obj)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def current=(obj)
|
41
|
+
@mutex.synchronize do
|
42
|
+
@outdated << @current
|
43
|
+
|
44
|
+
@current = obj
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def finalize(obj)
|
51
|
+
obj.public_send(@finalizer)
|
52
|
+
|
53
|
+
true
|
54
|
+
rescue => e
|
55
|
+
Datadog.logger.debug("Couldn't finalize #{obj.class.name} object, error: #{e.inspect}")
|
56
|
+
|
57
|
+
true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module AppSec
|
5
|
+
# This class is used to mark trace as manual keep and tag it as ASM product.
|
6
|
+
module TraceKeeper
|
7
|
+
def self.keep!(trace)
|
8
|
+
return unless trace
|
9
|
+
|
10
|
+
# NOTE: This action will not set correct decision maker value, so the
|
11
|
+
# trace keeping must be done with additional steps below
|
12
|
+
trace.keep!
|
13
|
+
|
14
|
+
# Propagate to downstream services the information that
|
15
|
+
# the current distributed trace is containing at least one ASM event.
|
16
|
+
trace.set_tag(
|
17
|
+
Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
18
|
+
Tracing::Sampling::Ext::Decision::ASM
|
19
|
+
)
|
20
|
+
trace.set_distributed_source(Ext::PRODUCT_BIT)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Datadog
|
4
|
+
module AppSec
|
5
|
+
module Utils
|
6
|
+
# A module for coercing arbitrary objects into hashes.
|
7
|
+
module HashCoercion
|
8
|
+
# A best effort to coerce an object to a hash with methods known to various
|
9
|
+
# frameworks with a fallback to standard library.
|
10
|
+
#
|
11
|
+
# @param object [Object] The object to coerce.
|
12
|
+
# @return [Hash, nil] The coerced `Hash` or `nil` if the object is not coercible.
|
13
|
+
def self.coerce(object)
|
14
|
+
return object.as_json if object.respond_to?(:as_json)
|
15
|
+
return object.to_hash if object.respond_to?(:to_hash)
|
16
|
+
return object.to_h if object.respond_to?(:to_h)
|
17
|
+
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/datadog/appsec.rb
CHANGED
@@ -34,13 +34,6 @@ module Datadog
|
|
34
34
|
components.appsec&.reconfigure!
|
35
35
|
end
|
36
36
|
|
37
|
-
def reconfigure_lock(&block)
|
38
|
-
appsec_component = components.appsec
|
39
|
-
return unless appsec_component
|
40
|
-
|
41
|
-
appsec_component.reconfigure_lock(&block)
|
42
|
-
end
|
43
|
-
|
44
37
|
def perform_api_security_check?
|
45
38
|
Datadog.configuration.appsec.api_security.enabled &&
|
46
39
|
Datadog.configuration.appsec.api_security.sample_rate.sample?
|