logstash-input-jdbc 4.1.1 → 4.1.2

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: 7757853b90560fd7131dc285e37a5ac28a21eaf3
4
- data.tar.gz: b6437464d388b823fae8a83bc87d744335ba702f
3
+ metadata.gz: a78d72e92aa01bf8891190bf7f03fb389f26b59f
4
+ data.tar.gz: 014325a08ad778dcc57aafeca4c45978be18abf7
5
5
  SHA512:
6
- metadata.gz: 255dfb0c17325a467a418a2a74c3d1a003f52cb9a845fe20aaa95f81cd5c1724f105943e5091de6ba470f21b85ff0a59fe27665b95edf31d7d20f0d532210607
7
- data.tar.gz: c39dfd89ae3700a4e6259b8fe42b86e134a1f66fd56aa8f5d8714524d1899cb247b960ae8447c8caedd698ea20844c8b03ea9e7cb58e320b531f60b1f1551a0c
6
+ metadata.gz: 8d4841251922f7b763a4972e5cd47b8b499f419b4c4771656dea5a769c0bc9484eda5591073b37b34ba46c262b27dfef5b217e8a559aa731c80886bc29f9f9a8
7
+ data.tar.gz: c9913e1d5b4b686d085d9875b38a7a27837ba8a327fa3cd4ce326bf5ffab5e24d630cd3a3184e5aea4a6f8a871f338d0a8d249db78295c8e8933d0c645e4cc72
@@ -1,36 +1,47 @@
1
+ ## 4.1.2
2
+ - [internal] Removed docker dependencies for testing
3
+
1
4
  ## 4.1.1
2
- - Relax constraint on logstash-core-plugin-api to >= 1.60 <= 2.99
5
+ - Relax constraint on logstash-core-plugin-api to >= 1.60 <= 2.99
3
6
 
4
7
  ## 4.1.0
5
- - Add an option to select the encoding data should be transform from,
6
- this will make sure all strings read from the jdbc connector are
7
- noremalized to be UTF-8 so no causing issues with later filters in LS.
8
+ - Add an option to select the encoding data should be transform from,
9
+ this will make sure all strings read from the jdbc connector are
10
+ noremalized to be UTF-8 so no causing issues with later filters in LS.
11
+
8
12
  ## 4.0.1
9
- - Republish all the gems under jruby.
13
+ - Republish all the gems under jruby.
14
+
10
15
  ## 4.0.0
11
- - Update the plugin to the version 2.0 of the plugin api, this change is required for Logstash 5.0 compatibility. See https://github.com/elastic/logstash/issues/5141
16
+ - Update the plugin to the version 2.0 of the plugin api, this change is required for Logstash 5.0 compatibility. See https://github.com/elastic/logstash/issues/5141
17
+
12
18
  # 3.0.3
13
- - Added feature to read password from external file (#120)
19
+ - Added feature to read password from external file (#120)
20
+
14
21
  # 3.0.2
15
- - Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
22
+ - Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
23
+
16
24
  # 3.0.1
17
- - New dependency requirements for logstash-core for the 5.0 release
25
+ - New dependency requirements for logstash-core for the 5.0 release
26
+ - feature: Added configurable support for retrying database connection
27
+ failures.
28
+
18
29
  ## 3.0.0
19
- - [#57](https://github.com/logstash-plugins/logstash-input-jdbc/issues/57) New feature: Allow tracking by a column value rather than by last run time. **This is a breaking change**, as users may be required to change from using `sql_last_start` to use `sql_last_value` in their queries. No other changes are required if you've been using time-based queries. See the documentation if you wish to use an incremental column value to track updates to your tables.
30
+ - [#57](https://github.com/logstash-plugins/logstash-input-jdbc/issues/57) New feature: Allow tracking by a column value rather than by last run time. **This is a breaking change**, as users may be required to change from using `sql_last_start` to use `sql_last_value` in their queries. No other changes are required if you've been using time-based queries. See the documentation if you wish to use an incremental column value to track updates to your tables.
20
31
 
21
32
  ## 2.1.1
22
- - [#44](https://github.com/logstash-plugins/logstash-input-jdbc/issues/44) add option to control the lowercase or not, of the column names.
33
+ - [#44](https://github.com/logstash-plugins/logstash-input-jdbc/issues/44) add option to control the lowercase or not, of the column names.
23
34
 
24
35
  ## 2.1.0
25
- - [#85](https://github.com/logstash-plugins/logstash-input-jdbc/issues/85) make the jdbc_driver_library accept a list of elements separated by commas as in some situations we might need to load more than one jar/lib.
26
- - [#89](https://github.com/logstash-plugins/logstash-input-jdbc/issues/89) Set application timezone for cases where time fields in data have no timezone.
36
+ - [#85](https://github.com/logstash-plugins/logstash-input-jdbc/issues/85) make the jdbc_driver_library accept a list of elements separated by commas as in some situations we might need to load more than one jar/lib.
37
+ - [#89](https://github.com/logstash-plugins/logstash-input-jdbc/issues/89) Set application timezone for cases where time fields in data have no timezone.
27
38
 
28
39
  ## 2.0.5
29
- - [#77](https://github.com/logstash-plugins/logstash-input-jdbc/issues/77) Time represented as RubyTime and not as Logstash::Timestamp
40
+ - [#77](https://github.com/logstash-plugins/logstash-input-jdbc/issues/77) Time represented as RubyTime and not as Logstash::Timestamp
30
41
 
31
42
  ## 2.0.4
32
- - [#70](https://github.com/logstash-plugins/logstash-input-jdbc/pull/70) prevents multiple queries from being run at the same time
33
- - [#69](https://github.com/logstash-plugins/logstash-input-jdbc/pull/69) pass password as string to Sequel
43
+ - [#70](https://github.com/logstash-plugins/logstash-input-jdbc/pull/70) prevents multiple queries from being run at the same time
44
+ - [#69](https://github.com/logstash-plugins/logstash-input-jdbc/pull/69) pass password as string to Sequel
34
45
 
35
46
  ## 2.0.3
36
47
  - Added ability to configure timeout
@@ -41,5 +52,5 @@
41
52
  instead of using Thread.raise on the plugins' threads. Ref: https://github.com/elastic/logstash/pull/3895
42
53
  - Dependency on logstash-core update to 2.0
43
54
 
44
- * 1.0.0
45
- - Initial release
55
+ ## 1.0.0
56
+ - Initial release
@@ -151,6 +151,9 @@ class LogStash::Inputs::Jdbc < LogStash::Inputs::Base
151
151
  # If tracking column value rather than timestamp, the column whose value is to be tracked
152
152
  config :tracking_column, :validate => :string
153
153
 
154
+ # Type of tracking column. Currently only "numeric" and "timestamp"
155
+ config :tracking_column_type, :validate => ['numeric', 'timestamp'], :default => 'numeric'
156
+
154
157
  # Whether the previous run state should be preserved
155
158
  config :clean_run, :validate => :boolean, :default => false
156
159
 
@@ -183,6 +186,7 @@ class LogStash::Inputs::Jdbc < LogStash::Inputs::Base
183
186
  public
184
187
 
185
188
  def register
189
+ @logger = self.logger
186
190
  require "rufus/scheduler"
187
191
  prepare_jdbc_connection
188
192
 
@@ -8,8 +8,6 @@ require "date"
8
8
  # for potential reuse in other plugins (input/output)
9
9
  module LogStash::PluginMixins::Jdbc
10
10
 
11
- @logger = Cabin::Channel.get(LogStash)
12
-
13
11
  # This method is called when someone includes this module
14
12
  def self.included(base)
15
13
  # Add these methods to the 'base' given.
@@ -183,7 +181,12 @@ module LogStash::PluginMixins::Jdbc
183
181
  @database.identifier_output_method = :to_s
184
182
  end
185
183
  if @use_column_value
186
- @sql_last_value = 0
184
+ case @tracking_column_type
185
+ when "numeric"
186
+ @sql_last_value = 0
187
+ when "timestamp"
188
+ @sql_last_value = Time.at(0).utc
189
+ end
187
190
  else
188
191
  @sql_last_value = Time.at(0).utc
189
192
  end
@@ -208,12 +211,18 @@ module LogStash::PluginMixins::Jdbc
208
211
  query.each_page(@jdbc_page_size) do |paged_dataset|
209
212
  paged_dataset.each do |row|
210
213
  sql_last_value = get_column_value(row) if @use_column_value
214
+ if @tracking_column_type=="timestamp" and @use_column_value and sql_last_value.is_a?(DateTime)
215
+ sql_last_value=Time.parse(sql_last_value.to_s) # Coerce the timestamp to a `Time`
216
+ end
211
217
  yield extract_values_from(row)
212
218
  end
213
219
  end
214
220
  else
215
221
  query.each do |row|
216
222
  sql_last_value = get_column_value(row) if @use_column_value
223
+ if @tracking_column_type=="timestamp" and @use_column_value and sql_last_value.is_a?(DateTime)
224
+ sql_last_value=Time.parse(sql_last_value.to_s) # Coerce the timestamp to a `Time`
225
+ end
217
226
  yield extract_values_from(row)
218
227
  end
219
228
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-jdbc'
3
- s.version = '4.1.1'
3
+ s.version = '4.1.2'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "This example input streams a string at a definable interval."
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -28,5 +28,4 @@ Gem::Specification.new do |s|
28
28
  s.add_development_dependency 'logstash-devutils'
29
29
  s.add_development_dependency 'timecop'
30
30
  s.add_development_dependency 'jdbc-derby'
31
- s.add_development_dependency 'docker-api'
32
31
  end
@@ -463,6 +463,50 @@ describe LogStash::Inputs::Jdbc do
463
463
  end
464
464
  end
465
465
 
466
+ context "when iteratively running plugin#run with timestamp tracking column with column value" do
467
+ let(:mixin_settings) do
468
+ { "jdbc_user" => ENV['USER'], "jdbc_driver_class" => "org.apache.derby.jdbc.EmbeddedDriver",
469
+ "jdbc_connection_string" => "jdbc:derby:memory:testdb;create=true"
470
+ }
471
+ end
472
+
473
+ let(:settings) do
474
+ { "statement" => "SELECT num, created_at, custom_time FROM test_table WHERE custom_time > :sql_last_value",
475
+ "use_column_value" => true,
476
+ "tracking_column" => "custom_time",
477
+ "tracking_column_type" => "timestamp",
478
+ "last_run_metadata_path" => Stud::Temporary.pathname }
479
+ end
480
+
481
+ let(:nums) { [10, 20, 30, 40, 50] }
482
+ let(:times) {["2015-05-06 13:14:15","2015-05-07 13:14:15","2015-05-08 13:14:15","2015-05-09 13:14:15","2015-05-10 13:14:15"]}
483
+
484
+ before do
485
+ plugin.register
486
+ end
487
+
488
+ after do
489
+ plugin.stop
490
+ end
491
+
492
+ it "should successfully update sql_last_value" do
493
+ test_table = db[:test_table]
494
+
495
+ plugin.run(queue)
496
+ expect(plugin.instance_variable_get("@sql_last_value")).to eq(Time.parse("1970-01-01 00:00:00.000000000 +0000"))
497
+ test_table.insert(:num => nums[0], :created_at => Time.now.utc, :custom_time => times[0])
498
+ test_table.insert(:num => nums[1], :created_at => Time.now.utc, :custom_time => times[1])
499
+ plugin.run(queue)
500
+ expect(plugin.instance_variable_get("@sql_last_value").class).to eq(Time.parse(times[0]).class)
501
+ expect(plugin.instance_variable_get("@sql_last_value")).to eq(Time.parse(times[1]))
502
+ test_table.insert(:num => nums[2], :created_at => Time.now.utc, :custom_time => times[2])
503
+ test_table.insert(:num => nums[3], :created_at => Time.now.utc, :custom_time => times[3])
504
+ test_table.insert(:num => nums[4], :created_at => Time.now.utc, :custom_time => times[4])
505
+ plugin.run(queue)
506
+ expect(plugin.instance_variable_get("@sql_last_value")).to eq(Time.parse(times[4]))
507
+ end
508
+ end
509
+
466
510
  context "when iteratively running plugin#run with tracking_column and stored metadata" do
467
511
  let(:mixin_settings) do
468
512
  { "jdbc_user" => ENV['USER'], "jdbc_driver_class" => "org.apache.derby.jdbc.EmbeddedDriver",
@@ -821,8 +865,7 @@ describe LogStash::Inputs::Jdbc do
821
865
  let(:num_rows) { 5 }
822
866
 
823
867
  before do
824
- plugin.instance_variable_set("@logger", logger)
825
- allow(logger).to receive(:debug?)
868
+ allow(plugin.logger).to receive(:debug?)
826
869
  num_rows.times do
827
870
  db[:test_table].insert(:num => 1)
828
871
  end
@@ -834,10 +877,8 @@ describe LogStash::Inputs::Jdbc do
834
877
  plugin.stop
835
878
  end
836
879
 
837
- let(:logger) { double("logger") }
838
-
839
- it "should report the staments to logging" do
840
- expect(logger).to receive(:debug).with(kind_of(String)).once
880
+ it "should report the statements to logging" do
881
+ expect(plugin.logger).to receive(:debug).once
841
882
  plugin.run(queue)
842
883
  end
843
884
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-jdbc
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.1
4
+ version: 4.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-14 00:00:00.000000000 Z
11
+ date: 2016-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -142,20 +142,6 @@ dependencies:
142
142
  - - ">="
143
143
  - !ruby/object:Gem::Version
144
144
  version: '0'
145
- - !ruby/object:Gem::Dependency
146
- requirement: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- version: '0'
151
- name: docker-api
152
- prerelease: false
153
- type: :development
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- version: '0'
159
145
  description: This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program
160
146
  email: info@elastic.co
161
147
  executables: []
@@ -193,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
179
  version: '0'
194
180
  requirements: []
195
181
  rubyforge_project:
196
- rubygems_version: 2.6.3
182
+ rubygems_version: 2.4.8
197
183
  signing_key:
198
184
  specification_version: 4
199
185
  summary: This example input streams a string at a definable interval.