sql_tracer 0.0.9 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acf837bfa2f4bb0a5e196c34258a2de751378ee3
4
- data.tar.gz: e754d000c10381bc922c8a9078f1a945245ecbbb
3
+ metadata.gz: 98ce5725d8ff7895f2d497d33d9d56368e6074bb
4
+ data.tar.gz: 1cc0510f0278227e89a946e1f6bb760c4935bc91
5
5
  SHA512:
6
- metadata.gz: 44d53258badb4e51bf26b1fe5a19e1bd434a40647cd50a7f021ef8d91ddae750a251d5609d9fef2ff796a7cefed55b97e3df446257a1913fb68148e85035574e
7
- data.tar.gz: fa0b7b0a39a3d0ed1ad5b41e01fe76711e6aeba770581463a1ec6a20026e4ba927ca70042649340d965b5b0f18c4f96ba6cbc2356ede7783eed2f5724c5ee76a
6
+ metadata.gz: a13325d7bcbe611d574b58459ee606e6ea8e34b541975cfaa80706e2d51f787c3f0ac116f315f716b7759022e31f1d7a8000ecbeb829b83dc4f58c8f2fa9ef64
7
+ data.tar.gz: a944447d1bb4e19965ce4ae1359aea5e02ae7c6e1c012b155bd3fa5160b7985e9f755447bebf5da7aee0138b60c77d19bc7959f50b06d3b3453c61ad7667cdac
@@ -16,10 +16,6 @@ h3 {
16
16
  font-weight: 300;
17
17
  }
18
18
 
19
- /*.container {*/
20
- /*max-width: 970px;*/
21
- /*}*/
22
-
23
19
  div[class*='col-'] {
24
20
  padding: 0 30px;
25
21
  }
@@ -72,6 +68,14 @@ a:active {
72
68
  padding: 0;
73
69
  }
74
70
 
71
+ .panel-heading:hover {
72
+ background-color: #185751;
73
+ }
74
+
75
+ .sql_template:hover {
76
+ background-color: #008e80;
77
+ }
78
+
75
79
  .panel-title a {
76
80
  display: block;
77
81
  color: #fff;
@@ -124,29 +128,6 @@ a:active {
124
128
  transform: scale(0);
125
129
  }
126
130
 
127
- /*.panel-heading a:after {*/
128
- /*content: ' ';*/
129
- /*font-size: 24px;*/
130
- /*position: absolute;*/
131
- /*font-family: 'Material Icons';*/
132
- /*right: 5px;*/
133
- /*top: 10px;*/
134
- /*-webkit-transform: scale(0);*/
135
- /*transform: scale(0);*/
136
- /*-webkit-transition: all 0.5s;*/
137
- /*transition: all 0.5s;*/
138
- /*}*/
139
-
140
- /*.panel-heading.active a:after {*/
141
- /*content: '\e909';*/
142
- /*-webkit-transform: scale(1);*/
143
- /*transform: scale(1);*/
144
- /*-webkit-transition: all 0.5s;*/
145
- /*transition: all 0.5s;*/
146
- /*}*/
147
-
148
- /* #accordion rotate icon option */
149
-
150
131
  .panel-heading a:before {
151
132
  content: '\e316';
152
133
  font-size: 24px;
@@ -55,7 +55,6 @@
55
55
  </h4>
56
56
  </div>
57
57
  </div>
58
-
59
58
  <div id="sql_template" class="panel-heading sql_template">
60
59
  <h4 class="panel-title">
61
60
  <a data-toggle="collapse" data-parent="#" href="#one-2" class="sql">
@@ -1,11 +1,12 @@
1
1
  require 'sql_tracer/engine'
2
2
 
3
3
  module SqlTracer
4
+ autoload :RequestLogger, 'sql_tracer/request_logger'
4
5
  autoload :SqlLogger, 'sql_tracer/sql_logger'
6
+ autoload :SqlStack, 'sql_tracer/sql_stack'
5
7
  autoload :Helper, 'sql_tracer/helper'
6
8
  autoload :Formatter, 'sql_tracer/formatter'
7
- autoload :RequestLogger, 'sql_tracer/request_logger'
8
- autoload :SqlStack, 'sql_tracer/sql_stack'
9
+ autoload :Config, 'sql_tracer/config'
9
10
  end
10
11
 
11
12
  # why does not work when wrapped in block ActiveSupport.on_load(:active_record) do
@@ -0,0 +1,19 @@
1
+ module SqlTracer
2
+ module Config
3
+
4
+ def self.get(name)
5
+ @config ||= load_config
6
+ @config ? @config[name.to_s] : nil
7
+ end
8
+
9
+ private
10
+
11
+ def self.load_config
12
+ default_config_file = File.join(Rails.root, 'config', 'sql_tracer.yml')
13
+ ui_config_file = File.join(Rails.root, 'config', 'ui_config.yml')
14
+
15
+ config_file = [default_config_file, ui_config_file].find { |file| File.exist?(file) }
16
+ YAML.load_file(config_file) if config_file
17
+ end
18
+ end
19
+ end
@@ -4,13 +4,6 @@ module SqlTracer
4
4
  class Formatter
5
5
  HEADER_PROMPT= '='*10 << '>'
6
6
  FOOTER_PROMPT= '<' << '='*10
7
- FORMATTER_CONFIG_TIP =
8
- <<-TIP
9
- You can add config to ui_config.yml to acquire advanced features
10
- SQL_TRACER_FORMAT_SQL_ENABLED: true # show formatted and colored sql, default false
11
- SQL_TRACER_FORMAT_STACK_ENABLED: true # show colored stack, default fasle
12
- SQL_TRACER_SKIP_LIB: false # show all paths including the files in ruby gems, default true
13
- TIP
14
7
 
15
8
  def self.start_print
16
9
  puts HEADER_PROMPT
@@ -22,7 +15,7 @@ You can add config to ui_config.yml to acquire advanced features
22
15
 
23
16
  def self.print_tips
24
17
  puts 'SqlTracer is watching and will capture backtrace when sql is executed.'
25
- # puts FORMATTER_CONFIG_TIP
18
+ puts 'open http://127.0.0.1:3000/sql_tracer/index for detailed information'
26
19
  end
27
20
 
28
21
  def self.print_sql(sql)
@@ -47,9 +40,9 @@ You can add config to ui_config.yml to acquire advanced features
47
40
  Formatter.end_print
48
41
  end
49
42
 
50
- def self.remove_lib_path(backtrace)
43
+ def self.remove_filtered_path(backtrace)
51
44
  backtrace.map do |path|
52
- next if Helper.should_skip_lib? && path.include?('/.rvm/gems/')
45
+ next if Helper.shoule_skip_path_by_keywords?(path)
53
46
  path
54
47
  end.compact
55
48
  end
@@ -2,33 +2,60 @@ require 'anbt-sql-formatter/formatter'
2
2
 
3
3
  module SqlTracer
4
4
  class Helper
5
+
5
6
  class << self
6
7
  def format_sql_enabled?
7
- @format_sql_enabled ||= (UIConfig.get(:SQL_TRACER_FORMAT_SQL_ENABLED) || false)
8
+ @format_sql_enabled ||= (config.get(:SQL_TRACER_FORMAT_SQL_ENABLED) || false)
8
9
  end
9
10
 
10
11
  def format_stack_enabled?
11
- @format_stack_enabled ||= (UIConfig.get(:SQL_TRACER_FORMAT_STACK_ENABLED) || false)
12
+ @format_stack_enabled ||= (config.get(:SQL_TRACER_FORMAT_STACK_ENABLED) || false)
13
+ end
14
+
15
+ def output_select_sql_enabled?
16
+ @output_select_sql_enabled ||= (config.get(:SQL_TRACER_OUTPUT_SELECT_SQL_ENABLED) || false)
12
17
  end
13
18
 
14
19
  def should_skip_lib?
15
- @should_skip_lib ||= (UIConfig.get(:SQL_TRACER_SKIP_LIB) == false ? false : true)
20
+ @should_skip_lib ||= (config.get(:SQL_TRACER_SKIP_LIB_PATH) == false ? false : true)
16
21
  end
17
22
 
18
23
  def should_skip_sql_by_keywords?(sql)
19
- @sql_keywords ||= (UIConfig.get(:SQL_TRACER_SQL_FILTER) || [])
20
- return false if @sql_keywords.blank?
24
+ @sql_keywords ||= (config.get(:SQL_TRACER_SQL_FILTER) || [])
21
25
  @sql_keywords.any? { |keyword| sql.include?(keyword) }
22
26
  end
23
27
 
24
28
  def should_skip_url_by_keywords?(url)
25
- @url_keywords ||= (UIConfig.get(:SQL_TRACER_URL_FILTER) || [])
26
- return false if @url_keywords.blank?
29
+ @url_keywords ||= (config.get(:SQL_TRACER_URL_FILTER) || [])
27
30
  @url_keywords.any? { |keyword| url.include?(keyword) }
28
31
  end
29
32
 
33
+ def shoule_skip_path_by_keywords?(path)
34
+ @path_keywords ||= build_path_filter
35
+ @path_keywords.any? { |keyword| path.include?(keyword) }
36
+ end
37
+
30
38
  def disable_console_output?
31
- @console_output_disabled ||= (UIConfig.get(:SQL_TRACER_CONSOLE_OUTPUT_DISABLED) || false)
39
+ @console_output_disabled ||= (config.get(:SQL_TRACER_CONSOLE_OUTPUT_DISABLED) || false)
40
+ end
41
+
42
+ def should_output_sql?(sql)
43
+ reg = 'insert|update|delete'
44
+ reg << '|select' if Helper.output_select_sql_enabled?
45
+ return sql =~ /^\s*(#{reg})\s/i && !Helper.should_skip_sql_by_keywords?(sql)
46
+ end
47
+
48
+
49
+ private
50
+
51
+ def build_path_filter
52
+ path_filter = (config.get(:SQL_TRACER_PATH_FILTER) || [])
53
+ path_filter << '/.rvm/gems/' if Helper.should_skip_lib?
54
+ path_filter.uniq
55
+ end
56
+
57
+ def config
58
+ SqlTracer::Config
32
59
  end
33
60
  end
34
61
  end
@@ -5,11 +5,15 @@ module SqlTracer
5
5
  after_filter :persist_reqeust_logger
6
6
 
7
7
  def persist_reqeust_logger
8
- if SqlTracer::Helper.should_skip_url_by_keywords?(request.path)
9
- SqlTracer::SqlStack.abandon_request
10
- else
11
- SqlTracer::SqlStack.url = "#{request.method} #{request.path}"
12
- SqlTracer::SqlStack.push
8
+ begin
9
+ if SqlTracer::Helper.should_skip_url_by_keywords?(request.path)
10
+ SqlTracer::SqlStack.abandon_request
11
+ else
12
+ SqlTracer::SqlStack.push("#{request.method} #{request.path}")
13
+ end
14
+ rescue => e
15
+ Rails.logger.error "Failed to log sql in SqlTracer. Error: #{e.message}"
16
+ Rails.logger.error e.backtrace.join("\n")
13
17
  end
14
18
  end
15
19
  end
@@ -10,9 +10,9 @@ module SqlTracer
10
10
  begin
11
11
  sql = args.first
12
12
 
13
- if sql =~ /^\s*(insert|update|delete)\s/i && !Helper.should_skip_sql_by_keywords?(sql)
13
+ if Helper.should_output_sql?(sql)
14
14
  backtrace = Thread.current.backtrace
15
- backtrace = Formatter.remove_lib_path(backtrace) if Helper.should_skip_lib?
15
+ backtrace = Formatter.remove_filtered_path(backtrace)
16
16
  Formatter.print_all(sql, backtrace) unless Helper.disable_console_output?
17
17
  SqlTracer::SqlStack.sql_stack << { :sql => sql, :stack => backtrace }
18
18
  end
@@ -1,22 +1,18 @@
1
- require 'fileutils'
2
-
3
1
  module SqlTracer
4
2
  class SqlStack
5
- @url = ''
6
- @sql_stack = []
7
- @sql_stacks = []
3
+ @sql_stack = [] # used to store current request information
4
+ @sql_stacks = [] # used to store all requests before taken by SqlTracerController#get_latest_stack_info
8
5
 
9
6
  class << self
10
- attr_accessor :url, :sql_stack, :sql_stacks
7
+ attr_accessor :sql_stack, :sql_stacks
11
8
 
12
9
  def clear
13
10
  @sql_stacks = []
14
11
  end
15
12
 
16
- def push
17
- @sql_stacks << { :url => "[#{Time.now.strftime('%H:%M:%S')}] #{@url}", :sqls => @sql_stack }
13
+ def push(url)
14
+ @sql_stacks << { :url => "[#{Time.now.strftime('%H:%M:%S')}] #{url}", :sqls => @sql_stack }
18
15
  @sql_stack = []
19
- @url = ''
20
16
  end
21
17
 
22
18
  def to_json
@@ -25,7 +21,6 @@ module SqlTracer
25
21
 
26
22
  def abandon_request
27
23
  @sql_stack = []
28
- @url = ''
29
24
  end
30
25
  end
31
26
  end
@@ -1,3 +1,3 @@
1
1
  module SqlTracer
2
- VERSION = '0.0.9'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_tracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - qzhang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-01 00:00:00.000000000 Z
11
+ date: 2017-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anbt-sql-formatter
@@ -32,6 +32,7 @@ executables: []
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
+ - lib/sql_tracer/config.rb
35
36
  - lib/sql_tracer/engine.rb
36
37
  - lib/sql_tracer/formatter.rb
37
38
  - lib/sql_tracer/helper.rb