Class: Berater::Middleware::Trace

Inherits:
Object
  • Object
show all
Defined in:
lib/berater/middleware/trace.rb

Instance Method Summary collapse

Constructor Details

#initialize(tracer: nil) ⇒ Trace

Returns a new instance of Trace.



4
5
6
# File 'lib/berater/middleware/trace.rb', line 4

def initialize(tracer: nil)
  @tracer = tracer
end

Instance Method Details

#call(limiter) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/berater/middleware/trace.rb', line 8

def call(limiter, **)
  return yield unless tracer

  tracer.trace('Berater') do |span|
    begin
      lock = yield
    rescue StandardError => error
      # capture exception for reporting, then propagate
      raise
    ensure
      span.set_tag('capacity', limiter.capacity)
      span.set_tag('contention', lock.contention) if lock
      span.set_tag('key', limiter.key)
      span.set_tag('limiter', limiter.class.to_s.split(':')[-1])

      if error
        if error.is_a?(Berater::Overloaded)
          span.set_tag('overloaded', true)
        else
          span.set_tag('error', error.class.to_s.gsub('::', '_'))
        end
      end
    end
  end
end