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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9f6408d1a7b224768ddef9852ce5f68344b15c7
4
- data.tar.gz: 628c15bf44d0d25a1495652f4bc5aa291dad8749
3
+ metadata.gz: c19611c88c6fc54e11e3e6c0e8febc24b0f36050
4
+ data.tar.gz: 245ffee5532f8c5b5ce032801ebf77bb8b46a031
5
5
  SHA512:
6
- metadata.gz: 0414ae7c3bb515fc587e1e950da5e543787c98721f33a950eb086ddfd8b6056724bdb157c9ff666dbb2632ed48ef8e8af337d9c16614415610972ecce2f92a6e
7
- data.tar.gz: a4813bb12472e8c40134dc46d8ae9e9e3983dda2c410ebac99277c4f2a8c847e20e17543bf0a5f8a0178a7e4f09ac77d17c0c2cab51f19c450429801b22a443e
6
+ metadata.gz: 51ddd238c9f8e72ad588db213f67b8d313fad3f045b28bfcf3207623763b1f214cdb457f0236495b9ec818bfc60b0fa00aa2c704355e64ebfbba2aa79d783e5e
7
+ data.tar.gz: 0fcef13e7bde505fbba8203dfdeac464d643191a831325a38fe009c49b73cf45f98294c2a84ce98ce251ad7c72fa2a58efc27603722bfbcea6d6557082811011
@@ -51,6 +51,8 @@ Sample "in_tables.yml" is below.
51
51
  - column2
52
52
  last_id: -1
53
53
  td_database: sample_datasets
54
+ entry_time: created_at # this column compare (now - delay) time
55
+ delay: 10s
54
56
 
55
57
  - table_name: test_tbl2
56
58
  primary_key: id
@@ -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.5"
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 => nil
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 or file not found."
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: 'yaml_path' No such file."
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
- if row[config['time_column']].kind_of?(Time) then
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
- if index == rows.size - 1
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
@@ -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.5
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-24 00:00:00.000000000 Z
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