logstash-filter-jdbc_static 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -2
  3. data/Gemfile +9 -0
  4. data/docs/index.asciidoc +577 -0
  5. data/lib/logstash-filter-jdbc_static_jars.rb +4 -4
  6. data/lib/logstash/filters/jdbc/basic_database.rb +15 -1
  7. data/lib/logstash/filters/jdbc/column.rb +1 -0
  8. data/lib/logstash/filters/jdbc/db_object.rb +4 -6
  9. data/lib/logstash/filters/jdbc/loader.rb +8 -3
  10. data/lib/logstash/filters/jdbc/loader_schedule.rb +30 -4
  11. data/lib/logstash/filters/jdbc/lookup.rb +1 -0
  12. data/lib/logstash/filters/jdbc/lookup_processor.rb +5 -6
  13. data/lib/logstash/filters/jdbc/lookup_result.rb +1 -0
  14. data/lib/logstash/filters/jdbc/read_write_database.rb +28 -16
  15. data/lib/logstash/filters/jdbc/repeating_load_runner.rb +2 -0
  16. data/lib/logstash/filters/jdbc/single_load_runner.rb +8 -5
  17. data/lib/logstash/filters/jdbc/validatable.rb +2 -5
  18. data/lib/logstash/filters/jdbc_static.rb +26 -7
  19. data/logstash-filter-jdbc_static.gemspec +7 -12
  20. data/spec/filters/jdbc/column_spec.rb +2 -2
  21. data/spec/filters/jdbc/loader_spec.rb +1 -0
  22. data/spec/filters/jdbc/read_only_database_spec.rb +26 -2
  23. data/spec/filters/jdbc/read_write_database_spec.rb +18 -17
  24. data/spec/filters/jdbc/repeating_load_runner_spec.rb +1 -1
  25. data/spec/filters/jdbc_static_spec.rb +95 -17
  26. data/spec/filters/shared_helpers.rb +3 -4
  27. data/vendor/jar-dependencies/{runtime-jars → org/apache/derby/derby/10.14.1.0}/derby-10.14.1.0.jar +0 -0
  28. data/vendor/jar-dependencies/{runtime-jars → org/apache/derby/derbyclient/10.14.1.0}/derbyclient-10.14.1.0.jar +0 -0
  29. metadata +22 -9
@@ -1,29 +1,23 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-filter-jdbc_static'
3
- s.version = '1.0.1'
4
- s.licenses = ['Apache License (2.0)']
3
+ s.version = '1.0.2'
4
+ s.licenses = ['Apache-2.0']
5
5
  s.summary = "This filter executes a SQL query to fetch a SQL query result, store it locally then use a second SQL query to update an event."
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"
7
7
  s.authors = ["Elastic"]
8
8
  s.email = 'info@elastic.co'
9
9
  s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
10
- # to fool jar_dependencies to mimic our other plugin gradle vendor script behaviour
11
- # the rake vendor task removes jars dir and jars downloaded to it
12
- s.require_paths = ["lib", "jars"]
10
+ s.require_paths = ["lib", "vendor/jar-dependencies"]
13
11
 
14
12
  # Files
15
- s.files = Dir['lib/**/*','vendor/**/*','spec/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
16
- # Tests
13
+ s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
14
+
15
+ # Tests
17
16
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
17
 
19
18
  # Special flag to let us know this is actually a logstash plugin
20
19
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
21
20
 
22
- derby_version = "10.14.1.0"
23
- s.requirements << "jar 'org.apache.derby:derby', '#{derby_version}'"
24
- s.requirements << "jar 'org.apache.derby:derbyclient', '#{derby_version}'"
25
- # we may need 'org.apache.derby:derbynet' in the future, marking this here
26
-
27
21
  s.add_development_dependency 'jar-dependencies', '~> 0.3'
28
22
 
29
23
  # Gem dependencies
@@ -34,5 +28,6 @@ Gem::Specification.new do |s|
34
28
  s.add_runtime_dependency 'rufus-scheduler'
35
29
 
36
30
  s.add_development_dependency 'logstash-devutils'
31
+ s.add_development_dependency 'timecop'
37
32
  s.add_development_dependency "childprocess"
38
33
  end
@@ -2,7 +2,7 @@
2
2
  require "logstash/devutils/rspec/spec_helper"
3
3
  require "logstash/filters/jdbc/column"
4
4
 
5
- describe LogStash::Filters::Jdbc::Column do
5
+ describe LogStash::Filters::Jdbc::Column do
6
6
  let(:invalid_messages) do
7
7
  [
8
8
  "The column options must be an array",
@@ -67,4 +67,4 @@ describe LogStash::Filters::Jdbc::Column do
67
67
  expect(instance.formatted_errors).to eq("")
68
68
  end
69
69
  end
70
- end
70
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require "logstash/devutils/rspec/spec_helper"
2
3
  require "logstash/filters/jdbc/loader"
3
4
 
@@ -8,13 +8,14 @@ module LogStash module Filters module Jdbc
8
8
  let(:db) { Sequel.connect('mock://mydb') }
9
9
  let(:connection_string) { "mock://mydb" }
10
10
  let(:driver_class) { "org.apache.derby.jdbc.EmbeddedDriver" }
11
- subject(:read_only_db) { described_class.create(connection_string, driver_class) }
11
+ let(:driver_library) { nil }
12
+ subject(:read_only_db) { described_class.create(connection_string, driver_class, driver_library) }
12
13
 
13
14
  describe "basic operations" do
14
15
  describe "initializing" do
15
16
  it "tests the connection with defaults" do
16
17
  expect(Sequel::JDBC).to receive(:load_driver).once.with(driver_class)
17
- expect(Sequel).to receive(:connect).once.with(connection_string, {:test => true}) #.and_return(db)
18
+ expect(Sequel).to receive(:connect).once.with(connection_string, {:test => true})
18
19
  expect(read_only_db.empty_record_set).to eq([])
19
20
  end
20
21
 
@@ -37,6 +38,29 @@ module LogStash module Filters module Jdbc
37
38
  end
38
39
  end
39
40
 
41
+ describe "multiple driver loading" do
42
+ before :each do
43
+ allow(Sequel::JDBC).to receive(:load_driver)
44
+ allow_any_instance_of(described_class).to receive(:make_driver_path_loadable)
45
+ end
46
+
47
+ context "using three drivers" do
48
+ it "makes all loadable" do
49
+ expect_any_instance_of(described_class).to receive(:make_driver_path_loadable).with(anything, "/foo/bar.jar")
50
+ expect_any_instance_of(described_class).to receive(:make_driver_path_loadable).with(anything, "/foo/baz.jar")
51
+ expect_any_instance_of(described_class).to receive(:make_driver_path_loadable).with(anything, "/foo/biz.jar")
52
+ described_class.create("mock://mydb", "a driver class", "/foo/bar.jar, /foo/baz.jar, /foo/biz.jar")
53
+ end
54
+ end
55
+
56
+ context "just one driver" do
57
+ it "makes one loadable" do
58
+ expect_any_instance_of(described_class).to receive(:make_driver_path_loadable).once.with(anything, "/foo/bar.jar")
59
+ described_class.create("mock://mydb", "a driver class", "/foo/bar.jar")
60
+ end
61
+ end
62
+ end
63
+
40
64
  describe "methods" do
41
65
  let(:dataset) { double("Sequel::Dataset") }
42
66
 
@@ -4,11 +4,13 @@ require "logstash-filter-jdbc_static_jars"
4
4
  require "logstash/util/password"
5
5
  require "logstash/filters/jdbc/db_object"
6
6
  require "logstash/filters/jdbc/read_write_database"
7
+ require "stud/temporary"
7
8
 
8
9
  module LogStash module Filters module Jdbc
9
10
  describe ReadWriteDatabase do
10
11
  let(:db) { Sequel.connect('mock://mydb') }
11
12
  let(:connection_string_regex) { /jdbc:derby:memory:\w+;create=true/ }
13
+ let(:temp_import_path_plugin) { Stud::Temporary.pathname }
12
14
  subject(:read_write_db) { described_class.create }
13
15
 
14
16
  describe "basic operations" do
@@ -26,8 +28,8 @@ module LogStash module Filters module Jdbc
26
28
  user = "a user"
27
29
  password = Util::Password.new("secret")
28
30
  expect(::Sequel::JDBC).to receive(:load_driver).once.with("a driver class")
29
- expect(::Sequel).to receive(:connect).once.with(connection_str, {:user => user, :password => password.value, :test => true}).and_return(db)
30
- expect(::Sequel).to receive(:connect).once.with(connection_str, {:user => user, :password => password.value}).and_return(db)
31
+ expect(::Sequel).to receive(:connect).once.with(connection_str, {:user => user, :password => password.value, :test => true}).and_return(db)
32
+ expect(::Sequel).to receive(:connect).once.with(connection_str, {:user => user, :password => password.value}).and_return(db)
31
33
  described_class.create(connection_str, "a driver class", nil, user, password)
32
34
  end
33
35
  end
@@ -37,36 +39,35 @@ module LogStash module Filters module Jdbc
37
39
  let(:loaders) { [] }
38
40
  let(:loader) { double("Loader") }
39
41
  let(:table_name) { "users" }
40
- let(:temp_name) { "users_temp" }
41
42
  let(:random_table_name) { "foobarbaz" }
43
+ let(:multi_insert_sql) { "INSERT VALUES (1, 2, 3)" }
42
44
 
43
45
  before(:each) do
46
+ FileUtils.mkdir_p(temp_import_path_plugin)
44
47
  allow(::Sequel::JDBC).to receive(:load_driver)
48
+ # allow(::Sequel).to receive(:connect).twice.and_return(db)
45
49
  allow(::Sequel).to receive(:connect).twice.and_return(db)
46
- allow(loader).to receive(:fetch).and_return([1,2,3])
50
+ allow(loader).to receive(:fetch).and_return([{:a => 1, :b => 2, :c => 3}])
47
51
  allow(loader).to receive(:table).and_return(table_name)
48
- allow(loader).to receive(:temp_table).and_return(temp_name)
52
+ allow(loader).to receive(:id).and_return("some_id")
53
+ allow(loader).to receive(:staging_directory).and_return(temp_import_path_plugin)
49
54
  allow(described_class).to receive(:random_name).and_return(random_table_name)
50
55
  loaders.push(loader)
51
56
  end
52
57
 
53
58
  it "the populate_all method fills a local_db from the dataset" do
54
- expect(db).to receive(:[]).with(loader.temp_table).exactly(2).and_return(dataset)
55
- expect(dataset).to receive(:multi_insert).once.with([1,2,3])
56
- expect(db).to receive(:rename_table).once.with(temp_name, random_table_name)
57
- expect(db).to receive(:rename_table).once.with(table_name, temp_name)
58
- expect(db).to receive(:rename_table).once.with(random_table_name, table_name)
59
- expect(dataset).to receive(:truncate).once
59
+ expect(db).to receive(:[]).with(loader.table).once.and_return(dataset)
60
+ expect(dataset).to receive(:literal).and_return(1.to_s, 2.to_s, 3.to_s)
61
+ import_file_path = ::File.join(temp_import_path_plugin, loader.table)
62
+ expect(db).to receive(:execute_ddl).once.with("CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'#{loader.table.upcase}','#{import_file_path}',null,'''',null,1)")
60
63
  read_write_db.populate_all(loaders)
61
64
  end
62
65
 
63
66
  it "the repopulate_all method fills a local_db from the dataset" do
64
- expect(db).to receive(:[]).with(loader.temp_table).exactly(2).and_return(dataset)
65
- expect(dataset).to receive(:multi_insert).once.with([1,2,3])
66
- expect(db).to receive(:rename_table).once.with(temp_name, random_table_name)
67
- expect(db).to receive(:rename_table).once.with(table_name, temp_name)
68
- expect(db).to receive(:rename_table).once.with(random_table_name, table_name)
69
- expect(dataset).to receive(:truncate).once
67
+ expect(db).to receive(:[]).with(loader.table).once.and_return(dataset)
68
+ expect(dataset).to receive(:literal).and_return(1.to_s, 2.to_s, 3.to_s)
69
+ import_file_path = ::File.join(temp_import_path_plugin, loader.table)
70
+ expect(db).to receive(:execute_ddl).once.with("CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'#{loader.table.upcase}','#{import_file_path}',null,'''',null,1)")
70
71
  read_write_db.repopulate_all(loaders)
71
72
  end
72
73
 
@@ -21,4 +21,4 @@ module LogStash module Filters module Jdbc
21
21
  end
22
22
  end
23
23
  end
24
- end end end
24
+ end end end
@@ -3,12 +3,25 @@ require "logstash/devutils/rspec/spec_helper"
3
3
  require "logstash/filters/jdbc_static"
4
4
  require "sequel"
5
5
  require "sequel/adapters/jdbc"
6
+ require "stud/temporary"
7
+ require "timecop"
8
+
9
+ LogStash::Logging::Logger::configure_logging("ERROR")
6
10
 
7
11
  module LogStash module Filters
8
12
  describe JdbcStatic do
13
+
14
+ before(:all) do
15
+ @thread_abort = Thread.abort_on_exception
16
+ Thread.abort_on_exception = true
17
+ end
18
+
9
19
  let(:db1) { ::Sequel.connect("jdbc:derby:memory:testdb;create=true", :user=> nil, :password=> nil) }
10
- let(:test_loader) { "SELECT * FROM reference_table" }
11
- # let(:test_records) { db1[test_loader].all }
20
+ let(:loader_statement) { "SELECT ip, name, location FROM reference_table" }
21
+ let(:lookup_statement) { "SELECT * FROM servers WHERE ip LIKE :ip" }
22
+ let(:parameters_rhs) { "%%{[ip]}" }
23
+ let(:temp_import_path_plugin) { Stud::Temporary.pathname }
24
+ let(:temp_import_path_rspec) { Stud::Temporary.pathname }
12
25
 
13
26
  let(:local_db_objects) do
14
27
  [
@@ -21,15 +34,15 @@ module LogStash module Filters
21
34
  "loaders" => [
22
35
  {
23
36
  "id" =>"servers",
24
- "query" => "select ip, name, location from reference_table",
37
+ "query" => loader_statement,
25
38
  "local_table" => "servers"
26
39
  }
27
40
  ],
28
41
  "local_db_objects" => local_db_objects,
29
42
  "local_lookups" => [
30
43
  {
31
- "query" => "select * from servers WHERE ip LIKE :ip",
32
- "parameters" => {"ip" => "%%{[ip]}"},
44
+ "query" => lookup_statement,
45
+ "parameters" => {"ip" => parameters_rhs},
33
46
  "target" => "server"
34
47
  }
35
48
  ]
@@ -38,33 +51,98 @@ module LogStash module Filters
38
51
 
39
52
  let(:mixin_settings) do
40
53
  { "jdbc_user" => ENV['USER'], "jdbc_driver_class" => "org.apache.derby.jdbc.EmbeddedDriver",
41
- "jdbc_connection_string" => "jdbc:derby:memory:testdb;create=true" }
54
+ "jdbc_connection_string" => "jdbc:derby:memory:testdb;create=true",
55
+ "staging_directory" => temp_import_path_plugin
56
+ }
42
57
  end
58
+
59
+ let(:add_records) do
60
+ lambda do |fd|
61
+ fd.puts "'10.1.1.1', 'ldn-server-1', 'LDN-2-3-4'"
62
+ fd.puts "'10.2.1.1', 'nyc-server-1', 'NYC-5-2-8'"
63
+ fd.puts "'10.3.1.1', 'mv-serv''r-1', 'MV-9-6-4'"
64
+ end
65
+ end
66
+
43
67
  let(:plugin) { JdbcStatic.new(mixin_settings.merge(settings)) }
44
68
 
45
69
  before do
46
70
  db1.drop_table(:reference_table) rescue nil
47
- db1.create_table :reference_table do
71
+ db1.create_table(:reference_table) do
48
72
  String :ip
49
73
  String :name
50
74
  String :location
51
75
  end
52
- db1[:reference_table].insert(:ip => "10.1.1.1", :name => "ldn-server-1", :location => "LDN-2-3-4")
53
- db1[:reference_table].insert(:ip => "10.2.1.1", :name => "nyc-server-1", :location => "NYC-5-2-8")
54
- db1[:reference_table].insert(:ip => "10.3.1.1", :name => "mv-server-1", :location => "MV-9-6-4")
55
-
56
- plugin.register
76
+ ::File.open(temp_import_path_rspec, "w") do |fd|
77
+ add_records.call(fd)
78
+ end
79
+ import_cmd = "CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'REFERENCE_TABLE','#{temp_import_path_rspec}',null,'''',null,1)"
80
+ db1.execute_ddl(import_cmd)
57
81
  end
58
82
 
59
- after { plugin.stop }
60
-
61
83
  let(:event) { ::LogStash::Event.new("message" => "some text", "ip" => ipaddr) }
62
84
 
63
85
  let(:ipaddr) { ".3.1.1" }
64
86
 
65
- it "enhances an event" do
66
- plugin.filter(event)
67
- expect(event.get("server")).to eq([{"ip"=>"10.3.1.1", "name"=>"mv-server-1", "location"=>"MV-9-6-4"}])
87
+ describe "non scheduled operation" do
88
+ after { plugin.stop }
89
+
90
+ context "under normal conditions" do
91
+ it "enhances an event" do
92
+ plugin.register
93
+ plugin.filter(event)
94
+ expect(event.get("server")).to eq([{"ip"=>"10.3.1.1", "name"=>"mv-serv'r-1", "location"=>"MV-9-6-4"}])
95
+ end
96
+ end
97
+
98
+ context "when the loader query returns no results" do
99
+ let(:loader_statement) { "SELECT ip, name, location FROM reference_table WHERE ip LIKE '20%'" }
100
+ it "add an empty array to the target field" do
101
+ plugin.register
102
+ plugin.filter(event)
103
+ expect(event.get("server")).to eq([])
104
+ end
105
+ end
106
+
107
+ context "when the loader query returns a large recordset, local db is filled in chunks" do
108
+ let(:add_records) do
109
+ lambda do |fd|
110
+ 256.times do |octet3|
111
+ 256.times do |octet4|
112
+ fd.puts "'10.4.#{octet3}.#{octet4}', 'server-#{octet3}-#{octet4}', 'MV-10-#{octet3}-#{octet4}'"
113
+ end
114
+ end
115
+ end
116
+ end
117
+ let(:ipaddr) { "10.4.254.255" }
118
+ let(:lookup_statement) { "SELECT * FROM servers WHERE ip = :ip" }
119
+ let(:parameters_rhs) { "ip" }
120
+ it "enhances an event" do
121
+ plugin.register
122
+ plugin.filter(event)
123
+ expect(event.get("server")).to eq([{"ip"=>ipaddr, "name"=>"server-254-255", "location"=>"MV-10-254-255"}])
124
+ end
125
+ end
126
+ end
127
+
128
+ describe "scheduled operation" do
129
+ context "given a loader_schedule" do
130
+ it "should properly schedule" do
131
+ settings["loader_schedule"] = "*/10 * * * * * UTC"
132
+ Timecop.travel(Time.now.utc - 3600)
133
+ Timecop.scale(60)
134
+ static_filter = JdbcStatic.new(mixin_settings.merge(settings))
135
+ runner = Thread.new(static_filter) do |filter|
136
+ filter.register
137
+ end
138
+ sleep 3
139
+ static_filter.filter(event)
140
+ expect(static_filter.loader_runner.reload_count).to be > 1
141
+ static_filter.stop
142
+ Timecop.return
143
+ expect(event.get("server")).to eq([{"ip"=>"10.3.1.1", "name"=>"mv-serv'r-1", "location"=>"MV-9-6-4"}])
144
+ end
145
+ end
68
146
  end
69
147
  end
70
148
  end end
@@ -12,12 +12,11 @@ RSpec.shared_examples "a single load runner" do
12
12
 
13
13
  it "builds local db objects and populates the local db" do
14
14
  expect(local_db).to receive(:populate_all).once.with(loaders)
15
- expect(local_db).to receive(:build_db_object).twice.with(instance_of(LogStash::Filters::Jdbc::DbObject))
15
+ expect(local_db).to receive(:build_db_object).once.with(instance_of(LogStash::Filters::Jdbc::DbObject))
16
16
  runner.initial_load
17
17
  expect(runner.preloaders).to be_a(Array)
18
- expect(runner.preloaders.size).to eq(2)
18
+ expect(runner.preloaders.size).to eq(1)
19
19
  expect(runner.preloaders[0].name).to eq(:servers)
20
- expect(runner.preloaders[1].name).to eq(:temp_servers)
21
20
  expect(runner.local).to eq(local_db)
22
21
  expect(runner.loaders).to eq(loaders)
23
22
  end
@@ -32,4 +31,4 @@ RSpec.shared_examples "a single load runner" do
32
31
  expect(runner.loaders).to eq(loaders)
33
32
  end
34
33
  end
35
- end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-jdbc_static
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-17 00:00:00.000000000 Z
11
+ date: 2018-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +114,20 @@ dependencies:
114
114
  - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ name: timecop
124
+ prerelease: false
125
+ type: :development
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
117
131
  - !ruby/object:Gem::Dependency
118
132
  requirement: !ruby/object:Gem::Requirement
119
133
  requirements:
@@ -141,6 +155,7 @@ files:
141
155
  - Gemfile
142
156
  - LICENSE
143
157
  - README.md
158
+ - docs/index.asciidoc
144
159
  - lib/logstash-filter-jdbc_static_jars.rb
145
160
  - lib/logstash/filters/jdbc/basic_database.rb
146
161
  - lib/logstash/filters/jdbc/column.rb
@@ -173,11 +188,11 @@ files:
173
188
  - spec/filters/shared_helpers.rb
174
189
  - spec/helpers/WHY-THIS-JAR.txt
175
190
  - spec/helpers/derbyrun.jar
176
- - vendor/jar-dependencies/runtime-jars/derby-10.14.1.0.jar
177
- - vendor/jar-dependencies/runtime-jars/derbyclient-10.14.1.0.jar
191
+ - vendor/jar-dependencies/org/apache/derby/derby/10.14.1.0/derby-10.14.1.0.jar
192
+ - vendor/jar-dependencies/org/apache/derby/derbyclient/10.14.1.0/derbyclient-10.14.1.0.jar
178
193
  homepage: http://www.elastic.co/guide/en/logstash/current/index.html
179
194
  licenses:
180
- - Apache License (2.0)
195
+ - Apache-2.0
181
196
  metadata:
182
197
  logstash_plugin: 'true'
183
198
  logstash_group: filter
@@ -185,7 +200,7 @@ post_install_message:
185
200
  rdoc_options: []
186
201
  require_paths:
187
202
  - lib
188
- - jars
203
+ - vendor/jar-dependencies
189
204
  required_ruby_version: !ruby/object:Gem::Requirement
190
205
  requirements:
191
206
  - - ">="
@@ -196,9 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
211
  - - ">="
197
212
  - !ruby/object:Gem::Version
198
213
  version: '0'
199
- requirements:
200
- - jar 'org.apache.derby:derby', '10.14.1.0'
201
- - jar 'org.apache.derby:derbyclient', '10.14.1.0'
214
+ requirements: []
202
215
  rubyforge_project:
203
216
  rubygems_version: 2.6.13
204
217
  signing_key: