-
-
Save ktheory/1942451 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" |
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
Gem::Specification.new do |s| | |
s.name = 'query_trace3' | |
s.version = '0.1.1' | |
s.platform = Gem::Platform::RUBY | |
s.author = ['belt', 'Aaron Suggs'] | |
s.email = '[email protected]' | |
s.summary = 'Shows backtraces for ActiveRecord queries' | |
s.description = 'Query Trace plugin w/ rails3 support; based on https://gist.github.com/1137342' | |
s.homepage = 'https://gist.github.com/1942451' | |
s.add_dependency('term-ansicolor') | |
s.files = ['query_trace.rb'] | |
s.require_path = '.' | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment