mysql2_query_filter-plugin-casual_log 0.0.5 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 151fb6a5ddaf5e389c61faa4950b6ae678cbde29
4
- data.tar.gz: 9f24794cd590e62a6f61ffdc3f8cc1cbd109eae3
3
+ metadata.gz: 8c9a11dd7e3e1c153515f7a4856d9bf10ab836e8
4
+ data.tar.gz: 92ad092a5a754b212ea682bbbf45aa2bacd0f66f
5
5
  SHA512:
6
- metadata.gz: ab55ede1d3793d0f932f2a6b2900f6b35479da107a83c8373dadcdb26a9729f689fb605882d5430558896dcf1ebbfaf6932699db5c94c4987e7c099bf38eb149
7
- data.tar.gz: bdcea2c6c5c6ca2a4571e660447042dbd25e458224f510c3baca6712e5958b50ef3f9ca50b15ef96bbbe757754e7aef02d72b87e2f87ca3f32a39b552057e57e
6
+ metadata.gz: 97a27c7ff048ff3fb148a05b33d03fad26f2676cc78d20c133b3308aeb74fd029550a4d1f69d7cb0309b2a6fe5308d76c775eadfa123075abff8f688c31a2cff
7
+ data.tar.gz: 1823dd345272de64cc1db24302c9cac952c71565454001777ae5a49159c8a156eda3c5fbcae3d99e1b3f5461dc986f371106ef39d5179921a7ce92483c5bde7a
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --require spec_helper
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.5
5
+ - 2.2.1
6
+ script:
7
+ - bundle install
8
+ - bundle exec rake
data/README.md CHANGED
@@ -1,8 +1,12 @@
1
1
  # Mysql2QueryFilter::Plugin::CasualLog
2
2
 
3
3
  Plug-in that colorize the bad query for [Mysql2QueryFilter](https://github.com/winebarrel/mysql2_query_filter).
4
+ It is porting of [MySQLCasualLog.pm](https://gist.github.com/kamipo/839e8a5b6d12bddba539).
4
5
 
5
- Porting of [MySQLCasualLog.pm](https://gist.github.com/kamipo/839e8a5b6d12bddba539).
6
+ see http://kamipo.github.io/talks/20140711-mysqlcasual6
7
+
8
+ [![Gem Version](https://badge.fury.io/rb/mysql2_query_filter-plugin-casual_log.svg)](http://badge.fury.io/rb/mysql2_query_filter-plugin-casual_log)
9
+ [![Build Status](https://travis-ci.org/winebarrel/mysql2_query_filter-plugin-casual_log.svg?branch=master)](https://travis-ci.org/winebarrel/mysql2_query_filter-plugin-casual_log)
6
10
 
7
11
  ## Installation
8
12
 
@@ -26,10 +30,10 @@ Or install it yourself as:
26
30
  require 'mysql2_query_filter'
27
31
 
28
32
  Mysql2QueryFilter.configure do |filter|
29
- filter.plugin :casual_log, database: 'mysql'
33
+ filter.plugin :casual_log #, client: Mysql2::Client.new(...)
30
34
  end
31
35
 
32
- Mysql2QueryFilter.enable
36
+ Mysql2QueryFilter.enable!
33
37
 
34
38
  client = Mysql2::Client.new(host: 'localhost', username: 'root', database: 'mysql')
35
39
  client.query('SELECT * FROM user')
@@ -48,7 +52,3 @@ client.query('SELECT * FROM user')
48
52
  ```
49
53
 
50
54
  ![](http://i.gyazo.com/66a769f30eab5ff56655977d42a30f4d.png)
51
-
52
- ## Retated links
53
-
54
- * http://kamipo.github.io/talks/20140711-mysqlcasual6
data/Rakefile CHANGED
@@ -1 +1,5 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+ task :default => :spec
@@ -3,7 +3,7 @@ require 'mysql2_query_filter'
3
3
  require 'term/ansicolor'
4
4
 
5
5
  module Mysql2QueryFilter::Plugin
6
- class CasualLog < Filter
6
+ class CasualLog < Mysql2QueryFilter::Base
7
7
  Mysql2QueryFilter::Plugin.register(:casual_log, self)
8
8
 
9
9
  REGEXPS = {
@@ -31,33 +31,46 @@ module Mysql2QueryFilter::Plugin
31
31
 
32
32
  def initialize(options)
33
33
  super
34
- @out = @options.delete(:out) || $stderr
35
- @matcher = @options.delete(:match) || proc {|sql, query_options| true }
36
- @client = Mysql2::Client.new(@options)
34
+ @out = @options[:out] || $stderr
35
+ @matcher = @options[:match] || proc {|sql, client| true }
36
+ @client = @options[:client]
37
37
  end
38
38
 
39
- def filter(sql, query_options)
40
- if sql =~ /\A\s*SELECT\b/i and @matcher.call(sql, query_options)
39
+ def filter(sql, client)
40
+ if sql =~ /\A\s*SELECT\b/i and @matcher.call(sql, client)
41
+ conn = @client || client
42
+ badquery = false
41
43
  explains = []
42
44
 
43
- @client.query("EXPLAIN #{sql}").each do |result|
44
- badquery = colorize_explain(result)
45
- explains << format_explain(sql, result) if badquery
45
+ conn.query("EXPLAIN #{sql}", :as => :hash).each_with_index do |result, i|
46
+ colorize_explain(result).tap {|bq| badquery ||= bq }
47
+ explains << format_explain(result, i + 1)
46
48
  end
47
49
 
48
- unless explains.empty?
49
- @out << "# #{sql}\n" + explains.join("\n") + "\n"
50
+ if badquery
51
+ query_options = conn.query_options.dup
52
+ query_options.delete(:password)
53
+
54
+ @out << <<-EOS
55
+ # Time: #{Time.now.strftime("%Y-%m-%d %H:%M:%S")}
56
+ # Query options: #{query_options.inspect}
57
+ # Query: #{sql}
58
+ #{explains.join("\n")}
59
+ EOS
50
60
  end
51
61
  end
62
+ rescue => e
63
+ $stderr.puts colored([e.message, e.backtrace.first].join("\n"))
52
64
  end
53
65
 
54
66
  private
55
67
 
56
- def colorize_explain(explain)
68
+ def colorize_explain(explain_result)
57
69
  badquery = false
58
70
 
59
71
  REGEXPS.each do |key, regexp|
60
- value = explain[key] || ''
72
+ value = explain_result[key] ||= 'NULL'
73
+ value = value.to_s
61
74
 
62
75
  value.gsub!(regexp) do |m|
63
76
  badquery = true
@@ -72,15 +85,15 @@ module Mysql2QueryFilter::Plugin
72
85
  Term::ANSIColor.red(Term::ANSIColor.bold(str))
73
86
  end
74
87
 
75
- def format_explain(sql, explain)
76
- message = "---\n"
88
+ def format_explain(explain, i)
89
+ message = "*************************** #{i}. row ***************************\n"
77
90
  max_key_length = explain.keys.map(&:length).max
78
91
 
79
92
  explain.each do |key, value|
80
93
  message << "%*s: %s\n" % [max_key_length, key, value]
81
94
  end
82
95
 
83
- message
96
+ message.chomp
84
97
  end
85
- end
86
- end
98
+ end # CasualLog
99
+ end # Mysql2QueryFilter::Plugin
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  Gem::Specification.new do |spec|
3
3
  spec.name = 'mysql2_query_filter-plugin-casual_log'
4
- spec.version = '0.0.5'
4
+ spec.version = '0.1.1'
5
5
  spec.authors = ['Genki Sugawara']
6
6
  spec.email = ['sgwr_dts@yahoo.co.jp']
7
7
  spec.summary = %q{Plug-in that colorize the bad query for Mysql2QueryFilter.}
@@ -14,8 +14,10 @@ Gem::Specification.new do |spec|
14
14
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
15
  spec.require_paths = ['lib']
16
16
 
17
- spec.add_dependency 'mysql2_query_filter'
17
+ spec.add_dependency 'mysql2_query_filter', '>= 0.1.1'
18
18
  spec.add_dependency 'term-ansicolor'
19
19
  spec.add_development_dependency 'bundler'
20
20
  spec.add_development_dependency 'rake'
21
+ spec.add_development_dependency 'rspec', '>= 3.0.0'
22
+ spec.add_development_dependency "timecop"
21
23
  end
@@ -0,0 +1,47 @@
1
+ describe Mysql2QueryFilter::Plugin::CasualLog do
2
+ let(:client) { Mysql2::Client.new(host: "localhost", username: "root", database: "mysql") }
3
+ let(:today) { Time.parse("2015-05-15 20:15:55 +0000") }
4
+ let(:out) { StringIO.new }
5
+
6
+ before do
7
+ Mysql2QueryFilter.configure do |filter|
8
+ filter.plugin :casual_log, out: out
9
+ end
10
+
11
+ Timecop.freeze(today) do
12
+ client.query(sql)
13
+ end
14
+ end
15
+
16
+ subject { out.string.sub(/Query options:.*/, "Query options:").sub(/rows: \d+/, "rows:") }
17
+
18
+ context "when bad query" do
19
+ let(:sql) { "select * from user" }
20
+
21
+ let(:explain) do
22
+ <<-EOS
23
+ # Time: 2015-05-15 20:15:55
24
+ # Query options:
25
+ # Query: select * from user
26
+ *************************** 1. row ***************************
27
+ id: 1
28
+ select_type: SIMPLE
29
+ table: user
30
+ type: #{red bold "ALL"}
31
+ possible_keys: #{red bold "NULL"}
32
+ key: #{red bold "NULL"}
33
+ key_len:\s
34
+ ref:\s
35
+ rows:
36
+ Extra:\s
37
+ EOS
38
+ end
39
+
40
+ it { is_expected.to eq explain }
41
+ end
42
+
43
+ context "when good query" do
44
+ let(:sql) { "select 1 from user where Host = 'localhost'" }
45
+ it { is_expected.to eq "" }
46
+ end
47
+ end
@@ -0,0 +1,17 @@
1
+ require 'mysql2_query_filter/plugin/casual_log'
2
+ require 'stringio'
3
+ require "time"
4
+ require "timecop"
5
+
6
+ ENV["TZ"] = "UTC"
7
+ include Term::ANSIColor
8
+
9
+ RSpec.configure do |config|
10
+ config.before(:all) do
11
+ Mysql2QueryFilter.enable!
12
+ end
13
+
14
+ config.before(:each) do
15
+ Mysql2QueryFilter.clear!
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mysql2_query_filter-plugin-casual_log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-09 00:00:00.000000000 Z
11
+ date: 2015-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2_query_filter
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: term-ansicolor
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: timecop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: Plug-in that colorize the bad query for Mysql2QueryFilter.
70
98
  email:
71
99
  - sgwr_dts@yahoo.co.jp
@@ -74,12 +102,16 @@ extensions: []
74
102
  extra_rdoc_files: []
75
103
  files:
76
104
  - .gitignore
105
+ - .rspec
106
+ - .travis.yml
77
107
  - Gemfile
78
108
  - LICENSE.txt
79
109
  - README.md
80
110
  - Rakefile
81
111
  - lib/mysql2_query_filter/plugin/casual_log.rb
82
112
  - mysql2_query_filter-plugin-casual_log.gemspec
113
+ - spec/mysql2_query_filter-plugin-casual_log_spec.rb
114
+ - spec/spec_helper.rb
83
115
  homepage: https://github.com/winebarrel/mysql2_query_filter-plugin-casual_log
84
116
  licenses:
85
117
  - MIT
@@ -104,4 +136,6 @@ rubygems_version: 2.0.14
104
136
  signing_key:
105
137
  specification_version: 4
106
138
  summary: Plug-in that colorize the bad query for Mysql2QueryFilter.
107
- test_files: []
139
+ test_files:
140
+ - spec/mysql2_query_filter-plugin-casual_log_spec.rb
141
+ - spec/spec_helper.rb