Sha256: 4adc7df8b736bf5a3ff0191df7d8436daeeccdf348a61fd4db058c81bcffe849
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
# typed: ignore 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 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, key, &block) @middlewares[name] << Middleware.new(key, &block) unless @middlewares[name].any? { |m| m.key == key } end end def self.gateway @gateway ||= Gateway.new # TODO: not thread safe end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ddtrace-1.9.0 | lib/datadog/appsec/instrumentation/gateway.rb |