Class: GvlMetricsMiddleware::Rack

Inherits:
Object
  • Object
show all
Defined in:
lib/gvl_metrics_middleware/rack.rb

Constant Summary collapse

@@reporter =
nil

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Rack

Returns a new instance of Rack.



17
18
19
# File 'lib/gvl_metrics_middleware/rack.rb', line 17

def initialize(app)
  @app = app
end

Class Method Details

.reporterObject



10
# File 'lib/gvl_metrics_middleware/rack.rb', line 10

def reporter = @@reporter

.reporter=(reporter) ⇒ Object



12
13
14
# File 'lib/gvl_metrics_middleware/rack.rb', line 12

def reporter=(reporter)
  @@reporter = reporter
end

Instance Method Details

#call(env) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/gvl_metrics_middleware/rack.rb', line 21

def call(env)
  reporter = self.class.reporter
  return @app.call(env) if reporter.nil? || !GvlMetricsMiddleware.should_sample?

  response = nil

  gvl_times = GVLTiming.measure do
    response = @app.call(env)
  end

  begin
    reporter.call(gvl_times.duration_ns, gvl_times.running_duration_ns, gvl_times.idle_duration_ns, gvl_times.stalled_duration_ns, route: route_for(env))
  rescue => exception
    GvlMetricsMiddleware.on_report_failure&.call("Rack", exception)

    raise(exception) unless GvlMetricsMiddleware.safe_guard?
  end

  response
end