Commit a5079f68 authored by Paco Guzman's avatar Paco Guzman

Adds response mime type to transaction metric action when it's not HTML

parent a03da79f
...@@ -11,6 +11,7 @@ v 8.12.0 (unreleased) ...@@ -11,6 +11,7 @@ v 8.12.0 (unreleased)
- Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck) - Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck)
- Reduce number of database queries on builds tab - Reduce number of database queries on builds tab
- Use the default branch for displaying the project icon instead of master !5792 (Hannes Rosenögger) - 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) v 8.11.2 (unreleased)
- Show "Create Merge Request" widget for push events to fork projects on the source project - Show "Create Merge Request" widget for push events to fork projects on the source project
......
...@@ -4,6 +4,17 @@ module Gitlab ...@@ -4,6 +4,17 @@ module Gitlab
class RackMiddleware class RackMiddleware
CONTROLLER_KEY = 'action_controller.instance' CONTROLLER_KEY = 'action_controller.instance'
ENDPOINT_KEY = 'api.endpoint' 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) def initialize(app)
@app = app @app = app
...@@ -46,8 +57,15 @@ module Gitlab ...@@ -46,8 +57,15 @@ module Gitlab
end end
def tag_controller(trans, env) def tag_controller(trans, env)
controller = env[CONTROLLER_KEY] controller = env[CONTROLLER_KEY]
trans.action = "#{controller.class.name}##{controller.action_name}" action = "#{controller.class.name}##{controller.action_name}"
suffix = CONTENT_TYPES[controller.content_type]
if suffix && suffix != :html
action += ".#{suffix}"
end
trans.action = action
end end
def tag_endpoint(trans, env) def tag_endpoint(trans, env)
......
...@@ -19,7 +19,7 @@ describe Gitlab::Metrics::RackMiddleware do ...@@ -19,7 +19,7 @@ describe Gitlab::Metrics::RackMiddleware do
end end
it 'tags a transaction with the name and action of a controller' do 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') controller = double(:controller, class: klass, action_name: 'show')
env['action_controller.instance'] = controller env['action_controller.instance'] = controller
...@@ -32,7 +32,7 @@ describe Gitlab::Metrics::RackMiddleware do ...@@ -32,7 +32,7 @@ describe Gitlab::Metrics::RackMiddleware do
middleware.call(env) middleware.call(env)
end 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)") route = double(:route, route_method: "GET", route_path: "/:version/projects/:id/archive(.:format)")
endpoint = double(:endpoint, route: route) endpoint = double(:endpoint, route: route)
...@@ -87,17 +87,30 @@ describe Gitlab::Metrics::RackMiddleware do ...@@ -87,17 +87,30 @@ describe Gitlab::Metrics::RackMiddleware do
describe '#tag_controller' do describe '#tag_controller' do
let(:transaction) { middleware.transaction_from_env(env) } 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') 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 env['action_controller.instance'] = controller
end
it 'tags a transaction with the name and action of a controller' do
middleware.tag_controller(transaction, env) middleware.tag_controller(transaction, env)
expect(transaction.action).to eq('TestController#show') expect(transaction.action).to eq('TestController#show')
end 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 end
describe '#tag_endpoint' do describe '#tag_endpoint' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment