Class: Gitlab::Metrics::RackMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/metrics/rack_middleware.rb

Overview

Rack middleware for tracking Rails requests.

Constant Summary collapse

CONTROLLER_KEY =
'action_controller.instance'

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ RackMiddleware

Returns a new instance of RackMiddleware


7
8
9
# File 'lib/gitlab/metrics/rack_middleware.rb', line 7

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object

env - A Hash containing Rack environment details.


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/gitlab/metrics/rack_middleware.rb', line 12

def call(env)
  trans  = transaction_from_env(env)
  retval = nil

  begin
    retval = trans.run { @app.call(env) }

  # Even in the event of an error we want to submit any metrics we
  # might've gathered up to this point.
  ensure
    if env[CONTROLLER_KEY]
      tag_controller(trans, env)
    end

    trans.finish
  end

  retval
end

#tag_controller(trans, env) ⇒ Object


41
42
43
44
# File 'lib/gitlab/metrics/rack_middleware.rb', line 41

def tag_controller(trans, env)
  controller   = env[CONTROLLER_KEY]
  trans.action = "#{controller.class.name}##{controller.action_name}"
end

#transaction_from_env(env) ⇒ Object


32
33
34
35
36
37
38
39
# File 'lib/gitlab/metrics/rack_middleware.rb', line 32

def transaction_from_env(env)
  trans = Transaction.new

  trans.set(:request_uri, env['REQUEST_URI'])
  trans.set(:request_method, env['REQUEST_METHOD'])

  trans
end