logstash-filter-jdbc_static 1.0.0

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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +2 -0
  3. data/CONTRIBUTORS +22 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +13 -0
  6. data/README.md +94 -0
  7. data/lib/logstash-filter-jdbc_static_jars.rb +5 -0
  8. data/lib/logstash/filters/jdbc/basic_database.rb +117 -0
  9. data/lib/logstash/filters/jdbc/column.rb +38 -0
  10. data/lib/logstash/filters/jdbc/db_object.rb +103 -0
  11. data/lib/logstash/filters/jdbc/loader.rb +114 -0
  12. data/lib/logstash/filters/jdbc/loader_schedule.rb +38 -0
  13. data/lib/logstash/filters/jdbc/lookup.rb +192 -0
  14. data/lib/logstash/filters/jdbc/lookup_processor.rb +91 -0
  15. data/lib/logstash/filters/jdbc/lookup_result.rb +39 -0
  16. data/lib/logstash/filters/jdbc/read_only_database.rb +57 -0
  17. data/lib/logstash/filters/jdbc/read_write_database.rb +86 -0
  18. data/lib/logstash/filters/jdbc/repeating_load_runner.rb +11 -0
  19. data/lib/logstash/filters/jdbc/single_load_runner.rb +43 -0
  20. data/lib/logstash/filters/jdbc/validatable.rb +49 -0
  21. data/lib/logstash/filters/jdbc_static.rb +216 -0
  22. data/logstash-filter-jdbc_static.gemspec +38 -0
  23. data/spec/filters/env_helper.rb +10 -0
  24. data/spec/filters/jdbc/column_spec.rb +70 -0
  25. data/spec/filters/jdbc/db_object_spec.rb +81 -0
  26. data/spec/filters/jdbc/loader_spec.rb +76 -0
  27. data/spec/filters/jdbc/lookup_processor_spec.rb +132 -0
  28. data/spec/filters/jdbc/lookup_spec.rb +129 -0
  29. data/spec/filters/jdbc/read_only_database_spec.rb +66 -0
  30. data/spec/filters/jdbc/read_write_database_spec.rb +89 -0
  31. data/spec/filters/jdbc/repeating_load_runner_spec.rb +24 -0
  32. data/spec/filters/jdbc/single_load_runner_spec.rb +16 -0
  33. data/spec/filters/jdbc_static_file_local_spec.rb +83 -0
  34. data/spec/filters/jdbc_static_spec.rb +70 -0
  35. data/spec/filters/remote_server_helper.rb +24 -0
  36. data/spec/filters/shared_helpers.rb +35 -0
  37. data/spec/helpers/WHY-THIS-JAR.txt +4 -0
  38. data/spec/helpers/derbyrun.jar +0 -0
  39. data/vendor/jar-dependencies/runtime-jars/derby-10.14.1.0.jar +0 -0
  40. data/vendor/jar-dependencies/runtime-jars/derbyclient-10.14.1.0.jar +0 -0
  41. metadata +224 -0
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require_relative "../shared_helpers"
4
+ require "logstash/filters/jdbc/repeating_load_runner"
5
+
6
+ module LogStash module Filters module Jdbc
7
+ describe RepeatingLoadRunner do
8
+ let(:local_db) { double("local_db") }
9
+ let(:loaders) { Object.new }
10
+ let(:local_db_objects) { [] }
11
+ subject(:runner) { described_class.new(local_db, loaders, local_db_objects) }
12
+
13
+ it_behaves_like "a single load runner"
14
+
15
+ context "when repeating" do
16
+ it "repopulates the local db" do
17
+ expect(local_db).to receive(:populate_all).once.with(loaders)
18
+ expect(local_db).to receive(:repopulate_all).once.with(loaders)
19
+ runner.initial_load
20
+ subject.call
21
+ end
22
+ end
23
+ end
24
+ end end end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require_relative "../shared_helpers"
4
+
5
+ require "logstash/filters/jdbc/single_load_runner"
6
+
7
+ module LogStash module Filters module Jdbc
8
+ describe SingleLoadRunner do
9
+ let(:local_db) { double("local_db") }
10
+ let(:loaders) { Object.new }
11
+ let(:local_db_objects) { [] }
12
+ subject(:runner) { described_class.new(local_db, loaders, local_db_objects) }
13
+
14
+ it_behaves_like "a single load runner"
15
+ end
16
+ end end end
@@ -0,0 +1,83 @@
1
+ # encoding: utf-8
2
+ require_relative "env_helper"
3
+ require_relative "remote_server_helper"
4
+
5
+ require "logstash/devutils/rspec/spec_helper"
6
+ require "logstash/filters/jdbc_static"
7
+ require "sequel"
8
+ require "sequel/adapters/jdbc"
9
+
10
+ module LogStash module Filters
11
+ describe JdbcStatic, :skip => "temporary disable lookup_jdbc_* settings" do
12
+ let(:db1) { ::Sequel.connect("jdbc:derby:memory:testdb;create=true", :user=> nil, :password=> nil) }
13
+ let(:test_loader) { "SELECT * FROM reference_table" }
14
+ let(:test_records) { db1[test_loader].all }
15
+ let(:lookup_db) { "lookupdb" }
16
+
17
+ let(:local_db_objects) do
18
+ [
19
+ {"name" => "servers", "preserve_existing" => true, "index_columns" => ["ip"], "columns" => [["ip", "varchar(64)"], ["name", "varchar(64)"], ["location", "varchar(64)"]]},
20
+ ]
21
+ end
22
+
23
+ let(:settings) do
24
+ {
25
+ "loaders" => [
26
+ {
27
+ "id" =>"servers",
28
+ "query" => "select ip, name, location from reference_table",
29
+ "local_table" => "servers"
30
+ }
31
+ ],
32
+ "local_db_objects" => local_db_objects,
33
+ "local_lookups" => [
34
+ {
35
+ "query" => "select * from servers WHERE ip LIKE :ip",
36
+ "parameters" => {"ip" => "%%{[ip]}"},
37
+ "target" => "server"
38
+ }
39
+ ]
40
+ }
41
+ end
42
+
43
+ let(:client_jar_path) { ::File.join(BASE_DERBY_DIR, "derbyclient.jar") }
44
+
45
+ let(:mixin_settings) do
46
+ { "jdbc_user" => ENV['USER'], "jdbc_driver_class" => "org.apache.derby.jdbc.EmbeddedDriver",
47
+ "jdbc_connection_string" => "jdbc:derby:memory:testdb;create=true",
48
+ "lookup_jdbc_driver_class" => "org.apache.derby.jdbc.ClientDriver",
49
+ "lookup_jdbc_driver_library" => nil,
50
+ "lookup_jdbc_connection_string" => "jdbc:derby://localhost:1527/#{lookup_db};create=true" }
51
+ end
52
+ let(:plugin) { JdbcStatic.new(mixin_settings.merge(settings)) }
53
+
54
+ after do
55
+ plugin.stop
56
+ ServerProcessHelpers.jdbc_static_stop_derby_server(lookup_db)
57
+ end
58
+
59
+ before do
60
+ ServerProcessHelpers.jdbc_static_start_derby_server
61
+ db1.drop_table(:reference_table) rescue nil
62
+ db1.create_table :reference_table do
63
+ String :ip
64
+ String :name
65
+ String :location
66
+ end
67
+ db1[:reference_table].insert(:ip => "10.1.1.1", :name => "ldn-server-1", :location => "LDN-2-3-4")
68
+ db1[:reference_table].insert(:ip => "10.2.1.1", :name => "nyc-server-1", :location => "NYC-5-2-8")
69
+ db1[:reference_table].insert(:ip => "10.3.1.1", :name => "mv-server-1", :location => "MV-9-6-4")
70
+
71
+ plugin.register
72
+ end
73
+
74
+ let(:event) { ::LogStash::Event.new("message" => "some text", "ip" => ipaddr) }
75
+
76
+ let(:ipaddr) { ".3.1.1" }
77
+
78
+ it "enhances an event" do
79
+ plugin.filter(event)
80
+ expect(event.get("server")).to eq([{"ip"=>"10.3.1.1", "name"=>"mv-server-1", "location"=>"MV-9-6-4"}])
81
+ end
82
+ end
83
+ end end
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+ require "logstash/devutils/rspec/spec_helper"
3
+ require "logstash/filters/jdbc_static"
4
+ require "sequel"
5
+ require "sequel/adapters/jdbc"
6
+
7
+ module LogStash module Filters
8
+ describe JdbcStatic do
9
+ 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 }
12
+
13
+ let(:local_db_objects) do
14
+ [
15
+ {"name" => "servers", "index_columns" => ["ip"], "columns" => [["ip", "varchar(64)"], ["name", "varchar(64)"], ["location", "varchar(64)"]]},
16
+ ]
17
+ end
18
+
19
+ let(:settings) do
20
+ {
21
+ "loaders" => [
22
+ {
23
+ "id" =>"servers",
24
+ "query" => "select ip, name, location from reference_table",
25
+ "local_table" => "servers"
26
+ }
27
+ ],
28
+ "local_db_objects" => local_db_objects,
29
+ "local_lookups" => [
30
+ {
31
+ "query" => "select * from servers WHERE ip LIKE :ip",
32
+ "parameters" => {"ip" => "%%{[ip]}"},
33
+ "target" => "server"
34
+ }
35
+ ]
36
+ }
37
+ end
38
+
39
+ let(:mixin_settings) do
40
+ { "jdbc_user" => ENV['USER'], "jdbc_driver_class" => "org.apache.derby.jdbc.EmbeddedDriver",
41
+ "jdbc_connection_string" => "jdbc:derby:memory:testdb;create=true" }
42
+ end
43
+ let(:plugin) { JdbcStatic.new(mixin_settings.merge(settings)) }
44
+
45
+ before do
46
+ db1.drop_table(:reference_table) rescue nil
47
+ db1.create_table :reference_table do
48
+ String :ip
49
+ String :name
50
+ String :location
51
+ 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
57
+ end
58
+
59
+ after { plugin.stop }
60
+
61
+ let(:event) { ::LogStash::Event.new("message" => "some text", "ip" => ipaddr) }
62
+
63
+ let(:ipaddr) { ".3.1.1" }
64
+
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"}])
68
+ end
69
+ end
70
+ end end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ require "childprocess"
3
+
4
+ module ServerProcessHelpers
5
+ def self.jdbc_static_start_derby_server()
6
+ # client_out = Stud::Temporary.file
7
+ # client_out.sync
8
+ ChildProcess.posix_spawn = true
9
+ cmd = ["java", "-jar", "#{BASE_DERBY_DIR}/derbyrun.jar", "server", "start"]
10
+ process = ChildProcess.build(*cmd)
11
+ process.start
12
+
13
+ sleep(0.1)
14
+ end
15
+
16
+ def self.jdbc_static_stop_derby_server(test_db)
17
+ cmd = ["java", "-jar", "#{BASE_DERBY_DIR}/derbyrun.jar", "server", "shutdown"]
18
+ process = ChildProcess.build(*cmd)
19
+ ChildProcess.posix_spawn = true
20
+ process.start
21
+ process.wait
22
+ `rm -rf #{::File.join(GEM_BASE_DIR, test_db)}`
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ require "logstash/filters/jdbc/db_object"
3
+
4
+ RSpec.shared_examples "a single load runner" do
5
+
6
+ context "with local db objects" do
7
+ let(:local_db_objects) do
8
+ [
9
+ {"name" => "servers", "index_columns" => ["ip"], "columns" => [%w(ip text), %w(name text), %w(location text)]},
10
+ ]
11
+ end
12
+
13
+ it "builds local db objects and populates the local db" do
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))
16
+ runner.initial_load
17
+ expect(runner.preloaders).to be_a(Array)
18
+ expect(runner.preloaders.size).to eq(2)
19
+ expect(runner.preloaders[0].name).to eq(:servers)
20
+ expect(runner.preloaders[1].name).to eq(:temp_servers)
21
+ expect(runner.local).to eq(local_db)
22
+ expect(runner.loaders).to eq(loaders)
23
+ end
24
+ end
25
+
26
+ context "without local db objects" do
27
+ it "populates the local db" do
28
+ expect(local_db).to receive(:populate_all).once.with(loaders)
29
+ runner.initial_load
30
+ expect(runner.preloaders).to eq([])
31
+ expect(runner.local).to eq(local_db)
32
+ expect(runner.loaders).to eq(loaders)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,4 @@
1
+ The derbyrun.jar is used by spec/filters/jdbc_static_file_local_spec.rb via
2
+ spec/filters/spec_helper
3
+ The spec helper runs and shuts down a separate Derby server
4
+ Have pity, its only little.
Binary file
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logstash-filter-jdbc_static
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Elastic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-01-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.3'
19
+ name: jar-dependencies
20
+ prerelease: false
21
+ type: :development
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.3'
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '1.60'
33
+ - - "<="
34
+ - !ruby/object:Gem::Version
35
+ version: '2.99'
36
+ name: logstash-core-plugin-api
37
+ prerelease: false
38
+ type: :runtime
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '1.60'
44
+ - - "<="
45
+ - !ruby/object:Gem::Version
46
+ version: '2.99'
47
+ - !ruby/object:Gem::Dependency
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ name: sequel
54
+ prerelease: false
55
+ type: :runtime
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ name: tzinfo
68
+ prerelease: false
69
+ type: :runtime
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ name: tzinfo-data
82
+ prerelease: false
83
+ type: :runtime
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ name: rufus-scheduler
96
+ prerelease: false
97
+ type: :runtime
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ name: logstash-devutils
110
+ prerelease: false
111
+ type: :development
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
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: childprocess
124
+ prerelease: false
125
+ type: :development
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ description: This gem is a Logstash plugin required to be installed on top of the
132
+ Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
133
+ gem is not a stand-alone program
134
+ email: info@elastic.co
135
+ executables: []
136
+ extensions: []
137
+ extra_rdoc_files: []
138
+ files:
139
+ - CHANGELOG.md
140
+ - CONTRIBUTORS
141
+ - Gemfile
142
+ - LICENSE
143
+ - README.md
144
+ - lib/logstash-filter-jdbc_static_jars.rb
145
+ - lib/logstash/filters/jdbc/basic_database.rb
146
+ - lib/logstash/filters/jdbc/column.rb
147
+ - lib/logstash/filters/jdbc/db_object.rb
148
+ - lib/logstash/filters/jdbc/loader.rb
149
+ - lib/logstash/filters/jdbc/loader_schedule.rb
150
+ - lib/logstash/filters/jdbc/lookup.rb
151
+ - lib/logstash/filters/jdbc/lookup_processor.rb
152
+ - lib/logstash/filters/jdbc/lookup_result.rb
153
+ - lib/logstash/filters/jdbc/read_only_database.rb
154
+ - lib/logstash/filters/jdbc/read_write_database.rb
155
+ - lib/logstash/filters/jdbc/repeating_load_runner.rb
156
+ - lib/logstash/filters/jdbc/single_load_runner.rb
157
+ - lib/logstash/filters/jdbc/validatable.rb
158
+ - lib/logstash/filters/jdbc_static.rb
159
+ - logstash-filter-jdbc_static.gemspec
160
+ - spec/filters/env_helper.rb
161
+ - spec/filters/jdbc/column_spec.rb
162
+ - spec/filters/jdbc/db_object_spec.rb
163
+ - spec/filters/jdbc/loader_spec.rb
164
+ - spec/filters/jdbc/lookup_processor_spec.rb
165
+ - spec/filters/jdbc/lookup_spec.rb
166
+ - spec/filters/jdbc/read_only_database_spec.rb
167
+ - spec/filters/jdbc/read_write_database_spec.rb
168
+ - spec/filters/jdbc/repeating_load_runner_spec.rb
169
+ - spec/filters/jdbc/single_load_runner_spec.rb
170
+ - spec/filters/jdbc_static_file_local_spec.rb
171
+ - spec/filters/jdbc_static_spec.rb
172
+ - spec/filters/remote_server_helper.rb
173
+ - spec/filters/shared_helpers.rb
174
+ - spec/helpers/WHY-THIS-JAR.txt
175
+ - 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
178
+ homepage: http://www.elastic.co/guide/en/logstash/current/index.html
179
+ licenses:
180
+ - Apache License (2.0)
181
+ metadata:
182
+ logstash_plugin: 'true'
183
+ logstash_group: filter
184
+ post_install_message:
185
+ rdoc_options: []
186
+ require_paths:
187
+ - lib
188
+ - jars
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements:
200
+ - jar 'org.apache.derby:derby', '10.14.1.0'
201
+ - jar 'org.apache.derby:derbyclient', '10.14.1.0'
202
+ rubyforge_project:
203
+ rubygems_version: 2.6.13
204
+ signing_key:
205
+ specification_version: 4
206
+ summary: This filter executes a SQL query to fetch a SQL query result, store it locally
207
+ then use a second SQL query to update an event.
208
+ test_files:
209
+ - spec/filters/env_helper.rb
210
+ - spec/filters/jdbc/column_spec.rb
211
+ - spec/filters/jdbc/db_object_spec.rb
212
+ - spec/filters/jdbc/loader_spec.rb
213
+ - spec/filters/jdbc/lookup_processor_spec.rb
214
+ - spec/filters/jdbc/lookup_spec.rb
215
+ - spec/filters/jdbc/read_only_database_spec.rb
216
+ - spec/filters/jdbc/read_write_database_spec.rb
217
+ - spec/filters/jdbc/repeating_load_runner_spec.rb
218
+ - spec/filters/jdbc/single_load_runner_spec.rb
219
+ - spec/filters/jdbc_static_file_local_spec.rb
220
+ - spec/filters/jdbc_static_spec.rb
221
+ - spec/filters/remote_server_helper.rb
222
+ - spec/filters/shared_helpers.rb
223
+ - spec/helpers/WHY-THIS-JAR.txt
224
+ - spec/helpers/derbyrun.jar