From 33af33d7cbf947055a2a40dc2dddf74dfb13079c Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Wed, 16 May 2018 12:53:54 +0200 Subject: Fix GPM content types for Doorkeeper Certain controllers (e.g. Doorkeeper::TokensController) don't expose the method "request_format". This commit changes Gitlab::Metrics::WebTransaction so we don't rely on this method, instead using the underlying code this method uses. Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/46412 --- lib/gitlab/metrics/web_transaction.rb | 6 +++++- spec/lib/gitlab/metrics/web_transaction_spec.rb | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/gitlab/metrics/web_transaction.rb b/lib/gitlab/metrics/web_transaction.rb index 7cf33ca9e8a..3799aaebf1c 100644 --- a/lib/gitlab/metrics/web_transaction.rb +++ b/lib/gitlab/metrics/web_transaction.rb @@ -28,7 +28,11 @@ module Gitlab controller = @env[CONTROLLER_KEY] action = "#{controller.action_name}" - suffix = controller.request_format + + # Devise exposes a method called "request_format" that does the below. + # However, this method is not available to all controllers (e.g. certain + # Doorkeeper controllers). As such we use the underlying code directly. + suffix = controller.request.format.try(:ref) if suffix && suffix != :html action += ".#{suffix}" diff --git a/spec/lib/gitlab/metrics/web_transaction_spec.rb b/spec/lib/gitlab/metrics/web_transaction_spec.rb index c07b33a039a..6eb0600f49e 100644 --- a/spec/lib/gitlab/metrics/web_transaction_spec.rb +++ b/spec/lib/gitlab/metrics/web_transaction_spec.rb @@ -180,11 +180,11 @@ describe Gitlab::Metrics::WebTransaction do end context 'when request goes to ActionController' do - let(:request_format) { :html } + let(:request) { double(:request, format: double(:format, ref: :html)) } before do klass = double(:klass, name: 'TestController') - controller = double(:controller, class: klass, action_name: 'show', request_format: request_format) + controller = double(:controller, class: klass, action_name: 'show', request: request) env['action_controller.instance'] = controller end @@ -195,7 +195,7 @@ describe Gitlab::Metrics::WebTransaction do end context 'when the response content type is not :html' do - let(:request_format) { :json } + let(:request) { double(:request, format: double(:format, ref: :json)) } it 'appends the mime type to the transaction action' do expect(transaction.labels).to eq({ controller: 'TestController', action: 'show.json' }) -- cgit v1.2.1