Pushing.
This commit is contained in:
parent
7a1da5b7cd
commit
eef7473a0b
13
README.md
13
README.md
|
@ -12,9 +12,9 @@ This plugin does not bundle any JDBC jar files, and does expect them to be in a
|
||||||
particular location. Please ensure you read the 4 installation lines below.
|
particular location. Please ensure you read the 4 installation lines below.
|
||||||
|
|
||||||
## Headlines
|
## Headlines
|
||||||
- Support for connection pooling added in 0.2.0 [unreleased until #10 is resolved]
|
- Support for connection pooling added in 0.2.0
|
||||||
- Support for unsafe statement handling (allowing dynamic queries) in 0.2.0 [unreleased until #10 is resolved]
|
- Support for unsafe statement handling (allowing dynamic queries) in 0.2.0
|
||||||
- Altered exception handling to now count sequential flushes with exceptions thrown in 0.2.0 [untested and unreleased until #10 is resolved]
|
- Altered exception handling to now count sequential flushes with exceptions thrown in 0.2.0
|
||||||
|
|
||||||
## Versions
|
## Versions
|
||||||
- See master branch for logstash v2+
|
- See master branch for logstash v2+
|
||||||
|
@ -30,6 +30,13 @@ particular location. Please ensure you read the 4 installation lines below.
|
||||||
- Add JDBC jar files to vendor/jar/jdbc in your logstash installation
|
- Add JDBC jar files to vendor/jar/jdbc in your logstash installation
|
||||||
- And then configure (examples below)
|
- And then configure (examples below)
|
||||||
|
|
||||||
|
## Running tests
|
||||||
|
Assuming valid JDBC jar, and jruby is setup and installed, and you have issued `jruby -S bundle install` in the development directory
|
||||||
|
- `SQL_JAR=path/to/your.jar jruby -S bundle exec rspec`
|
||||||
|
If you need to provide username and password you may do this via the environment variables `SQL_USERNAME` and `SQL_PASSWORD`.
|
||||||
|
|
||||||
|
Tests are not yet 100% complete.
|
||||||
|
|
||||||
## Configuration options
|
## Configuration options
|
||||||
|
|
||||||
| Option | Type | Description | Required? | Default |
|
| Option | Type | Description | Required? | Default |
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.name = 'logstash-output-jdbc'
|
s.name = 'logstash-output-jdbc'
|
||||||
s.version = "0.2.0.rc5"
|
s.version = "0.2.1"
|
||||||
s.licenses = [ "Apache License (2.0)" ]
|
s.licenses = [ "Apache License (2.0)" ]
|
||||||
s.summary = "This plugin allows you to output to SQL, via JDBC"
|
s.summary = "This plugin allows you to output to SQL, via JDBC"
|
||||||
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
||||||
|
|
|
@ -1,13 +1,95 @@
|
||||||
require "logstash/devutils/rspec/spec_helper"
|
require "logstash/devutils/rspec/spec_helper"
|
||||||
require "logstash/outputs/jdbc"
|
require "logstash/outputs/jdbc"
|
||||||
require "stud/temporary"
|
require "stud/temporary"
|
||||||
|
require "java"
|
||||||
|
|
||||||
describe LogStash::Outputs::Jdbc do
|
describe LogStash::Outputs::Jdbc do
|
||||||
|
def fetch_log_table_rowcount
|
||||||
|
# sleep for a second to let the flush happen
|
||||||
|
sleep 1
|
||||||
|
|
||||||
it "should register without errors" do
|
stmt = @sql.createStatement()
|
||||||
plugin = LogStash::Plugin.lookup("output", "jdbc").new({})
|
rs = stmt.executeQuery("select count(*) as total from log")
|
||||||
expect { plugin.register }.to_not raise_error
|
count = 0
|
||||||
|
while rs.next()
|
||||||
|
count = rs.getInt("total")
|
||||||
|
end
|
||||||
|
stmt.close()
|
||||||
|
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:base_settings) { {
|
||||||
|
"driver_jar_path" => @driver_jar_path,
|
||||||
|
"connection_string" => @test_connection_string,
|
||||||
|
"username" => ENV['SQL_USERNAME'],
|
||||||
|
"password" => ENV['SQL_PASSWORD'],
|
||||||
|
"statement" => [ "insert into log (message) values(?)", "message" ],
|
||||||
|
"max_pool_size" => 1,
|
||||||
|
"flush_size" => 1,
|
||||||
|
"max_flush_exceptions" => 1
|
||||||
|
} }
|
||||||
|
let(:test_settings) { {} }
|
||||||
|
let(:plugin) { LogStash::Outputs::Jdbc.new(base_settings.merge(test_settings)) }
|
||||||
|
let(:event_fields) { { "message" => "This is a message!" } }
|
||||||
|
let(:event) { LogStash::Event.new(event_fields) }
|
||||||
|
|
||||||
|
before(:all) do
|
||||||
|
@driver_jar_path = File.absolute_path(ENV['SQL_JAR'])
|
||||||
|
@test_db_path = File.join(Stud::Temporary.directory, "test.db")
|
||||||
|
@test_connection_string = "jdbc:sqlite:#{@test_db_path}"
|
||||||
|
|
||||||
|
require @driver_jar_path
|
||||||
|
|
||||||
|
@sql = java.sql.DriverManager.get_connection(@test_connection_string, ENV['SQL_USERNAME'].to_s, ENV['SQL_PASSWORD'].to_s)
|
||||||
|
stmt = @sql.createStatement()
|
||||||
|
stmt.executeUpdate("CREATE table log (host text, timestamp datetime, message text);")
|
||||||
|
stmt.close()
|
||||||
|
end
|
||||||
|
|
||||||
|
before(:each) do
|
||||||
|
stmt = @sql.createStatement()
|
||||||
|
stmt.executeUpdate("delete from log")
|
||||||
|
stmt.close()
|
||||||
|
end
|
||||||
|
|
||||||
|
after(:all) do
|
||||||
|
File.unlink(@test_db_path)
|
||||||
|
Dir.rmdir(File.dirname(@test_db_path))
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "safe statement" do
|
||||||
|
it "should register without errors" do
|
||||||
|
expect { plugin.register }.to_not raise_error
|
||||||
|
end
|
||||||
|
|
||||||
|
it "receive event, without error" do
|
||||||
|
plugin.register
|
||||||
|
expect { plugin.receive(event) }.to_not raise_error
|
||||||
|
|
||||||
|
expect(fetch_log_table_rowcount).to eq(1)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "unsafe statement" do
|
||||||
|
let(:event_fields) {
|
||||||
|
{ "message" => "This is a message!", "table" => "log" }
|
||||||
|
}
|
||||||
|
let(:test_settings) { {
|
||||||
|
"statement" => [ "insert into %{table} (message) values(?)", "message" ],
|
||||||
|
"unsafe_statement" => true
|
||||||
|
} }
|
||||||
|
|
||||||
|
it "should register without errors" do
|
||||||
|
expect { plugin.register }.to_not raise_error
|
||||||
|
end
|
||||||
|
|
||||||
|
it "receive event, without error" do
|
||||||
|
plugin.register
|
||||||
|
plugin.receive(event)
|
||||||
|
expect(fetch_log_table_rowcount).to eq(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user