diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2018-08-02 12:04:35 +0200 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2018-08-07 19:53:16 +0200 |
commit | cf04146ae834a4692f03b5ab989d78eb789858dc (patch) | |
tree | f21956ccd3e0f386d6f363144cbd603d86752ef1 | |
parent | e72388246b0ab9badfd96cc5888b8d4807daeb89 (diff) | |
download | gitlab-ce-cf04146ae834a4692f03b5ab989d78eb789858dc.tar.gz |
Enable verbose query loggingenable-verbose-query-logs
This backports the https://github.com/rails/rails/pull/26815
and enables that for non-Rails5 and non-production environments.
-rw-r--r-- | config/initializers/active_record_verbose_query_logs.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/config/initializers/active_record_verbose_query_logs.rb b/config/initializers/active_record_verbose_query_logs.rb new file mode 100644 index 00000000000..44f86fec7e0 --- /dev/null +++ b/config/initializers/active_record_verbose_query_logs.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +# This is backport of https://github.com/rails/rails/pull/26815/files +# Enabled by default for every non-production environment + +module ActiveRecord + class LogSubscriber + module VerboseQueryLogs + def debug(progname = nil, &block) + return unless super + + log_query_source + end + + def log_query_source + source_line, line_number = extract_callstack(caller_locations) + + if source_line + if defined?(::Rails.root) + app_root = "#{::Rails.root}/".freeze + source_line = source_line.sub(app_root, "") + end + + logger.debug(" ↳ #{source_line}:#{line_number}") + end + end + + def extract_callstack(callstack) + line = callstack.find do |frame| + frame.absolute_path && !ignored_callstack(frame.absolute_path) + end + + offending_line = line || callstack.first + [ + offending_line.path, + offending_line.lineno, + offending_line.label + ] + end + + LOG_SUBSCRIBER_FILE = ActiveRecord::LogSubscriber.method(:logger).source_location.first + RAILS_GEM_ROOT = File.expand_path("../../../..", LOG_SUBSCRIBER_FILE) + "/" + APP_CONFIG_ROOT = File.expand_path("..", __dir__) + "/" + + def ignored_callstack(path) + path.start_with?(APP_CONFIG_ROOT, RAILS_GEM_ROOT, RbConfig::CONFIG["rubylibdir"]) + end + end + + unless Gitlab.rails5? + prepend(VerboseQueryLogs) unless Rails.env.production? + end + end +end |