Class: Salestation::Web::StatsdMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/salestation/web/statsd_middleware.rb

Constant Summary collapse

EXTRA_TAGS_ENV_KEY =
'salestation.statsd.tags'
DURATION_MILLISECOND_PRECISION =
3

Instance Method Summary collapse

Constructor Details

#initialize(app, statsd, metric:) ⇒ StatsdMiddleware

Returns a new instance of StatsdMiddleware.



10
11
12
13
14
# File 'lib/salestation/web/statsd_middleware.rb', line 10

def initialize(app, statsd, metric:)
  @app = app
  @statsd = statsd
  @metric = metric
end

Instance Method Details

#call(env) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/salestation/web/statsd_middleware.rb', line 16

def call(env)
  start = system_monotonic_time

  status, header, body = @app.call env

  method = env['REQUEST_METHOD']
  path =
    if route = env['sinatra.route']
      route.split(' ').last
    else
      'unknown-route'
    end

  tags = [
    "path:#{path}",
    "method:#{method}",
    "status:#{status}",
    "status_class:#{status / 100}xx"
  ] + env.fetch(EXTRA_TAGS_ENV_KEY, [])

  @statsd.timing(@metric, duration_ms(from: start), tags: tags)

  [status, header, body]
end