logstash-mixin-http_client 0.0.1 → 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.
- checksums.yaml +4 -4
- data/README.md +16 -3
- data/lib/logstash/plugin_mixins/http_client.rb +27 -6
- data/logstash-mixin-http_client.gemspec +1 -1
- data/spec/plugin_mixin/http_client_spec.rb +41 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 866041325df6f6f569b40e8a0c44464f5d543c04
|
4
|
+
data.tar.gz: c911cdde46a537e2a87061b1439f357b01767fef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0f2a27414856acd2f5235ff7b9765baa5b2a8641f23f133c15fde9dc5b89d216e70bf3d0b65b043caccaefafffd25c452cf877688621cc9e252933f8f359754
|
7
|
+
data.tar.gz: 8f9e2b21bd8545a5723c4a0c57b3d13716dfec47457dfb81bb81581a520a3f309a5afa6083ed1d7148a48d88752a91dd4a4b96aa7fecbb230ab2266543ae023b
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# Easily Add an HTTP Client to your Logstash Plugin!
|
2
|
+
|
3
|
+
HTTP clients have a lot of configurable options (proxies, certificates, headers, etc.), and specifying all of these with proper validation for a logstash plugin can be irritating. We built this plugin while building our [HTTP Poller Input](https://github.com/logstash-plugins/logstash-input-http_poller). If you need to build a plugin that works primarily based around HTTP this mixin makes it easy and consistent! It is based on [Manticore](https://github.com/cheald/manticore) a lightning quick, fully featured JRuby HTTP client based on Apache Commons HTTP Client.`
|
2
4
|
|
3
5
|
This is a plugin for [Logstash](https://github.com/elasticsearch/logstash).
|
4
6
|
|
@@ -8,7 +10,7 @@ This plugin exposes the following options:
|
|
8
10
|
|
9
11
|
```ruby
|
10
12
|
# Timeout (in seconds) for the entire request
|
11
|
-
request_timeout, :validate => :number, :default => 60
|
13
|
+
config :request_timeout, :validate => :number, :default => 60
|
12
14
|
|
13
15
|
# Timeout (in seconds) to wait for data on the socket. Default is 10s
|
14
16
|
config :socket_timeout, :validate => :number, :default => 10
|
@@ -25,6 +27,9 @@ config :pool_max, :validate => :number, :default => 50
|
|
25
27
|
# Max number of concurrent connections to a single host. Defaults to 25
|
26
28
|
config :pool_max_per_route, :validate => :number, :default => 25
|
27
29
|
|
30
|
+
# Enable HTTP keepalive support, enabled by default
|
31
|
+
config :keepalive, :validate => :boolean, :default => true
|
32
|
+
|
28
33
|
# How many times should the client retry a failing URL? Default is 3
|
29
34
|
config :automatic_retries, :validate => :number, :default => 3
|
30
35
|
|
@@ -36,7 +41,10 @@ config :truststore_path, :validate => :path
|
|
36
41
|
|
37
42
|
# Specify the keystore password here.
|
38
43
|
# Note, most .jks files created with keytool require a password!
|
39
|
-
config :truststore_password, :validate => :
|
44
|
+
config :truststore_password, :validate => :password
|
45
|
+
|
46
|
+
# Specify the keystore type here. One of "JKS" or "PKCS12". Default is "JKS"
|
47
|
+
config :truststore_type, :validate => :string, :default => "JKS"
|
40
48
|
|
41
49
|
# Enable cookie support. With this enabled the client will persist cookies
|
42
50
|
# across requests as a normal web browser would. Enabled by default
|
@@ -47,6 +55,11 @@ config :cookies, :validate => :boolean, :default => true
|
|
47
55
|
# 2. Proxy host in form: {host => "proxy.org", port => 80, scheme => 'http', user => 'username@host', password => 'password'}
|
48
56
|
# 3. Proxy host in form: {url => 'http://proxy.org:1234', user => 'username@host', password => 'password'}
|
49
57
|
config :proxy
|
58
|
+
|
59
|
+
# If you'd like to use a client certificate (note, most people don't want this) set the path to the x509 cert here
|
60
|
+
config :client_cert, :validate => :path
|
61
|
+
# If you'd like to use a client certificate (note, most people don't want this) set the path to the x509 key here
|
62
|
+
config :client_key, :validate => :path
|
50
63
|
```
|
51
64
|
|
52
65
|
## Documentation
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "logstash/config/mixin"
|
3
3
|
|
4
|
-
# This module
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# This module makes it easy to add a very fully configured HTTP client to logstash
|
5
|
+
# based on [Manticore](https://github.com/cheald/manticore).
|
6
|
+
# For an example of its usage see https://github.com/logstash-plugins/logstash-input-http_poller
|
7
7
|
module LogStash::PluginMixins::HttpClient
|
8
|
+
class InvalidHTTPConfigError < StandardError; end
|
9
|
+
|
8
10
|
def self.included(base)
|
9
11
|
require 'manticore'
|
10
12
|
base.extend(self)
|
@@ -31,6 +33,9 @@ module LogStash::PluginMixins::HttpClient
|
|
31
33
|
# Max number of concurrent connections to a single host. Defaults to 25
|
32
34
|
config :pool_max_per_route, :validate => :number, :default => 25
|
33
35
|
|
36
|
+
# Turn this on to enable HTTP keepalive support
|
37
|
+
config :keepalive, :validate => :boolean, :default => true
|
38
|
+
|
34
39
|
# How many times should the client retry a failing URL? Default is 3
|
35
40
|
config :automatic_retries, :validate => :number, :default => 3
|
36
41
|
|
@@ -42,7 +47,10 @@ module LogStash::PluginMixins::HttpClient
|
|
42
47
|
|
43
48
|
# Specify the keystore password here.
|
44
49
|
# Note, most .jks files created with keytool require a password!
|
45
|
-
config :truststore_password, :validate => :
|
50
|
+
config :truststore_password, :validate => :password
|
51
|
+
|
52
|
+
# Specify the keystore type here. One of "JKS" or "PKCS12". Default is "JKS"
|
53
|
+
config :truststore_type, :validate => :string, :default => "JKS"
|
46
54
|
|
47
55
|
# Enable cookie support. With this enabled the client will persist cookies
|
48
56
|
# across requests as a normal web browser would. Enabled by default
|
@@ -53,6 +61,11 @@ module LogStash::PluginMixins::HttpClient
|
|
53
61
|
# 2. Proxy host in form: {host => "proxy.org", port => 80, scheme => 'http', user => 'username@host', password => 'password'}
|
54
62
|
# 3. Proxy host in form: {url => 'http://proxy.org:1234', user => 'username@host', password => 'password'}
|
55
63
|
config :proxy
|
64
|
+
|
65
|
+
# If you'd like to use a client certificate (note, most people don't want this) set the path to the x509 cert here
|
66
|
+
config :client_cert, :validate => :path
|
67
|
+
# If you're using a client certificate specify the path to the encryption key here
|
68
|
+
config :client_key, :validate => :path
|
56
69
|
end
|
57
70
|
|
58
71
|
public
|
@@ -66,6 +79,7 @@ module LogStash::PluginMixins::HttpClient
|
|
66
79
|
pool_max: @pool_max,
|
67
80
|
pool_max_per_route: @pool_max_per_route,
|
68
81
|
cookies: @cookies,
|
82
|
+
keepalive: @keepalive
|
69
83
|
}
|
70
84
|
|
71
85
|
if @proxy
|
@@ -81,14 +95,21 @@ module LogStash::PluginMixins::HttpClient
|
|
81
95
|
end
|
82
96
|
if (@truststore_path)
|
83
97
|
c[:ssl].merge!(
|
84
|
-
truststore
|
98
|
+
:truststore => @truststore_path,
|
99
|
+
:truststore_type => @truststore_type
|
85
100
|
)
|
86
101
|
|
87
102
|
# JKS files have optional passwords if programatically created
|
88
103
|
if (@truststore_password)
|
89
|
-
c[:ssl].merge!(truststore_password: @truststore_password)
|
104
|
+
c[:ssl].merge!(truststore_password: @truststore_password.value)
|
90
105
|
end
|
91
106
|
end
|
107
|
+
if @client_cert && @client_key
|
108
|
+
c[:ssl][:client_cert] = @client_cert
|
109
|
+
c[:ssl][:client_key] = @client_key
|
110
|
+
elsif !!@client_cert ^ !!@client_key
|
111
|
+
raise InvalidHTTPConfigError, "You must specify both client_cert and client_key for an HTTP client, or neither!"
|
112
|
+
end
|
92
113
|
|
93
114
|
c
|
94
115
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-mixin-http_client'
|
3
|
-
s.version = '0.0
|
3
|
+
s.version = '1.0.0'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "AWS mixins to provide a unified interface for Amazon Webservice"
|
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/plugin install gemname. This gem is not a stand-alone program"
|
@@ -9,7 +9,7 @@ end
|
|
9
9
|
|
10
10
|
describe LogStash::PluginMixins::HttpClient do
|
11
11
|
let(:basic_config) { {} }
|
12
|
-
let(:impl) { Dummy.new(basic_config)
|
12
|
+
let(:impl) { Dummy.new(basic_config) }
|
13
13
|
|
14
14
|
it "should initialize with no extra settings" do
|
15
15
|
expect {
|
@@ -22,15 +22,15 @@ describe LogStash::PluginMixins::HttpClient do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it "#client should return the client" do
|
25
|
-
expect(impl.client).to be_a(Manticore::Client)
|
25
|
+
expect(impl.send(:client)).to be_a(Manticore::Client)
|
26
26
|
end
|
27
27
|
|
28
28
|
it "#client should return the same client" do
|
29
|
-
expect(impl.client).to eql(impl.client)
|
29
|
+
expect(impl.send(:client)).to eql(impl.client)
|
30
30
|
end
|
31
31
|
|
32
32
|
shared_examples "setting ca bundles" do |key|
|
33
|
-
subject { Dummy.new(conf).client_config }
|
33
|
+
subject { Dummy.new(conf).send(:client_config) }
|
34
34
|
|
35
35
|
it "should correctly set the path" do
|
36
36
|
expect(subject[:ssl][key]).to eql(path)
|
@@ -54,4 +54,41 @@ describe LogStash::PluginMixins::HttpClient do
|
|
54
54
|
include_examples("setting ca bundles", :truststore)
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
describe "with a client cert" do
|
59
|
+
let(:file) { Stud::Temporary.file }
|
60
|
+
let(:path) { file.path }
|
61
|
+
after { File.unlink(path)}
|
62
|
+
|
63
|
+
context "with correct client certs" do
|
64
|
+
let(:conf) { basic_config.merge("client_cert" => path, "client_key" => path) }
|
65
|
+
|
66
|
+
it "should create without error" do
|
67
|
+
expect {
|
68
|
+
Dummy.new(conf).client_config
|
69
|
+
}.not_to raise_error
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
shared_examples("raising a configuration error") do
|
74
|
+
it "should raise an error error" do
|
75
|
+
expect {
|
76
|
+
Dummy.new(conf).client_config
|
77
|
+
}.to raise_error(LogStash::PluginMixins::HttpClient::InvalidHTTPConfigError)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "without a key" do
|
82
|
+
let(:conf) { basic_config.merge("client_cert" => path) }
|
83
|
+
|
84
|
+
include_examples("raising a configuration error")
|
85
|
+
end
|
86
|
+
|
87
|
+
context "without a cert" do
|
88
|
+
let(:conf) { basic_config.merge("client_key" => path) }
|
89
|
+
|
90
|
+
include_examples("raising a configuration error")
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
57
94
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-mixin-http_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logstash-core
|