class Arproxy::Plugin::MysqlCasualLog
Constants
- REGEXPS
Public Class Methods
new(*args)
click to toggle source
# File lib/arproxy/plugin/mysql_casual_log.rb, line 32 def initialize(*args) @options = args.first || {} @out = @options[:out] || $stdout @raw_connection = @options[:raw_connection] || proc {|conn, sql| conn.raw_connection } end
Public Instance Methods
execute(sql, name=nil)
click to toggle source
Calls superclass method
# File lib/arproxy/plugin/mysql_casual_log.rb, line 38 def execute(sql, name=nil) if sql =~ /\ASELECT\b/i proxy(sql) end super(sql, name) end
Private Instance Methods
colored(str)
click to toggle source
# File lib/arproxy/plugin/mysql_casual_log.rb, line 100 def colored(str) Term::ANSIColor.red(Term::ANSIColor.bold(str)) end
colorize_explain(explain_result)
click to toggle source
# File lib/arproxy/plugin/mysql_casual_log.rb, line 84 def colorize_explain(explain_result) badquery = false REGEXPS.each do |key, regexp| value = explain_result[key] ||= 'NULL' value = value.to_s value.gsub!(regexp) do |m| badquery = true colored(m) end end badquery end
explain(conn, sql)
click to toggle source
# File lib/arproxy/plugin/mysql_casual_log.rb, line 60 def explain(conn, sql) badquery = false explains = [] conn.query("EXPLAIN #{sql}", :as => :hash).each_with_index do |result, i| colorize_explain(result).tap {|bq| badquery ||= bq } explains << format_explain(result, i + 1) end if badquery query_options = conn.query_options.dup query_options.delete(:password) @out << <<-EOS # Time: #{Time.now.strftime("%Y-%m-%d %H:%M:%S")} # Query options: #{query_options.inspect} # Query: #{sql} #{explains.join("\n")} EOS end rescue => e $stderr.puts colored([e.message, e.backtrace.first].join("\n")) end
format_explain(explain, i)
click to toggle source
# File lib/arproxy/plugin/mysql_casual_log.rb, line 104 def format_explain(explain, i) message = "*************************** #{i}. row ***************************\n" max_key_length = explain.keys.map(&:length).max explain.each do |key, value| message << "%*s: %s\n" % [max_key_length, key, value] end message.chomp end
proxy(sql)
click to toggle source
# File lib/arproxy/plugin/mysql_casual_log.rb, line 48 def proxy(sql) if @raw_connection.respond_to?(:call) conn = @raw_connection.call(proxy_chain.connection, sql) else conn = @raw_connection end if conn explain(conn, sql) end end