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 +4 -4
- data/lib/sql_tracer/formatter.rb +69 -0
- data/lib/sql_tracer/helper.rb +17 -0
- data/lib/sql_tracer/sql_logger.rb +27 -0
- data/lib/sql_tracer.rb +13 -24
- metadata +23 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5134ce3a708e62d524bfe5fd28c2ce93657a964f
|
4
|
+
data.tar.gz: 12db129a6e5c27b178712cc0ec85ecc40ba892ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- xiaoye
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
12
|
-
dependencies:
|
13
|
-
|
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:
|
60
|
+
summary: log backtrace when sql is executed
|
44
61
|
test_files: []
|