diff options
Diffstat (limited to 'lib/gitlab/database/query_analyzer.rb')
-rw-r--r-- | lib/gitlab/database/query_analyzer.rb | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/lib/gitlab/database/query_analyzer.rb b/lib/gitlab/database/query_analyzer.rb index 2736f9d18dc..0c78dda734c 100644 --- a/lib/gitlab/database/query_analyzer.rb +++ b/lib/gitlab/database/query_analyzer.rb @@ -30,13 +30,17 @@ module Gitlab end end - def within + def within(user_analyzers = nil) # Due to singleton nature of analyzers # only an outer invocation of the `.within` # is allowed to initialize them - return yield if already_within? + if already_within? + raise 'Query analyzers are already defined, cannot re-define them.' if user_analyzers - begin! + return yield + end + + begin!(user_analyzers || all_analyzers) begin yield @@ -61,21 +65,21 @@ module Gitlab next if analyzer.suppressed? && !analyzer.requires_tracking?(parsed) analyzer.analyze(parsed) - rescue StandardError, QueryAnalyzers::Base::QueryAnalyzerError => e + rescue StandardError, ::Gitlab::Database::QueryAnalyzers::Base::QueryAnalyzerError => e # We catch all standard errors to prevent validation errors to introduce fatal errors in production Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e) end end # Enable query analyzers - def begin! - analyzers = all_analyzers.select do |analyzer| + def begin!(analyzers = all_analyzers) + analyzers = analyzers.select do |analyzer| if analyzer.enabled? analyzer.begin! true end - rescue StandardError, QueryAnalyzers::Base::QueryAnalyzerError => e + rescue StandardError, ::Gitlab::Database::QueryAnalyzers::Base::QueryAnalyzerError => e Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e) false @@ -88,7 +92,7 @@ module Gitlab def end! enabled_analyzers.select do |analyzer| analyzer.end! - rescue StandardError, QueryAnalyzers::Base::QueryAnalyzerError => e + rescue StandardError, ::Gitlab::Database::QueryAnalyzers::Base::QueryAnalyzerError => e Gitlab::ErrorTracking.track_and_raise_for_dev_exception(e) end |