Sha256: c3b7487abeed5f849b1d2b5f52a88cb69ece3881d0405287fa87f3054b4e8709

Contents?: true

Size: 987 Bytes

Versions: 9

Compression:

Stored size: 987 Bytes

Contents

# typed: true

module Datadog
  module AppSec
    # Instrumentation for AppSec
    module Instrumentation
      # Instrumentation gateway implementation
      class Gateway
        def initialize
          @middlewares = Hash.new { |h, k| h[k] = [] }
        end

        def push(name, env, &block)
          block ||= -> {}

          middlewares = @middlewares[name]

          return [block.call, nil] if middlewares.empty?

          wrapped = lambda do |_env|
            [block.call, nil]
          end

          # TODO: handle exceptions, except for wrapped
          stack = middlewares.reverse.reduce(wrapped) do |next_, middleware|
            lambda do |env_|
              middleware.call(next_, env_)
            end
          end

          stack.call(env)
        end

        def watch(name, &block)
          @middlewares[name] << block
        end
      end

      def self.gateway
        @gateway ||= Gateway.new # TODO: not thread safe
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ddtrace-1.5.0 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.4.2 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.4.1 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.4.0 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.3.0 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.2.0 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.1.0 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.0.0 lib/datadog/appsec/instrumentation/gateway.rb
ddtrace-1.0.0.beta2 lib/datadog/appsec/instrumentation/gateway.rb