query_trace3 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/query_trace.rb +86 -0
  2. metadata +57 -0
data/query_trace.rb ADDED
@@ -0,0 +1,86 @@
1
+ require 'term/ansicolor'
2
+
3
+ # yeilds a stacktrace for each SQL query
4
+ # put this file in config/initializers
5
+ class QueryTrace < ActiveSupport::LogSubscriber
6
+ include Term::ANSIColor
7
+ attr_accessor :trace_queries
8
+
9
+ def sql(event) #:nodoc:
10
+ return unless QueryTrace.enabled? && logger.debug? && Rails.env.development?
11
+ stack = Rails.backtrace_cleaner.clean(caller)
12
+ first_line = stack.shift
13
+ return unless first_line
14
+
15
+ msg = prefix + bold + cyan + "#{first_line}\n" + reset
16
+ msg += cyan + stack.join("\n") + reset
17
+ debug msg
18
+ end
19
+
20
+ # :call-seq:
21
+ # Klass.enabled?
22
+ #
23
+ # yields boolean if SQL queries should be logged or not
24
+
25
+ def self.enabled?
26
+ defined?(@trace_queries) && @trace_queries
27
+ end
28
+
29
+ # :call-seq:
30
+ # Klass.status
31
+ #
32
+ # yields text if QueryTrace has been enabled or not
33
+
34
+ def self.status
35
+ QueryTrace.enabled? ? 'enabled' : 'disabled'
36
+ end
37
+
38
+ # :call-seq:
39
+ # Klass.enable!
40
+ #
41
+ # turn on SQL query origin logging
42
+
43
+ def self.enable!
44
+ @trace_queries = true
45
+ end
46
+
47
+ # :call-seq:
48
+ # Klass.disable!
49
+ #
50
+ # turn off SQL query origin logging
51
+
52
+ def self.disable!
53
+ @trace_queries = false
54
+ end
55
+
56
+ # :call-seq:
57
+ # Klass.toggle!
58
+ #
59
+ # Toggles query tracing yielding a boolean indicating the new state of query
60
+ # origin tracing
61
+
62
+ def self.toggle!
63
+ enabled? ? disable! : enable!
64
+ enabled?
65
+ end
66
+
67
+ protected
68
+
69
+ def prefix #:nodoc:
70
+ bold(magenta('Called from: ')) + reset
71
+ end
72
+ end
73
+
74
+ QueryTrace.attach_to :active_record
75
+
76
+ trap('QUIT') do
77
+ # Sending 2 backspace characters removes the ^\ that is
78
+ # printed to the console.
79
+ rm_noise = "\b\b"
80
+
81
+ QueryTrace.toggle!
82
+ puts "#{rm_noise}=> QueryTrace #{QueryTrace.status}"
83
+ end
84
+
85
+ QueryTrace.enable! if ENV['QUERY_TRACE']
86
+ puts "=> QueryTrace #{QueryTrace.status}; CTRL-\\ to toggle"
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: query_trace3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - belt
9
+ - Aaron Suggs
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-02-29 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: term-ansicolor
17
+ requirement: &70328571525760 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70328571525760
26
+ description: Query Trace plugin w/ rails3 support; based on https://gist.github.com/1137342
27
+ email: aaron@ktheory.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - query_trace.rb
33
+ homepage: https://gist.github.com/1762136
34
+ licenses: []
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - .
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 1.8.11
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: Shows backtraces for ActiveRecord queries
57
+ test_files: []