query_trace3 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []