class NoBrainer::Profiler::Logger
Public Instance Methods
on_query(env)
click to toggle source
# File lib/no_brainer/profiler/logger.rb, line 6 def on_query(env) level = ::Logger::ERROR if env[:exception] level ||= not_indexed(env) ? ::Logger::INFO : ::Logger::DEBUG return if NoBrainer.logger.level > level NoBrainer.logger.add(level, build_message(env)) end
Private Instance Methods
build_message(env)
click to toggle source
# File lib/no_brainer/profiler/logger.rb, line 16 def build_message(env) msg_duration = (env[:duration] * 1000.0).round(1).to_s msg_duration = (' ' * [0, 6 - msg_duration.size].max) + msg_duration msg_duration = "[#{msg_duration}ms] " env[:query_type] = NoBrainer::RQL.type_of(env[:query]) msg_db = "[#{env[:options][:db]}] " if env[:options][:db] msg_query = env[:query].inspect.gsub(/\n/, '').gsub(/ +/, ' ') msg_exception = "#{env[:exception].class} #{env[:exception].message.split("\n").first}" if env[:exception] msg_exception ||= 'perf: filtering without using an index' if not_indexed(env) msg_last = nil if NoBrainer::Config.colorize_logger msg_duration = [query_color(env[:query_type]), msg_duration].join msg_db = ["\e[0;34m", msg_db, query_color(env[:query_type])].join if msg_db if msg_exception exception_color = "\e[0;31m" if level == Logger::ERROR msg_exception = ["\e[0;39m", ' -- ', exception_color, msg_exception].compact.join end msg_last = "\e[0m" end [msg_duration, msg_db, msg_query, msg_exception, msg_last].join end
not_indexed(env)
click to toggle source
# File lib/no_brainer/profiler/logger.rb, line 44 def not_indexed(env) env[:criteria] && env[:criteria].where_present? && !env[:criteria].where_indexed? && !env[:criteria].model.try(:perf_warnings_disabled) end
query_color(query_type)
click to toggle source
# File lib/no_brainer/profiler/logger.rb, line 51 def query_color(query_type) { write: "\e[1;31m", # red read: "\e[1;32m", # green management: "\e[1;33m" # yellow }[query_type] end