BigW Consortium Gitlab

Commit b17457a7 by Stan Hu

Merge branch 'add-query-counts-to-profiler-output' into 'master'

Add query counts by model to profiler output See merge request gitlab-org/gitlab-ce!17910
parents 6ce1013b e2361806
---
title: Add query counts to profiler output
merge_request:
author:
type: other
...@@ -92,8 +92,8 @@ module Gitlab ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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
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