Adds response mime type to transaction metric action when it's not HTML
This commit is contained in:
parent
a03da79fb2
commit
a5079f68e6
3 changed files with 38 additions and 6 deletions
|
@ -11,6 +11,7 @@ v 8.12.0 (unreleased)
|
|||
- Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck)
|
||||
- Reduce number of database queries on builds tab
|
||||
- Use the default branch for displaying the project icon instead of master !5792 (Hannes Rosenögger)
|
||||
- Adds response mime type to transaction metric action when it's not HTML
|
||||
|
||||
v 8.11.2 (unreleased)
|
||||
- Show "Create Merge Request" widget for push events to fork projects on the source project
|
||||
|
|
|
@ -4,6 +4,17 @@ module Gitlab
|
|||
class RackMiddleware
|
||||
CONTROLLER_KEY = 'action_controller.instance'
|
||||
ENDPOINT_KEY = 'api.endpoint'
|
||||
CONTENT_TYPES = {
|
||||
'text/html' => :html,
|
||||
'text/plain' => :txt,
|
||||
'application/json' => :json,
|
||||
'text/js' => :js,
|
||||
'application/atom+xml' => :atom,
|
||||
'image/png' => :png,
|
||||
'image/jpeg' => :jpeg,
|
||||
'image/gif' => :gif,
|
||||
'image/svg+xml' => :svg
|
||||
}
|
||||
|
||||
def initialize(app)
|
||||
@app = app
|
||||
|
@ -46,8 +57,15 @@ module Gitlab
|
|||
end
|
||||
|
||||
def tag_controller(trans, env)
|
||||
controller = env[CONTROLLER_KEY]
|
||||
trans.action = "#{controller.class.name}##{controller.action_name}"
|
||||
controller = env[CONTROLLER_KEY]
|
||||
action = "#{controller.class.name}##{controller.action_name}"
|
||||
suffix = CONTENT_TYPES[controller.content_type]
|
||||
|
||||
if suffix && suffix != :html
|
||||
action += ".#{suffix}"
|
||||
end
|
||||
|
||||
trans.action = action
|
||||
end
|
||||
|
||||
def tag_endpoint(trans, env)
|
||||
|
|
|
@ -19,7 +19,7 @@ describe Gitlab::Metrics::RackMiddleware do
|
|||
end
|
||||
|
||||
it 'tags a transaction with the name and action of a controller' do
|
||||
klass = double(:klass, name: 'TestController')
|
||||
klass = double(:klass, name: 'TestController', content_type: 'text/html')
|
||||
controller = double(:controller, class: klass, action_name: 'show')
|
||||
|
||||
env['action_controller.instance'] = controller
|
||||
|
@ -32,7 +32,7 @@ describe Gitlab::Metrics::RackMiddleware do
|
|||
middleware.call(env)
|
||||
end
|
||||
|
||||
it 'tags a transaction with the method andpath of the route in the grape endpoint' do
|
||||
it 'tags a transaction with the method and path of the route in the grape endpoint' do
|
||||
route = double(:route, route_method: "GET", route_path: "/:version/projects/:id/archive(.:format)")
|
||||
endpoint = double(:endpoint, route: route)
|
||||
|
||||
|
@ -87,17 +87,30 @@ describe Gitlab::Metrics::RackMiddleware do
|
|||
|
||||
describe '#tag_controller' do
|
||||
let(:transaction) { middleware.transaction_from_env(env) }
|
||||
let(:content_type) { 'text/html' }
|
||||
|
||||
it 'tags a transaction with the name and action of a controller' do
|
||||
before do
|
||||
klass = double(:klass, name: 'TestController')
|
||||
controller = double(:controller, class: klass, action_name: 'show')
|
||||
controller = double(:controller, class: klass, action_name: 'show', content_type: content_type)
|
||||
|
||||
env['action_controller.instance'] = controller
|
||||
end
|
||||
|
||||
it 'tags a transaction with the name and action of a controller' do
|
||||
middleware.tag_controller(transaction, env)
|
||||
|
||||
expect(transaction.action).to eq('TestController#show')
|
||||
end
|
||||
|
||||
context 'when the response content type is not :html' do
|
||||
let(:content_type) { 'application/json' }
|
||||
|
||||
it 'appends the mime type to the transaction action' do
|
||||
middleware.tag_controller(transaction, env)
|
||||
|
||||
expect(transaction.action).to eq('TestController#show.json')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#tag_endpoint' do
|
||||
|
|
Loading…
Reference in a new issue