Created
August 10, 2011 16:33
-
-
Save belt/1137342 to your computer and use it in GitHub Desktop.
QueryTrace... ported to rails3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'term/ansicolor' | |
# yeilds a stacktrace for each SQL query | |
# put this file in config/initializers | |
class QueryTrace < ActiveSupport::LogSubscriber | |
include Term::ANSIColor | |
attr_accessor :trace_queries | |
def sql(event) #:nodoc: | |
return unless QueryTrace.enabled? && logger.debug? && Rails.env.development? | |
stack = Rails.backtrace_cleaner.clean(caller) | |
first_line = stack.shift | |
return unless first_line | |
msg = prefix + bold + cyan + "#{first_line}\n" + reset | |
msg += cyan + stack.join("\n") + reset | |
debug msg | |
end | |
# :call-seq: | |
# Klass.enabled? | |
# | |
# yields boolean if SQL queries should be logged or not | |
def self.enabled? | |
defined?(@trace_queries) && @trace_queries | |
end | |
# :call-seq: | |
# Klass.status | |
# | |
# yields text if QueryTrace has been enabled or not | |
def self.status | |
QueryTrace.enabled? ? 'enabled' : 'disabled' | |
end | |
# :call-seq: | |
# Klass.enable! | |
# | |
# turn on SQL query origin logging | |
def self.enable! | |
@trace_queries = true | |
end | |
# :call-seq: | |
# Klass.disable! | |
# | |
# turn off SQL query origin logging | |
def self.disable! | |
@trace_queries = false | |
end | |
# :call-seq: | |
# Klass.toggle! | |
# | |
# Toggles query tracing yielding a boolean indicating the new state of query | |
# origin tracing | |
def self.toggle! | |
enabled? ? disable! : enable! | |
enabled? | |
end | |
protected | |
def prefix #:nodoc: | |
bold(magenta('Called from: ')) + reset | |
end | |
end | |
QueryTrace.attach_to :active_record | |
trap('QUIT') do | |
# Sending 2 backspace characters removes the ^\ that is | |
# printed to the console. | |
rm_noise = "\b\b" | |
QueryTrace.toggle! | |
puts "#{rm_noise}=> QueryTrace #{QueryTrace.status}" | |
end | |
QueryTrace.enable! if ENV['QUERY_TRACE'] | |
puts "=> QueryTrace #{QueryTrace.status}; CTRL-\\ to toggle" |
For rails 3 see this as an alternative https://github.com/flyerhzm/bullet
Holy shit, you guys shouldn't trap QUIT without actually quitting afterwards…
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for this. I had to add
gem 'term-ansicolor'
to my gemfile to get it working.