Skip to content

Commit 090d1ac

Browse files
committed
Query Logs: namespaced_controller tag should match controller format
Currently if you do this: ```ruby config.active_record.query_log_tags = [:namespaced_controller] ``` A request that's processed by the `NameSpaced::UsersController` will log as `namespaced_controller='NameSpaced%3A%3AUsersController'`. By contrast if you set the tag to `:controller` it would log as `controller='user'`, much nicer. This PR makes the `:namespaced_controller` formatting more similar to `:controller` - it will now log as `namespaced_controller='name_spaced/users'`.
1 parent 7ebbe32 commit 090d1ac

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed

actionpack/lib/action_controller/railtie.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,15 @@ class Railtie < Rails::Railtie # :nodoc:
123123
ActiveRecord::QueryLogs.taggings.merge!(
124124
controller: ->(context) { context[:controller]&.controller_name },
125125
action: ->(context) { context[:controller]&.action_name },
126-
namespaced_controller: ->(context) { context[:controller].class.name if context[:controller] }
126+
namespaced_controller: ->(context) {
127+
if context[:controller]
128+
controller_class = context[:controller].class
129+
# based on ActionController::Metal#controller_name, but does not demodulize
130+
unless controller_class.anonymous?
131+
controller_class.name.delete_suffix("Controller").underscore
132+
end
133+
end
134+
}
127135
)
128136
end
129137
end

activerecord/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
* The `namespaced_controller` Query Log tag now matches the `controller` format
2+
3+
For example, a request processed by `NameSpaced::UsersController` will now log as:
4+
5+
```
6+
:controller # "users"
7+
:namespaced_controller # "name_spaced/users"
8+
```
9+
10+
*Alex Ghiculescu*
11+
112
* Return only unique ids from ActiveRecord::Calculations#ids
213
314
Updated ActiveRecord::Calculations#ids to only return the unique ids of the base model

railties/test/application/query_logs_test.rb

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ def dynamic_content
2727
end
2828
RUBY
2929

30+
app_file "app/controllers/name_spaced/users_controller.rb", <<-RUBY
31+
class NameSpaced::UsersController < ApplicationController
32+
def index
33+
render inline: ActiveRecord::QueryLogs.call("")
34+
end
35+
end
36+
RUBY
37+
3038
app_file "app/jobs/user_job.rb", <<-RUBY
3139
class UserJob < ActiveJob::Base
3240
def perform
@@ -42,6 +50,7 @@ def dynamic_content
4250
app_file "config/routes.rb", <<-RUBY
4351
Rails.application.routes.draw do
4452
get "/", to: "users#index"
53+
get "/namespaced/users", to: "name_spaced/users#index"
4554
end
4655
RUBY
4756
end
@@ -136,7 +145,7 @@ def app
136145
get "/"
137146
comment = last_response.body.strip
138147

139-
assert_match(/\/\*action='index',namespaced_controller='UsersController',pid='\d+'\*\//, comment)
148+
assert_match(/\/\*action='index',namespaced_controller='users',pid='\d+'\*\//, comment)
140149
end
141150

142151
test "job perform method has tagging filters enabled by default" do
@@ -202,6 +211,37 @@ def app
202211
assert_not_equal first_tags, second_tags
203212
end
204213

214+
test "controller and namespaced_controller are named correctly" do
215+
add_to_config "config.active_record.query_log_tags_enabled = true"
216+
add_to_config "config.active_record.query_log_tags = [ :action, :namespaced_controller, :controller ]"
217+
218+
boot_app
219+
220+
get "/"
221+
comment = last_response.body.strip
222+
assert_equal %(/*action='index',controller='users',namespaced_controller='users'*/), comment
223+
224+
get "/namespaced/users"
225+
comment = last_response.body.strip
226+
assert_equal %(/*action='index',controller='users',namespaced_controller='name_spaced%2Fusers'*/), comment
227+
end
228+
229+
test "controller and namespaced_controller are named correctly, legacy" do
230+
add_to_config "config.active_record.query_log_tags_enabled = true"
231+
add_to_config "config.active_record.query_log_tags = [ :action, :namespaced_controller, :controller ]"
232+
add_to_config "config.active_record.query_log_tags_format = :legacy"
233+
234+
boot_app
235+
236+
get "/"
237+
comment = last_response.body.strip
238+
assert_equal %(/*action:index,namespaced_controller:users,controller:users*/), comment
239+
240+
get "/namespaced/users"
241+
comment = last_response.body.strip
242+
assert_equal %(/*action:index,namespaced_controller:name_spaced/users,controller:users*/), comment
243+
end
244+
205245
private
206246
def boot_app(env = "production")
207247
ENV["RAILS_ENV"] = env

0 commit comments

Comments
 (0)