f93f8f569d
Enables frozen string for the following: * lib/gitlab/patch/**/*.rb * lib/gitlab/popen/**/*.rb * lib/gitlab/profiler/**/*.rb * lib/gitlab/project_authorizations/**/*.rb * lib/gitlab/prometheus/**/*.rb * lib/gitlab/query_limiting/**/*.rb * lib/gitlab/quick_actions/**/*.rb * lib/gitlab/redis/**/*.rb * lib/gitlab/request_profiler/**/*.rb * lib/gitlab/search/**/*.rb * lib/gitlab/sherlock/**/*.rb * lib/gitlab/sidekiq_middleware/**/*.rb * lib/gitlab/slash_commands/**/*.rb * lib/gitlab/sql/**/*.rb * lib/gitlab/template/**/*.rb * lib/gitlab/testing/**/*.rb * lib/gitlab/utils/**/*.rb * lib/gitlab/webpack/**/*.rb Partially addresses gitlab-org/gitlab-ce#47424.
43 lines
959 B
Ruby
43 lines
959 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Sherlock
|
|
# Rack middleware used for tracking request metrics.
|
|
class Middleware
|
|
CONTENT_TYPES = %r{text/html|application/json}i
|
|
|
|
IGNORE_PATHS = %r{^/sherlock}
|
|
|
|
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
|