debian-mirror-gitlab/lib/gitlab/sherlock/middleware.rb

44 lines
973 B
Ruby
Raw Normal View History

2019-02-15 15:39:39 +05:30
# frozen_string_literal: true
2015-11-26 14:37:03 +05:30
module Gitlab
module Sherlock
# Rack middleware used for tracking request metrics.
class Middleware
2019-07-31 22:56:46 +05:30
CONTENT_TYPES = %r{text/html|application/json}i.freeze
2015-11-26 14:37:03 +05:30
2019-07-31 22:56:46 +05:30
IGNORE_PATHS = %r{^/sherlock}.freeze
2015-11-26 14:37:03 +05:30
def initialize(app)
@app = app
end
# env - A Hash containing Rack environment details.
def call(env)
if instrument?(env)
call_with_instrumentation(env)
else
@app.call(env)
end
end
def call_with_instrumentation(env)
trans = transaction_from_env(env)
retval = trans.run { @app.call(env) }
Sherlock.collection.add(trans)
retval
end
def instrument?(env)
!!(env['HTTP_ACCEPT'] =~ CONTENT_TYPES &&
env['REQUEST_URI'] !~ IGNORE_PATHS)
end
def transaction_from_env(env)
Transaction.new(env['REQUEST_METHOD'], env['REQUEST_URI'])
end
end
end
end