sql_tracer 0.0.1 → 0.0.2

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: af23a3259abebd3425188fe447b819f32ec9e7f5
4
- data.tar.gz: 9db84e52fffe16f05c5967d9ca2e48d4a5f82711
3
+ metadata.gz: 5134ce3a708e62d524bfe5fd28c2ce93657a964f
4
+ data.tar.gz: 12db129a6e5c27b178712cc0ec85ecc40ba892ea
5
5
  SHA512:
6
- metadata.gz: ca816309a83bdf9ae2abb7c3a24116c6093e959820e65dbf1ab6b148739fbc1a22365db9d93968b9b7c2f358aafa6ce4c4cf4ccc404f91746024a282f01fa92d
7
- data.tar.gz: feb5dad7d36ff82215602ca9c233189ded04d15785da54b9876f5535076aa68fe50ac0660470b6802548c60e692b7081a87a03c6eed1ca519befac891f087b24
6
+ metadata.gz: 90ae4ff59999ae3ffba9a6d0bd8a86fd11af19d1b9fba722a6d9428dba2cc132a683078ae4dcc7abcab7e5841d257453050cf8f5dbb7a5511af6fe456429b170
7
+ data.tar.gz: 6b373a3605333c9f3a70c365c90d61e6263c5b5e2f3343797de21b2160360e81a743ae089a39745df9a1da5b5a94fedb219d3dcac552a492df1925cf68d06b4c
@@ -0,0 +1,69 @@
1
+ require 'anbt-sql-formatter/formatter'
2
+
3
+ module SqlTracer
4
+ class Formatter
5
+ HEADER_PROMPT= '='*10 << '>'
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
11
+ SQL_TRACER_FORMAT_STACK_ENABLED : false # show colored paths
12
+ SQL_TRACER_SKIP_LIB : false # show all paths including the files in ruby gems
13
+ TIP
14
+
15
+ def self.start_print
16
+ puts HEADER_PROMPT
17
+ end
18
+
19
+ def self.end_print
20
+ puts FOOTER_PROMPT
21
+ end
22
+
23
+ def self.print_tips
24
+ puts 'Tips:'
25
+ puts FORMATTER_CONFIG_TIP
26
+ end
27
+
28
+ def self.print_sql(sql)
29
+ puts 'SQL:'
30
+ return sql if sql.blank?
31
+ formatted_sql = ' ' << (Helper.format_sql_enabled? ? colorize(sql_formatter.format(sql.squeeze(' ')), 32) : sql)
32
+ puts formatted_sql
33
+ end
34
+
35
+ def self.print_backtrace(backtrace)
36
+ puts Helper.should_skip_lib? ? 'Backtrace: note that paths in ruby libs have been hidden' : 'Backtrace:'
37
+
38
+ stacktrace = backtrace.map do |call|
39
+ line = (call.include?('/.rvm/gems/') && Helper.should_skip_lib?) ? nil : call
40
+ line = format_line(line) if (line && Helper.format_stack_enabled?)
41
+ line
42
+ end
43
+ stacktrace.compact.each { |line| puts ' ' << line }
44
+ end
45
+
46
+ def self.sql_formatter
47
+ return @formatter if @formatter
48
+ rule = AnbtSql::Rule.new
49
+ rule.keyword = AnbtSql::Rule::KEYWORD_UPPER_CASE
50
+ rule.function_names += %w(count sum)
51
+ rule.indent_string = ' '
52
+ @formatter = AnbtSql::Formatter.new(rule)
53
+ end
54
+
55
+ def self.format_line(line)
56
+ parts = line.match(/^(?<file>.+):(?<line>\d+):in `(?<code>.*)'$/)
57
+ if parts
58
+ "#{colorize(parts[:file], 32)}:#{colorize(parts[:line], 36)}:#{colorize(parts[:code], 31)}"
59
+ else
60
+ "#{colorize(line, 32)}"
61
+ end
62
+ end
63
+
64
+ def self.colorize(text, color_code)
65
+ "\e[#{color_code}m#{text}\e[0m"
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,17 @@
1
+ require 'anbt-sql-formatter/formatter'
2
+
3
+ module SqlTracer
4
+ class Helper
5
+ def self.format_sql_enabled?
6
+ @format_sql_enabled ||= (UIConfig && UIConfig.get(:SQL_TRACER_FORMAT_SQL_ENABLED))
7
+ end
8
+
9
+ def self.format_stack_enabled?
10
+ @format_stack_enabled ||= (UIConfig && UIConfig.get(:SQL_TRACER_FORMAT_STACK_ENABLED))
11
+ end
12
+
13
+ def self.should_skip_lib?
14
+ @should_skip_lib ||= (UIConfig && UIConfig.get(:SQL_TRACER_SKIP_LIB)!=true)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ require 'anbt-sql-formatter/formatter'
2
+
3
+ module SqlTracer
4
+ module SqlLogger
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ alias_method :execute_without_sql_tracer, :execute
8
+
9
+ def execute(*args)
10
+ begin
11
+ sql = args.first
12
+ if sql =~ /^\s*(insert|update|delete)\s/i
13
+ Formatter.start_print
14
+ Formatter.print_sql(sql)
15
+ Formatter.print_backtrace(Thread.current.backtrace)
16
+ Formatter.print_tips
17
+ Formatter.end_print
18
+ end
19
+ rescue => e
20
+ Rails.logger.error "Failed to log sql in SqlTracer. Error: #{e.message}"
21
+ Rails.logger.error e.backtrace.join("\n")
22
+ end
23
+ execute_without_sql_tracer(*args)
24
+ end
25
+ end
26
+ end
27
+ end
data/lib/sql_tracer.rb CHANGED
@@ -1,28 +1,17 @@
1
- module SqlTracer
2
- module SqlLogger
3
-
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
-
8
- alias_method :execute_without_stack, :execute
1
+ require 'anbt-sql-formatter/formatter'
9
2
 
10
- def execute(*args)
11
- sql = args.first
12
- if sql =~ /^\s*(insert|update|delete)\s/i
13
- puts sql
14
- puts Thread.current.backtrace.select { |path| !path.include?('/.rvm/gems/') }
15
- end
16
- execute_without_stack(*args)
17
- end
18
- end
19
- end
3
+ module SqlTracer
4
+ autoload :SqlLogger, 'sql_tracer/sql_logger'
5
+ autoload :Helper, 'sql_tracer/helper'
6
+ autoload :Formatter, 'sql_tracer/formatter'
20
7
  end
21
8
 
22
- ActiveSupport.on_load(:active_record) do
23
- begin
24
- require 'active_record/connection_adapters/mysql2_adapter'
25
- ActiveRecord::ConnectionAdapters::Mysql2Adapter.send(:include, SqlTracer::SqlLogger)
26
- rescue LoadError, NameError
27
- end
9
+ # why does not work when wrapped in block ActiveSupport.on_load(:active_record) do
10
+ begin
11
+ require 'active_record/connection_adapters/mysql2_adapter'
12
+ ActiveRecord::ConnectionAdapters::Mysql2Adapter.send(:include, SqlTracer::SqlLogger)
13
+ rescue LoadError, NameError => e
14
+ Rails.logger.error('Failed to injuect SqlTracer to ActiveRecord due to :' + e.message)
28
15
  end
16
+
17
+
metadata CHANGED
@@ -1,16 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sql_tracer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
- - UI
7
+ - xiaoye
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-15 00:00:00.000000000 Z
12
- dependencies: []
13
- description: log sql and backtrace when execute sql
11
+ date: 2017-05-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: anbt-sql-formatter
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: log backtrace when sql is executed
14
28
  email:
15
29
  - eng-ui@freewheel.tv
16
30
  executables: []
@@ -18,6 +32,9 @@ extensions: []
18
32
  extra_rdoc_files: []
19
33
  files:
20
34
  - lib/sql_tracer.rb
35
+ - lib/sql_tracer/formatter.rb
36
+ - lib/sql_tracer/helper.rb
37
+ - lib/sql_tracer/sql_logger.rb
21
38
  homepage: http://git.dev.fwmrm.net/ui/ui
22
39
  licenses: []
23
40
  metadata: {}
@@ -40,5 +57,5 @@ rubyforge_project:
40
57
  rubygems_version: 2.4.3
41
58
  signing_key:
42
59
  specification_version: 4
43
- summary: UI Redis Framework Extension
60
+ summary: log backtrace when sql is executed
44
61
  test_files: []