Skip to content

Instantly share code, notes, and snippets.

@ktheory
Forked from belt/query_trace.rb
Created February 29, 2012 16:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ktheory/1942451 to your computer and use it in GitHub Desktop.
Save ktheory/1942451 to your computer and use it in GitHub Desktop.
QueryTrace... ported to rails3
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"
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 = 'aaron@ktheory.com'
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