From 53872f806ef4207eab1b2525b98d1974fa657340 Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Thu, 6 Mar 2025 08:20:20 -0500 Subject: [PATCH] Revert "[APPSEC-56614] Add Instrumentation::Gateway#pushed? method" --- lib/datadog/appsec/instrumentation/gateway.rb | 39 +++++++++++-------- .../instrumentation/gateway/middleware.rb | 24 ------------ .../appsec/instrumentation/gateway.rbs | 15 +++++-- .../instrumentation/gateway/middleware.rbs | 15 ------- .../appsec/instrumentation/gateway_spec.rb | 17 +------- 5 files changed, 35 insertions(+), 75 deletions(-) delete mode 100644 lib/datadog/appsec/instrumentation/gateway/middleware.rb delete mode 100644 sig/datadog/appsec/instrumentation/gateway/middleware.rbs diff --git a/lib/datadog/appsec/instrumentation/gateway.rb b/lib/datadog/appsec/instrumentation/gateway.rb index 6f348c9b032..321fbf7b5f7 100644 --- a/lib/datadog/appsec/instrumentation/gateway.rb +++ b/lib/datadog/appsec/instrumentation/gateway.rb @@ -1,29 +1,35 @@ # frozen_string_literal: true -require_relative 'gateway/middleware' - module Datadog module AppSec # Instrumentation for AppSec module Instrumentation # Instrumentation gateway implementation class Gateway + # Instrumentation gateway middleware + class Middleware + attr_reader :key, :block + + def initialize(key, &block) + @key = key + @block = block + end + + def call(stack, env) + @block.call(stack, env) + end + end + + private_constant :Middleware + def initialize @middlewares = Hash.new { |h, k| h[k] = [] } - @pushed_events = {} end - # NOTE: Be careful with pushed names because every pushed event name - # is recorded in order to provide an ability to any subscriber - # to check wether an arbitrary event had happened. - # - # WARNING: If we start pushing generated names we should consider - # limiting the storage of pushed names. def push(name, env, &block) - @pushed_events[name] = true - block ||= -> {} - middlewares_for_name = @middlewares[name] + + middlewares_for_name = middlewares[name] return [block.call, nil] if middlewares_for_name.empty? @@ -42,15 +48,14 @@ def push(name, env, &block) end def watch(name, key, &block) - @middlewares[name] << Middleware.new(key, &block) unless @middlewares[name].any? { |m| m.key == key } + @middlewares[name] << Middleware.new(key, &block) unless middlewares[name].any? { |m| m.key == key } end - def pushed?(name) - @pushed_events.key?(name) - end + private + + attr_reader :middlewares end - # NOTE: This left as-is and will be depricated soon. def self.gateway @gateway ||= Gateway.new # TODO: not thread safe end diff --git a/lib/datadog/appsec/instrumentation/gateway/middleware.rb b/lib/datadog/appsec/instrumentation/gateway/middleware.rb deleted file mode 100644 index 388b3620867..00000000000 --- a/lib/datadog/appsec/instrumentation/gateway/middleware.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -module Datadog - module AppSec - module Instrumentation - class Gateway - # NOTE: This class extracted as-is and will be deprecated - # Instrumentation gateway middleware - class Middleware - attr_reader :key, :block - - def initialize(key, &block) - @key = key - @block = block - end - - def call(stack, env) - @block.call(stack, env) - end - end - end - end - end -end diff --git a/sig/datadog/appsec/instrumentation/gateway.rbs b/sig/datadog/appsec/instrumentation/gateway.rbs index cf4c45ea8fb..eee8075d1c9 100644 --- a/sig/datadog/appsec/instrumentation/gateway.rbs +++ b/sig/datadog/appsec/instrumentation/gateway.rbs @@ -7,17 +7,26 @@ module Datadog type final_call = ^() -> final_call_result type stack = ::Proc + # TODO: this should be a struct type stack_result = ::Array[nil | middleware_result | final_call_result] + class Middleware + attr_reader key: ::Symbol + attr_reader block: ::Proc + + def initialize: (::Symbol key) { (stack next, Instrumentation::Gateway::Argument env) -> stack_result } -> void + def call: (stack next, Gateway::Argument? env) -> stack_result + end + @middlewares: ::Hash[::String, ::Array[Middleware]] def initialize: () -> void - def push: (::String name, Gateway::Argument env) ?{ () -> final_call_result } -> stack_result - def watch: (::String name, ::Symbol key) { (stack next, Gateway::Argument env) -> stack_result } -> void - def pushed?: (::String name) -> bool + private + + attr_reader middlewares: ::Hash[::String, ::Array[Middleware]] end self.@gateway: Gateway diff --git a/sig/datadog/appsec/instrumentation/gateway/middleware.rbs b/sig/datadog/appsec/instrumentation/gateway/middleware.rbs deleted file mode 100644 index 89a0ea41d74..00000000000 --- a/sig/datadog/appsec/instrumentation/gateway/middleware.rbs +++ /dev/null @@ -1,15 +0,0 @@ -module Datadog - module AppSec - module Instrumentation - class Gateway - class Middleware - attr_reader key: ::Symbol - attr_reader block: ::Proc - - def initialize: (::Symbol key) { (Gateway::stack next, Gateway::Argument env) -> stack_result } -> void - def call: (Gateway::stack next, Gateway::Argument? env) -> stack_result - end - end - end - end -end diff --git a/spec/datadog/appsec/instrumentation/gateway_spec.rb b/spec/datadog/appsec/instrumentation/gateway_spec.rb index 0efa0132654..f41394b2127 100644 --- a/spec/datadog/appsec/instrumentation/gateway_spec.rb +++ b/spec/datadog/appsec/instrumentation/gateway_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Datadog::AppSec::Instrumentation::Gateway do subject(:gateway) { described_class.new } - let(:middlewares) { gateway.instance_variable_get(:@middlewares) } + let(:middlewares) { gateway.send(:middlewares) } describe '#watch' do it 'stores middleware' do @@ -81,19 +81,4 @@ expect(env_2).to eq({ a: :b, c: :d }) end end - - describe '#pushed?' do - it { expect(gateway.pushed?('event.0')).to be(false) } - - it 'returns true if event was pushed' do - expect { gateway.push('event.1', {}) }.to change { gateway.pushed?('event.1') } - .from(false).to(true) - - expect { gateway.push('event.2', {}) }.to change { gateway.pushed?('event.2') } - .from(false).to(true) - - expect { gateway.push('event.2', {}) }.not_to change { gateway.pushed?('event.2') } - .from(true) - end - end end