fluent-plugin-mysql-appender 0.3.5 → 0.3.6

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: 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