fluent-plugin-mysql-appender 0.3.5 → 0.3.6
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/example/mysql_multi_table_to_tresure_data.md +2 -0
- data/fluent-plugin-mysql-appender.gemspec +2 -1
- data/lib/fluent/plugin/in_mysql_appender_multi.rb +22 -12
- data/setup_sample_db.sql +14 -0
- data/test/helper.rb +6 -0
- data/test/plugin/test_in_mysql_appender_multi.rb +52 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c19611c88c6fc54e11e3e6c0e8febc24b0f36050
|
4
|
+
data.tar.gz: 245ffee5532f8c5b5ce032801ebf77bb8b46a031
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51ddd238c9f8e72ad588db213f67b8d313fad3f045b28bfcf3207623763b1f214cdb457f0236495b9ec818bfc60b0fa00aa2c704355e64ebfbba2aa79d783e5e
|
7
|
+
data.tar.gz: 0fcef13e7bde505fbba8203dfdeac464d643191a831325a38fe009c49b73cf45f98294c2a84ce98ce251ad7c72fa2a58efc27603722bfbcea6d6557082811011
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
spec.name = "fluent-plugin-mysql-appender"
|
4
|
-
spec.version = "0.3.
|
4
|
+
spec.version = "0.3.6"
|
5
5
|
spec.authors = ["TERASAKI Tsuyoshi"]
|
6
6
|
spec.email = ["tsuyoshi_terasaki@realworld.jp"]
|
7
7
|
|
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "rake"
|
22
22
|
spec.add_development_dependency "test-unit"
|
23
|
+
spec.add_development_dependency "test-unit-rr"
|
23
24
|
end
|
@@ -18,7 +18,7 @@ module Fluent
|
|
18
18
|
config_param :port, :integer, :default => 3306
|
19
19
|
config_param :username, :string, :default => 'root'
|
20
20
|
config_param :password, :string, :default => nil, :secret => true
|
21
|
-
config_param :database, :string, :default =>
|
21
|
+
config_param :database, :string, :default => 'sample_db'
|
22
22
|
config_param :encoding, :string, :default => 'utf8'
|
23
23
|
config_param :interval, :string, :default => '1m'
|
24
24
|
config_param :tag, :string, :default => 'appender_multi'
|
@@ -29,11 +29,11 @@ module Fluent
|
|
29
29
|
@interval = Config.time_value(@interval)
|
30
30
|
|
31
31
|
if @yaml_path.nil?
|
32
|
-
raise Fluent::ConfigError, "mysql_appender_multi: missing 'yaml_path' parameter
|
32
|
+
raise Fluent::ConfigError, "mysql_appender_multi: missing 'yaml_path' parameter."
|
33
33
|
end
|
34
34
|
|
35
35
|
if !File.exist?(@yaml_path)
|
36
|
-
raise Fluent::ConfigError, "mysql_appender_multi:
|
36
|
+
raise Fluent::ConfigError, "mysql_appender_multi: No such file in 'yaml_path'."
|
37
37
|
end
|
38
38
|
|
39
39
|
if @tag.nil?
|
@@ -66,8 +66,9 @@ module Fluent
|
|
66
66
|
def poll(config)
|
67
67
|
begin
|
68
68
|
tag = format_tag(config)
|
69
|
+
delay = Config.time_value(config['delay'] || 0)
|
69
70
|
@mutex.synchronize {
|
70
|
-
$log.info "mysql_replicator_multi: polling start. :tag=>#{tag}"
|
71
|
+
$log.info "mysql_replicator_multi: polling start. :tag=>#{tag} :delay=>#{delay}"
|
71
72
|
}
|
72
73
|
con = get_connection()
|
73
74
|
last_id = config['last_id']
|
@@ -76,21 +77,22 @@ module Fluent
|
|
76
77
|
start_time = Time.now
|
77
78
|
rows, con = query(get_query(config, last_id), con)
|
78
79
|
rows.each_with_index do |row, index|
|
80
|
+
if !config['entry_time'].nil? then
|
81
|
+
entry_time = get_time(row[config['entry_time']])
|
82
|
+
if (Time.now - delay) < entry_time then
|
83
|
+
last_id = row[config['primary_key']]
|
84
|
+
break
|
85
|
+
end
|
86
|
+
end
|
79
87
|
if config['time_column'].nil? then
|
80
88
|
td_time = Engine.now
|
81
89
|
else
|
82
|
-
|
83
|
-
td_time = row[config['time_column']].to_i
|
84
|
-
else
|
85
|
-
td_time = Time.parse(row[config['time_column']].to_s).to_i
|
86
|
-
end
|
90
|
+
td_time = get_time(row[config['time_column']]).to_i
|
87
91
|
end
|
88
92
|
row.each {|k, v| row[k] = v.to_s if v.is_a?(Time) || v.is_a?(Date) || v.is_a?(BigDecimal)}
|
89
93
|
router.emit(tag, td_time, row)
|
90
94
|
rows_count += 1
|
91
|
-
|
92
|
-
last_id = row[config['primary_key']]
|
93
|
-
end
|
95
|
+
last_id = row[config['primary_key']]
|
94
96
|
end
|
95
97
|
con.close
|
96
98
|
elapsed_time = sprintf("%0.02f", Time.now - start_time)
|
@@ -148,5 +150,13 @@ module Fluent
|
|
148
150
|
retry
|
149
151
|
end
|
150
152
|
end
|
153
|
+
|
154
|
+
def get_time(in_time)
|
155
|
+
if in_time.kind_of?(Time) then
|
156
|
+
in_time
|
157
|
+
else
|
158
|
+
Time.parse(in_time.to_s)
|
159
|
+
end
|
160
|
+
end
|
151
161
|
end
|
152
162
|
end
|
data/setup_sample_db.sql
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
create database sample_db;
|
2
|
+
create table test_tbl1 (
|
3
|
+
id int auto_increment,
|
4
|
+
column1 varchar(10),
|
5
|
+
column2 varchar(10),
|
6
|
+
created_at timestamp default current_timestamp,
|
7
|
+
primary key(id)
|
8
|
+
);
|
9
|
+
|
10
|
+
insert into test_tbl1 (column1, column2) value ('1','2');
|
11
|
+
insert into test_tbl1 (column1, column2) value ('3','4');
|
12
|
+
insert into test_tbl1 (column1, column2) value ('5','6');
|
13
|
+
insert into test_tbl1 (column1, column2) value ('7','8');
|
14
|
+
|
data/test/helper.rb
CHANGED
@@ -7,12 +7,18 @@ rescue Bundler::BundlerError => e
|
|
7
7
|
$stderr.puts "Run `bundle install` to install missing gems"
|
8
8
|
exit e.status_code
|
9
9
|
end
|
10
|
+
|
10
11
|
require 'test/unit'
|
12
|
+
require 'test/unit/rr'
|
13
|
+
require 'yaml'
|
11
14
|
|
12
15
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
13
16
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
17
|
+
|
14
18
|
require 'fluent/test'
|
15
19
|
require 'fluent/input'
|
20
|
+
require 'fluent/log'
|
21
|
+
|
16
22
|
unless ENV.has_key?('VERBOSE')
|
17
23
|
nulllogger = Object.new
|
18
24
|
nulllogger.instance_eval {|obj|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class MysqlAppenderMultiInputTest < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
Fluent::Test.setup
|
6
|
+
# stubs
|
7
|
+
stub(File).exist?{:true}
|
8
|
+
end
|
9
|
+
|
10
|
+
CONFIG = %[
|
11
|
+
host localhost
|
12
|
+
interval 30
|
13
|
+
yaml_path hoge
|
14
|
+
]
|
15
|
+
|
16
|
+
def create_driver(conf=CONFIG)
|
17
|
+
Fluent::Test::InputTestDriver.new(Fluent::MysqlAppenderMultiInput).configure(conf)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_configure
|
21
|
+
# run test
|
22
|
+
d = create_driver
|
23
|
+
assert_equal 'localhost', d.instance.host
|
24
|
+
assert_equal 30, d.instance.interval
|
25
|
+
assert_equal 'appender_multi', d.instance.tag
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_polling
|
29
|
+
str = <<EOS
|
30
|
+
- table_name: test_tbl1
|
31
|
+
primary_key: id
|
32
|
+
time_column: created_at
|
33
|
+
limit: 1000
|
34
|
+
columns:
|
35
|
+
- id
|
36
|
+
- column1
|
37
|
+
- column2
|
38
|
+
- created_at
|
39
|
+
last_id: -1
|
40
|
+
entry_time: created_at
|
41
|
+
delay: 3h
|
42
|
+
td_database: sample_datasets
|
43
|
+
EOS
|
44
|
+
conf = YAML.load(str)
|
45
|
+
stub(YAML).load_file{conf}
|
46
|
+
|
47
|
+
d = create_driver
|
48
|
+
d.run do
|
49
|
+
sleep 2
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-mysql-appender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TERASAKI Tsuyoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: test-unit-rr
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: Simple incremental id's insert.
|
70
84
|
email:
|
71
85
|
- tsuyoshi_terasaki@realworld.jp
|
@@ -84,8 +98,10 @@ files:
|
|
84
98
|
- fluent-plugin-mysql-appender.gemspec
|
85
99
|
- lib/fluent/plugin/in_mysql_appender.rb
|
86
100
|
- lib/fluent/plugin/in_mysql_appender_multi.rb
|
101
|
+
- setup_sample_db.sql
|
87
102
|
- test/helper.rb
|
88
103
|
- test/plugin/test_in_mysql_appender.rb
|
104
|
+
- test/plugin/test_in_mysql_appender_multi.rb
|
89
105
|
homepage: https://github.com/realworld-jp/fluent-plugin-mysql-appender
|
90
106
|
licenses:
|
91
107
|
- MIT
|
@@ -113,3 +129,4 @@ summary: Fluentd input plugin to insert from MySQL database server.
|
|
113
129
|
test_files:
|
114
130
|
- test/helper.rb
|
115
131
|
- test/plugin/test_in_mysql_appender.rb
|
132
|
+
- test/plugin/test_in_mysql_appender_multi.rb
|