DEV: Track SQL queries from MiniSql (#28824)

`track_sql_queries` only returned queries that were executed by
ActiveRecord. All queries executed through DB.exec, DB.query and others
were not returned.
This commit is contained in:
Bianca Nenciu 2024-09-11 10:14:53 +03:00 committed by GitHub
parent 1f1709d249
commit d63ffe22f4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 6 deletions

View File

@ -99,6 +99,16 @@ class MiniSqlMultisiteConnection < MiniSql::ActiveRecordPostgres::Connection
CustomBuilder.new(self, sql) CustomBuilder.new(self, sql)
end end
def run(sql, params)
ActiveSupport::Notifications.instrument(
"sql.mini_sql",
sql: sql_fragment(sql, *params),
name: "MiniSql",
)
super
end
def sql_fragment(query, *args) def sql_fragment(query, *args)
if args.length > 0 if args.length > 0
param_encoder.encode(query, *args) param_encoder.encode(query, *args)

View File

@ -8,9 +8,13 @@ RSpec.describe PostsController do
fab!(:post2) { Fabricate(:post, topic:, raw: "[poll results=on_vote]\n- A\n- B\n[/poll]") } fab!(:post2) { Fabricate(:post, topic:, raw: "[poll results=on_vote]\n- A\n- B\n[/poll]") }
fab!(:post3) { Fabricate(:post, topic:, raw: "[poll results=on_vote]\n- A\n- B\n[/poll]") } fab!(:post3) { Fabricate(:post, topic:, raw: "[poll results=on_vote]\n- A\n- B\n[/poll]") }
fab!(:post4) { Fabricate(:post, topic:, raw: "[poll results=on_vote]\n- A\n- B\n[/poll]") } fab!(:post4) { Fabricate(:post, topic:, raw: "[poll results=on_vote]\n- A\n- B\n[/poll]") }
fab!(:post5) { Fabricate(:post, topic:, raw: "[poll results=staff_only]\n- A\n- B\n[/poll]") } fab!(:post5) do
fab!(:post6) { Fabricate(:post, topic:, raw: "[poll results=staff_only]\n- A\n- B\n[/poll]") } Fabricate(:post, topic:, raw: "[poll public=true results=staff_only]\n- A\n- B\n[/poll]")
fab!(:post7) { Fabricate(:post, topic:, raw: "[poll visibility=]\n- A\n- B\n[/poll]") } end
fab!(:post6) do
Fabricate(:post, topic:, raw: "[poll public=true results=staff_only]\n- A\n- B\n[/poll]")
end
fab!(:post7) { Fabricate(:post, topic:, raw: "[poll public=true]\n- A\n- B\n[/poll]") }
describe "#show" do describe "#show" do
context "when not logged in" do context "when not logged in" do
@ -26,7 +30,8 @@ RSpec.describe PostsController do
# - load all options # - load all options
# - count votes for each poll # - count votes for each poll
# - count votes for each option # - count votes for each option
expect(poll_queries.size).to eq(4) # - voters for poll in post7
expect(poll_queries.size).to eq(5)
end end
end end
@ -43,7 +48,10 @@ RSpec.describe PostsController do
# - all queries listed for "when not logged in" # - all queries listed for "when not logged in"
# - query to find out if the user has voted in each poll # - query to find out if the user has voted in each poll
# - queries to get "serialized voters" (NOT TRACKED) # - queries to get "serialized voters" (NOT TRACKED)
expect(poll_queries.size).to eq(5) # - voters for poll in post5
# - voters for poll in post6
# - voters for poll in post7
expect(poll_queries.size).to eq(8)
end end
end end
end end

View File

@ -209,7 +209,9 @@ module Helpers
queries << payload.fetch(:sql) if %w[CACHE SCHEMA].exclude?(payload.fetch(:name)) queries << payload.fetch(:sql) if %w[CACHE SCHEMA].exclude?(payload.fetch(:name))
end end
ActiveSupport::Notifications.subscribed(callback, "sql.active_record") { yield } ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
ActiveSupport::Notifications.subscribed(callback, "sql.mini_sql") { yield }
end
queries queries
end end