logstash-output-charrington 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +55 -94
- data/lib/commons-io/commons-io/2.4/commons-io-2.4.jar +0 -0
- data/lib/de/flapdoodle/embed/de.flapdoodle.embed.process/2.0.2/de.flapdoodle.embed.process-2.0.2.jar +0 -0
- data/lib/logstash/outputs/charrington.rb +5 -21
- data/lib/logstash/outputs/charrington/alter_table.rb +2 -2
- data/lib/logstash/outputs/charrington/create_table.rb +7 -2
- data/lib/logstash/outputs/charrington/insert.rb +1 -1
- data/lib/logstash/outputs/charrington/transform.rb +12 -3
- data/lib/net/java/dev/jna/jna-platform/4.0.0/jna-platform-4.0.0.jar +0 -0
- data/lib/net/java/dev/jna/jna/4.0.0/jna-4.0.0.jar +0 -0
- data/lib/org/apache/commons/commons-compress/1.10/commons-compress-1.10.jar +0 -0
- data/lib/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar +0 -0
- data/lib/org/postgresql/postgresql/42.2.5/postgresql-42.2.5.jar +0 -0
- data/lib/ru/yandex/qatools/embed/postgresql-embedded/2.10/postgresql-embedded-2.10.jar +0 -0
- data/lib/ru/yandex/qatools/embed/postgresql-embedded/2.8/postgresql-embedded-2.8.jar +0 -0
- data/logstash-output-charrington.gemspec +2 -1
- data/spec/outputs/charrington_spec.rb +43 -23
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fbbae45d9c763ffa27448320f7150f9827732ef5b20823c078664d6deb8ab652
|
4
|
+
data.tar.gz: c18245e0ac6cbb11e30a824fdaf2a39dcf466e4631f307a9b1bd6aa9484bb5e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d139e03b049aae067a3e5827c520eaa855e33fb889e33f51cec8cf308bb0923f04cca2b01b1b561c2578ccbe1c2ec731e6cf59918cbb101df055058403ef99c7
|
7
|
+
data.tar.gz: 898bb2a57d84e835a3b2e4933ebb387d1f0e030f6dc06f5c98c284aea4c51b5b6401401d85fb6bb842988d7c15497331d960735a7e57e5d9dd43c79d3f30a284
|
data/README.md
CHANGED
@@ -1,94 +1,55 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
| unsafe_statement | Boolean | If yes, the statement is evaluated for event fields - this allows you to use dynamic table names, etc. **This is highly dangerous** and you should **not** use this unless you are 100% sure that the field(s) you are passing in are 100% safe. Failure to do so will result in possible SQL injections. Example statement: [ "insert into %{table_name_field} (column) values(?)", "fieldname" ] | No | False |
|
57
|
-
| max_pool_size | Number | Maximum number of connections to open to the SQL server at any 1 time | No | 5 |
|
58
|
-
| connection_timeout | Number | Number of milliseconds before a SQL connection is closed | No | 10000 |
|
59
|
-
| flush_size | Number | Maximum number of entries to buffer before sending to SQL - if this is reached before idle_flush_time | No | 1000 |
|
60
|
-
| max_flush_exceptions | Number | Number of sequential flushes which cause an exception, before the set of events are discarded. Set to a value less than 1 if you never want it to stop. This should be carefully configured with respect to retry_initial_interval and retry_max_interval, if your SQL server is not highly available | No | 10 |
|
61
|
-
| retry_initial_interval | Number | Number of seconds before the initial retry in the event of a failure. On each failure it will be doubled until it reaches retry_max_interval | No | 2 |
|
62
|
-
| retry_max_interval | Number | Maximum number of seconds between each retry | No | 128 |
|
63
|
-
| retry_sql_states | Array of strings | An array of custom SQL state codes you wish to retry until `max_flush_exceptions`. Useful if you're using a JDBC driver which returns retry-able, but non-standard SQL state codes in it's exceptions. | No | [] |
|
64
|
-
| event_as_json_keyword | String | The magic key word that the plugin looks for to convert the entire event into a JSON object. As Logstash does not support this out of the box with it's `sprintf` implementation, you can use whatever this field is set to in the statement parameters | No | @event |
|
65
|
-
| enable_event_as_json_keyword | Boolean | Enables the magic keyword set in the configuration option `event_as_json_keyword`. Without this enabled the plugin will not convert the `event_as_json_keyword` into JSON encoding of the entire event. | No | False |
|
66
|
-
| schema | String | Database schema | No | False |
|
67
|
-
|
68
|
-
## Example configurations
|
69
|
-
Example logstash configurations, can now be found in the examples directory. Where possible we try to link every configuration with a tested jar.
|
70
|
-
|
71
|
-
If you have a working sample configuration, for a DB thats not listed, pull requests are welcome.
|
72
|
-
|
73
|
-
## Development and Running tests
|
74
|
-
For development tests are recommended to run inside a virtual machine (Vagrantfile is included in the repo), as it requires
|
75
|
-
access to various database engines and could completely destroy any data in a live system.
|
76
|
-
|
77
|
-
If you have vagrant available (this is temporary whilst I'm hacking on v5 support. I'll make this more streamlined later):
|
78
|
-
- `vagrant up`
|
79
|
-
- `vagrant ssh`
|
80
|
-
- `cd /vagrant`
|
81
|
-
- `gem install bundler`
|
82
|
-
- `cd /vagrant && bundle install && bundle exec rake vendor && bundle exec rake install_jars`
|
83
|
-
- `./scripts/travis-before_script.sh && source ./scripts/travis-variables.sh`
|
84
|
-
- `bundle exec rspec`
|
85
|
-
|
86
|
-
## Releasing
|
87
|
-
- Update Changelog
|
88
|
-
- Bump version in gemspec
|
89
|
-
- Commit
|
90
|
-
- Create tag `git tag v<version-number-in-gemspec>`
|
91
|
-
- `bundle exec rake install_jars`
|
92
|
-
- `bundle exec rake pre_release_checks`
|
93
|
-
- `gem build logstash-output-jdbc.gemspec`
|
94
|
-
- `gem push`
|
1
|
+
# Logstash Output Charrington
|
2
|
+
|
3
|
+
Logstash Output Plugin to handle batching messages and dynamically create and alter tables.
|
4
|
+
|
5
|
+
Forked From [logstash-output-jdbc](https://github.com/theangryangel/logstash-output-jdbc)
|
6
|
+
## Configure
|
7
|
+
Example Logstash Config
|
8
|
+
```bash
|
9
|
+
input {
|
10
|
+
kafka {
|
11
|
+
auto_offset_reset => earliest
|
12
|
+
bootstrap_servers => "${LS_KAFKA_BOOTSTRAP_SERVERS:kafka:9092}"
|
13
|
+
codec => json
|
14
|
+
group_id => "winston_ls_pg_sinks_cg"
|
15
|
+
topics => [
|
16
|
+
"orwell.analytics.v1.json"
|
17
|
+
]
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
filter {
|
22
|
+
if "_jsonparsefailure" in [tags] {
|
23
|
+
drop { }
|
24
|
+
}
|
25
|
+
|
26
|
+
ruby {
|
27
|
+
code => "
|
28
|
+
hash = event.to_hash
|
29
|
+
hash.each do |k,v|
|
30
|
+
if v == nil
|
31
|
+
event.remove(k)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
"
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
output {
|
39
|
+
charrington {
|
40
|
+
driver_jar_path => "${DRIVER_PATH:/usr/share/logstash/vendor/jar/jdbc/postgresql-42.2.5.jar}"
|
41
|
+
connection_string => "jdbc:postgresql://${WINSTON_DATABASE_HOST}:5432/${WINSTON_DATABASE}?user=${WINSTON_DATABASE_USERNAME}&password=${WINSTON_DATABASE_PASSWORD}"
|
42
|
+
schema => "dea"
|
43
|
+
}
|
44
|
+
|
45
|
+
if "${LS_SHOW_DEBUG_OUTPUT}" == "true" {
|
46
|
+
stdout { codec => rubydebug }
|
47
|
+
}
|
48
|
+
}
|
49
|
+
```
|
50
|
+
|
51
|
+
## Build & Publish
|
52
|
+
```bash
|
53
|
+
gem build logstash-output-charrington.gemspec # build
|
54
|
+
gem push logstash-output-charrington-x.x.x.gem # publish
|
55
|
+
```
|
Binary file
|
data/lib/de/flapdoodle/embed/de.flapdoodle.embed.process/2.0.2/de.flapdoodle.embed.process-2.0.2.jar
ADDED
Binary file
|
@@ -23,27 +23,10 @@ require File.join(File.dirname(__FILE__), "charrington/insert")
|
|
23
23
|
|
24
24
|
class LogStash::Outputs::Charrington < LogStash::Outputs::Base
|
25
25
|
concurrency :shared
|
26
|
+
config_name 'charrington'
|
26
27
|
|
27
28
|
STRFTIME_FMT = '%Y-%m-%d %T.%L'.freeze
|
28
29
|
|
29
|
-
# RETRYABLE_SQLSTATE_CLASSES = [
|
30
|
-
# # Classes of retryable SQLSTATE codes
|
31
|
-
# # Not all in the class will be retryable. However, this is the best that
|
32
|
-
# # we've got right now.
|
33
|
-
# # If a custom state code is required, set it in retry_sql_states.
|
34
|
-
# '08', # Connection Exception
|
35
|
-
# '24', # Invalid Cursor State (Maybe retry-able in some circumstances)
|
36
|
-
# '25', # Invalid Transaction State
|
37
|
-
# '40', # Transaction Rollback
|
38
|
-
# '53', # Insufficient Resources
|
39
|
-
# '54', # Program Limit Exceeded (MAYBE)
|
40
|
-
# '55', # Object Not In Prerequisite State
|
41
|
-
# '57', # Operator Intervention
|
42
|
-
# '58', # System Error
|
43
|
-
# ].freeze
|
44
|
-
|
45
|
-
config_name 'charrington'
|
46
|
-
|
47
30
|
# Driver class - Reintroduced for https://github.com/theangryangel/logstash-output-jdbc/issues/26
|
48
31
|
config :driver_class, validate: :string
|
49
32
|
|
@@ -120,8 +103,11 @@ class LogStash::Outputs::Charrington < LogStash::Outputs::Base
|
|
120
103
|
schema: @schema,
|
121
104
|
max_retries: @max_flush_exceptions,
|
122
105
|
retry_initial_interval: @retry_initial_interval }
|
123
|
-
|
124
106
|
Charrington::Process.call(connection, event, opts)
|
107
|
+
rescue => e
|
108
|
+
@logger.error("Unable to process event. Event dropped. #{e.message}")
|
109
|
+
next
|
110
|
+
ensure
|
125
111
|
connection.close unless connection.nil?
|
126
112
|
end
|
127
113
|
end
|
@@ -201,8 +187,6 @@ class LogStash::Outputs::Charrington < LogStash::Outputs::Base
|
|
201
187
|
log_method = (retrying ? 'warn' : 'error')
|
202
188
|
|
203
189
|
loop do
|
204
|
-
# TODO reformat event output so that it only shows the fields necessary.
|
205
|
-
|
206
190
|
@logger.send(log_method, log_text, :exception => current_exception, :event => event)
|
207
191
|
|
208
192
|
if current_exception.respond_to? 'getNextException'
|
@@ -14,7 +14,7 @@ module Charrington
|
|
14
14
|
|
15
15
|
def initialize(connection, event, table_name, columns)
|
16
16
|
@connection = connection
|
17
|
-
@event = event
|
17
|
+
@event = event.to_hash
|
18
18
|
@table_name = table_name
|
19
19
|
@columns = columns
|
20
20
|
@column_types = []
|
@@ -77,7 +77,7 @@ module Charrington
|
|
77
77
|
stmt = connection.prepareStatement(prep_sql(sql))
|
78
78
|
stmt.execute()
|
79
79
|
rescue Java::OrgPostgresqlUtil::PSQLException => e
|
80
|
-
|
80
|
+
puts "PSQLException: #{e.message}"
|
81
81
|
ensure
|
82
82
|
stmt.close unless stmt.nil?
|
83
83
|
end
|
@@ -17,7 +17,7 @@ module Charrington
|
|
17
17
|
@event = event.to_hash
|
18
18
|
@table_name = table_name
|
19
19
|
@columns = columns
|
20
|
-
@column_types =
|
20
|
+
@column_types = initial_columns
|
21
21
|
end
|
22
22
|
|
23
23
|
def call
|
@@ -53,6 +53,11 @@ module Charrington
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
def initial_columns
|
57
|
+
# Postgres
|
58
|
+
["id SERIAL PRIMARY KEY", "inserted_at TIMESTAMP DEFAULT NOW()"]
|
59
|
+
end
|
60
|
+
|
56
61
|
def create_table
|
57
62
|
execute("CREATE TABLE IF NOT EXISTS #{table_name} (#{column_types.join(', ')})")
|
58
63
|
end
|
@@ -61,7 +66,7 @@ module Charrington
|
|
61
66
|
statement = connection.prepareStatement( sql.gsub(/\s+/, " ").strip )
|
62
67
|
statement.execute()
|
63
68
|
rescue Java::OrgPostgresqlUtil::PSQLException => e
|
64
|
-
|
69
|
+
puts "PSQLException: #{e.message}"
|
65
70
|
ensure
|
66
71
|
statement.close unless statement.nil?
|
67
72
|
end
|
@@ -133,7 +133,7 @@ module Charrington
|
|
133
133
|
statement = connection.prepareStatement( sql.gsub(/\s+/, " ").strip )
|
134
134
|
statement.execute()
|
135
135
|
rescue Java::OrgPostgresqlUtil::PSQLException => e
|
136
|
-
|
136
|
+
puts "PSQLException: #{e.message}"
|
137
137
|
ensure
|
138
138
|
statement.close unless statement.nil?
|
139
139
|
end
|
@@ -9,14 +9,17 @@ module Charrington
|
|
9
9
|
Error = Class.new(StandardError)
|
10
10
|
EventNil = Class.new(Error)
|
11
11
|
TableNameNil = Class.new(Error)
|
12
|
+
ColumnBlacklist = Class.new(Error)
|
12
13
|
|
13
|
-
|
14
|
+
KEY_FILTER_BLACKLIST = ['host','path','jwt','sequence']
|
15
|
+
KEY_RAISE_BLACKLIST = ['id', 'inserted_at']
|
14
16
|
|
15
17
|
def initialize(event)
|
16
18
|
raise EventNil, "Event is nil" if event.nil?
|
17
|
-
event = event.
|
19
|
+
event = event.to_hash
|
18
20
|
@event = drop_keys(event)
|
19
21
|
@top_level_keys = @event.keys
|
22
|
+
check_blacklist
|
20
23
|
end
|
21
24
|
|
22
25
|
def call
|
@@ -28,8 +31,14 @@ module Charrington
|
|
28
31
|
|
29
32
|
private
|
30
33
|
|
34
|
+
def check_blacklist
|
35
|
+
arr = []
|
36
|
+
KEY_RAISE_BLACKLIST.each { |k| arr << k if event.keys.include?(k) }
|
37
|
+
raise ColumnBlacklist, "Event contains these blacklisted keys: #{arr.join(",")}" unless arr.empty?
|
38
|
+
end
|
39
|
+
|
31
40
|
def drop_keys(event)
|
32
|
-
event.delete_if {|k, _v| k.start_with?("@") ||
|
41
|
+
event.delete_if {|k, _v| k.start_with?("@") || KEY_FILTER_BLACKLIST.include?(k) }
|
33
42
|
end
|
34
43
|
|
35
44
|
def flatten_hash(hash)
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-output-charrington'
|
3
|
-
s.version = '0.2.
|
3
|
+
s.version = '0.2.1'
|
4
4
|
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = 'This plugin allows you to output to SQL, via JDBC'
|
@@ -30,4 +30,5 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency 'rubocop', '0.41.2'
|
31
31
|
s.add_development_dependency 'logstash-input-generator'
|
32
32
|
s.add_development_dependency 'logstash-codec-json'
|
33
|
+
s.add_development_dependency 'insist'
|
33
34
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../charrington_spec_helper'
|
2
|
+
require 'insist'
|
2
3
|
|
3
4
|
describe LogStash::Outputs::Charrington do
|
4
5
|
describe 'when initializing' do
|
@@ -9,36 +10,55 @@ describe LogStash::Outputs::Charrington do
|
|
9
10
|
end
|
10
11
|
end
|
11
12
|
|
13
|
+
# describe 'integration tests with agent' do
|
14
|
+
# config <<-HEREDOC
|
15
|
+
# input {
|
16
|
+
# generator {
|
17
|
+
# message => '{"app_name": "Web App", "event": "From Agent"}'
|
18
|
+
# codec => 'json'
|
19
|
+
# count => 1
|
20
|
+
# }
|
21
|
+
# }
|
22
|
+
|
23
|
+
# output {
|
24
|
+
# charrington {
|
25
|
+
# connection_string => 'jdbc:postgresql://localhost:5432/winston?user=postgres&password=postgres'
|
26
|
+
# driver_jar_path => '/projects/logstash-output-charrington/vendor/postgresql-42.2.5.jar'
|
27
|
+
# schema => 'dea'
|
28
|
+
# }
|
29
|
+
# }
|
30
|
+
# HEREDOC
|
31
|
+
|
32
|
+
# agent do
|
33
|
+
# puts "IT'S WORKING!!!!!"
|
34
|
+
# end
|
35
|
+
# end
|
36
|
+
|
12
37
|
describe 'integration tests' do
|
13
|
-
config <<-CONFIG
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
38
|
+
let(:config) do <<-CONFIG
|
39
|
+
input {
|
40
|
+
generator {
|
41
|
+
message => '{"app_name": "Web App", "event": "Hi - Dan"}'
|
42
|
+
codec => 'json'
|
43
|
+
count => 1
|
44
|
+
}
|
19
45
|
}
|
20
|
-
}
|
21
46
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
47
|
+
output {
|
48
|
+
charrington {
|
49
|
+
connection_string => 'jdbc:postgresql://localhost:5432/winston?user=postgres&password=postgres'
|
50
|
+
driver_jar_path => '/projects/logstash-output-charrington/vendor/postgresql-42.2.5.jar'
|
51
|
+
schema => 'dea'
|
52
|
+
}
|
27
53
|
}
|
28
|
-
|
29
|
-
|
54
|
+
CONFIG
|
55
|
+
end
|
30
56
|
|
31
|
-
|
32
|
-
|
57
|
+
it("isn't effed") do
|
58
|
+
pipeline = new_pipeline_from_string(config)
|
59
|
+
pipeline.run
|
33
60
|
end
|
34
61
|
end
|
35
|
-
|
36
|
-
# context 'running' do
|
37
|
-
# it 'should transform some JSON' do
|
38
|
-
# transformed = Charrington::Transform.call({"a" => 1})
|
39
|
-
# puts transformed
|
40
|
-
# end
|
41
|
-
# end
|
42
62
|
end
|
43
63
|
|
44
64
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-charrington
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dconger
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2019-06-
|
13
|
+
date: 2019-06-19 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +130,20 @@ dependencies:
|
|
130
130
|
- - ">="
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0'
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
name: insist
|
140
|
+
prerelease: false
|
141
|
+
type: :development
|
142
|
+
version_requirements: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
133
147
|
description: This gem is a logstash plugin required to be installed on top of the
|
134
148
|
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install 'logstash-output-charrington'.
|
135
149
|
This gem is not a stand-alone program
|
@@ -144,6 +158,8 @@ files:
|
|
144
158
|
- README.md
|
145
159
|
- THANKS.md
|
146
160
|
- lib/com/zaxxer/HikariCP/2.7.2/HikariCP-2.7.2.jar
|
161
|
+
- lib/commons-io/commons-io/2.4/commons-io-2.4.jar
|
162
|
+
- lib/de/flapdoodle/embed/de.flapdoodle.embed.process/2.0.2/de.flapdoodle.embed.process-2.0.2.jar
|
147
163
|
- lib/logstash-output-charrington_jars.rb
|
148
164
|
- lib/logstash/outputs/charrington.rb
|
149
165
|
- lib/logstash/outputs/charrington/alter_table.rb
|
@@ -152,9 +168,16 @@ files:
|
|
152
168
|
- lib/logstash/outputs/charrington/process.rb
|
153
169
|
- lib/logstash/outputs/charrington/service.rb
|
154
170
|
- lib/logstash/outputs/charrington/transform.rb
|
171
|
+
- lib/net/java/dev/jna/jna-platform/4.0.0/jna-platform-4.0.0.jar
|
172
|
+
- lib/net/java/dev/jna/jna/4.0.0/jna-4.0.0.jar
|
173
|
+
- lib/org/apache/commons/commons-compress/1.10/commons-compress-1.10.jar
|
174
|
+
- lib/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar
|
155
175
|
- lib/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar
|
156
176
|
- lib/org/apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2.jar
|
177
|
+
- lib/org/postgresql/postgresql/42.2.5/postgresql-42.2.5.jar
|
157
178
|
- lib/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar
|
179
|
+
- lib/ru/yandex/qatools/embed/postgresql-embedded/2.10/postgresql-embedded-2.10.jar
|
180
|
+
- lib/ru/yandex/qatools/embed/postgresql-embedded/2.8/postgresql-embedded-2.8.jar
|
158
181
|
- logstash-output-charrington.gemspec
|
159
182
|
- spec/charrington_spec_helper.rb
|
160
183
|
- spec/outputs/charrington_mysql_spec.rb
|