logstash-filter-jdbc_static 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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