Add query counts by model to profiler output
This commit is contained in:
parent
a9a31ce31d
commit
e236180618
3 changed files with 35 additions and 6 deletions
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Add query counts to profiler output
|
||||||
|
merge_request:
|
||||||
|
author:
|
||||||
|
type: other
|
|
@ -92,8 +92,8 @@ module Gitlab
|
||||||
|
|
||||||
if type && time
|
if type && time
|
||||||
@load_times_by_model ||= {}
|
@load_times_by_model ||= {}
|
||||||
@load_times_by_model[type] ||= 0
|
@load_times_by_model[type] ||= []
|
||||||
@load_times_by_model[type] += time.to_f
|
@load_times_by_model[type] << time.to_f
|
||||||
end
|
end
|
||||||
|
|
||||||
super
|
super
|
||||||
|
@ -135,8 +135,12 @@ module Gitlab
|
||||||
def self.log_load_times_by_model(logger)
|
def self.log_load_times_by_model(logger)
|
||||||
return unless logger.respond_to?(:load_times_by_model)
|
return unless logger.respond_to?(:load_times_by_model)
|
||||||
|
|
||||||
logger.load_times_by_model.to_a.sort_by(&:last).reverse.each do |(model, time)|
|
summarised_load_times = logger.load_times_by_model.to_a.map do |(model, times)|
|
||||||
logger.info("#{model} total: #{time.round(2)}ms")
|
[model, times.count, times.sum]
|
||||||
|
end
|
||||||
|
|
||||||
|
summarised_load_times.sort_by(&:last).reverse.each do |(model, query_count, time)|
|
||||||
|
logger.info("#{model} total (#{query_count}): #{time.round(2)}ms")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -110,8 +110,8 @@ describe Gitlab::Profiler do
|
||||||
custom_logger.debug('User Load (1.3ms)')
|
custom_logger.debug('User Load (1.3ms)')
|
||||||
custom_logger.debug('Project Load (10.4ms)')
|
custom_logger.debug('Project Load (10.4ms)')
|
||||||
|
|
||||||
expect(custom_logger.load_times_by_model).to eq('User' => 2.5,
|
expect(custom_logger.load_times_by_model).to eq('User' => [1.2, 1.3],
|
||||||
'Project' => 10.4)
|
'Project' => [10.4])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'logs the backtrace, ignoring lines as appropriate' do
|
it 'logs the backtrace, ignoring lines as appropriate' do
|
||||||
|
@ -164,4 +164,24 @@ describe Gitlab::Profiler do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.log_load_times_by_model' do
|
||||||
|
it 'logs the model, query count, and time by slowest first' do
|
||||||
|
expect(null_logger).to receive(:load_times_by_model).and_return(
|
||||||
|
'User' => [1.2, 1.3],
|
||||||
|
'Project' => [10.4]
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(null_logger).to receive(:info).with('Project total (1): 10.4ms')
|
||||||
|
expect(null_logger).to receive(:info).with('User total (2): 2.5ms')
|
||||||
|
|
||||||
|
described_class.log_load_times_by_model(null_logger)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does nothing when called with a logger that does not have load times' do
|
||||||
|
expect(null_logger).not_to receive(:info)
|
||||||
|
|
||||||
|
expect(described_class.log_load_times_by_model(null_logger)).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue