logstash-output-http 2.0.5 → 2.1.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/CHANGELOG.md +4 -0
- data/README.md +2 -0
- data/lib/logstash/outputs/http.rb +23 -15
- data/logstash-output-http.gemspec +3 -7
- data/spec/outputs/http_spec.rb +27 -9
- metadata +26 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fae9178467d58576560fe35574cd6a2c66363d09
|
4
|
+
data.tar.gz: a631d6b89069d8c42a0bbf07a5e187cfdadd4bd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0232e0887bcda5e10903210fb6d0556aad188deca1f64f1415ce697024f06f2d387211d59e8446b6e6cdaa88074f9618452ed1b3108b53d2436f28b8e23b2cd4
|
7
|
+
data.tar.gz: 74ffbf0a24cb748f8ba2f3518ed321c6366295ab3a7de7f7cccd01540b757d723840075206f5a9c744be0ca8bd2784329f9be6f190feeeeaebe61f74090e3387
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Logstash Plugin
|
2
2
|
|
3
|
+
[](https://travis-ci.org/logstash-plugins/logstash-output-http)
|
4
|
+
|
3
5
|
This is a plugin for [Logstash](https://github.com/elastic/logstash).
|
4
6
|
|
5
7
|
It is fully free and fully open source. The license is Apache 2.0, meaning you are pretty much free to use it however you want in whatever way.
|
@@ -89,31 +89,36 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
|
|
89
89
|
validate_format!
|
90
90
|
end # def register
|
91
91
|
|
92
|
-
|
93
|
-
|
94
|
-
|
92
|
+
def multi_receive(events)
|
93
|
+
events.each {|event| receive(event, :parallel)}
|
94
|
+
client.execute!
|
95
|
+
end
|
96
|
+
|
97
|
+
# Once we no longer need to support Logstash < 2.2 (pre-ng-pipeline)
|
98
|
+
# We don't need to handle :background style requests
|
99
|
+
#
|
100
|
+
# We use :background style requests for Logstash < 2.2 because before the microbatching
|
101
|
+
# pipeline performance is greatly improved by having some degree of async behavior.
|
102
|
+
#
|
103
|
+
# In Logstash 2.2 and after things are much simpler, we just run each batch in parallel
|
104
|
+
# This will make performance much easier to reason about, and more importantly let us guarantee
|
105
|
+
# that if `multi_receive` returns all items have been sent.
|
106
|
+
def receive(event, async_type=:background)
|
95
107
|
body = event_body(event)
|
96
108
|
|
97
109
|
# Block waiting for a token
|
98
|
-
token = @request_tokens.pop
|
110
|
+
token = @request_tokens.pop if async_type == :background
|
99
111
|
|
100
112
|
# Send the request
|
101
113
|
url = event.sprintf(@url)
|
102
114
|
headers = event_headers(event)
|
103
115
|
|
104
116
|
# Create an async request
|
105
|
-
request = client.send(@http_method, url, :body => body, :headers => headers
|
106
|
-
|
107
|
-
# with Maticore version < 0.5 using :async => true places the requests in an @async_requests
|
108
|
-
# list which is used & cleaned by Client#execute! but we are not using it here and we must
|
109
|
-
# purge it manually to avoid leaking requests.
|
110
|
-
client.clear_pending
|
111
|
-
|
112
|
-
# attach handlers before performing request
|
117
|
+
request = client.send(async_type).send(@http_method, url, :body => body, :headers => headers)
|
113
118
|
|
114
119
|
request.on_complete do
|
115
120
|
# Make sure we return the token to the pool
|
116
|
-
@request_tokens << token
|
121
|
+
@request_tokens << token if async_type == :background
|
117
122
|
end
|
118
123
|
|
119
124
|
request.on_success do |response|
|
@@ -138,8 +143,11 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
|
|
138
143
|
)
|
139
144
|
end
|
140
145
|
|
141
|
-
|
142
|
-
|
146
|
+
request.call if async_type == :background
|
147
|
+
end
|
148
|
+
|
149
|
+
def close
|
150
|
+
client.close
|
143
151
|
end
|
144
152
|
|
145
153
|
private
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-output-http'
|
4
|
-
s.version = '2.0
|
4
|
+
s.version = '2.1.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "This output lets you `PUT` or `POST` events to a generic HTTP(S) endpoint"
|
7
7
|
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"
|
@@ -20,12 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
|
21
21
|
|
22
22
|
# Gem dependencies
|
23
|
-
s.add_runtime_dependency "logstash-core", ">= 2.0.0
|
24
|
-
s.add_runtime_dependency "logstash-mixin-http_client", ">= 2.0
|
25
|
-
|
26
|
-
# Constrain Maticore dependency to less than 0.5.0 because of changes in the async handling
|
27
|
-
# see note in http.rb line 92-93
|
28
|
-
s.add_runtime_dependency "manticore", "< 0.5.0"
|
23
|
+
s.add_runtime_dependency "logstash-core", ">= 2.0.0", "< 3.0.0"
|
24
|
+
s.add_runtime_dependency "logstash-mixin-http_client", ">= 2.2.0", "< 3.0.0"
|
29
25
|
|
30
26
|
s.add_development_dependency 'logstash-devutils'
|
31
27
|
s.add_development_dependency 'sinatra'
|
data/spec/outputs/http_spec.rb
CHANGED
@@ -92,6 +92,8 @@ describe LogStash::Outputs::Http do
|
|
92
92
|
let(:pool_max) { 10 }
|
93
93
|
let(:num_reqs) { pool_max / 2 }
|
94
94
|
let(:client) { subject.client }
|
95
|
+
let(:client_proxy) { subject.client.background }
|
96
|
+
|
95
97
|
subject {
|
96
98
|
LogStash::Outputs::Http.new("url" => url,
|
97
99
|
"http_method" => method,
|
@@ -99,11 +101,16 @@ describe LogStash::Outputs::Http do
|
|
99
101
|
}
|
100
102
|
|
101
103
|
before do
|
104
|
+
allow(client).to receive(:background).and_return(client_proxy)
|
102
105
|
subject.register
|
103
106
|
end
|
104
107
|
|
108
|
+
after do
|
109
|
+
subject.close
|
110
|
+
end
|
111
|
+
|
105
112
|
it "should receive all the requests" do
|
106
|
-
expect(
|
113
|
+
expect(client_proxy).to receive(:send).
|
107
114
|
with(method.to_sym, url, anything).
|
108
115
|
exactly(num_reqs).times.
|
109
116
|
and_call_original
|
@@ -112,15 +119,17 @@ describe LogStash::Outputs::Http do
|
|
112
119
|
end
|
113
120
|
end
|
114
121
|
|
115
|
-
shared_examples("verb behavior") do |method|
|
122
|
+
shared_examples("verb behavior") do |method, async_type|
|
116
123
|
subject { LogStash::Outputs::Http.new("url" => url, "http_method" => method, "pool_max" => 1) }
|
117
124
|
|
118
125
|
let(:expected_method) { method.clone.to_sym }
|
119
126
|
let(:client) { subject.client }
|
127
|
+
let(:client_proxy) { subject.client.send(async_type) }
|
120
128
|
|
121
129
|
before do
|
130
|
+
allow(client).to receive(async_type).and_return(client_proxy)
|
122
131
|
subject.register
|
123
|
-
allow(
|
132
|
+
allow(client_proxy).to receive(:send).
|
124
133
|
with(expected_method, url, anything).
|
125
134
|
and_call_original
|
126
135
|
allow(subject).to receive(:log_failure).with(any_args)
|
@@ -129,11 +138,11 @@ describe LogStash::Outputs::Http do
|
|
129
138
|
context "performing a get" do
|
130
139
|
describe "invoking the request" do
|
131
140
|
before do
|
132
|
-
subject.receive(event)
|
141
|
+
subject.receive(event, async_type)
|
133
142
|
end
|
134
143
|
|
135
144
|
it "should execute the request" do
|
136
|
-
expect(
|
145
|
+
expect(client_proxy).to have_received(:send).
|
137
146
|
with(expected_method, url, anything)
|
138
147
|
end
|
139
148
|
end
|
@@ -152,8 +161,13 @@ describe LogStash::Outputs::Http do
|
|
152
161
|
let(:url) { "http://localhost:#{port}/bad"}
|
153
162
|
|
154
163
|
before do
|
155
|
-
subject.receive(event)
|
156
|
-
|
164
|
+
subject.receive(event, async_type)
|
165
|
+
|
166
|
+
if async_type == :background
|
167
|
+
wait_for_request
|
168
|
+
else
|
169
|
+
subject.client.execute!
|
170
|
+
end
|
157
171
|
end
|
158
172
|
|
159
173
|
it "should log a failure" do
|
@@ -164,8 +178,12 @@ describe LogStash::Outputs::Http do
|
|
164
178
|
end
|
165
179
|
|
166
180
|
LogStash::Outputs::Http::VALID_METHODS.each do |method|
|
167
|
-
context "when using '#{method}'" do
|
168
|
-
include_examples("verb behavior", method)
|
181
|
+
context "when using '#{method}' via :background" do
|
182
|
+
include_examples("verb behavior", method, :background)
|
183
|
+
end
|
184
|
+
|
185
|
+
context "when using '#{method}' via :parallel" do
|
186
|
+
include_examples("verb behavior", method, :parallel)
|
169
187
|
end
|
170
188
|
end
|
171
189
|
|
metadata
CHANGED
@@ -1,126 +1,112 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.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-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: logstash-core
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0.0.beta2
|
20
|
-
- - <
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 3.0.0
|
23
14
|
requirement: !ruby/object:Gem::Requirement
|
24
15
|
requirements:
|
25
16
|
- - '>='
|
26
17
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.0.0
|
18
|
+
version: 2.0.0
|
28
19
|
- - <
|
29
20
|
- !ruby/object:Gem::Version
|
30
21
|
version: 3.0.0
|
22
|
+
name: logstash-core
|
31
23
|
prerelease: false
|
32
24
|
type: :runtime
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: logstash-mixin-http_client
|
35
25
|
version_requirements: !ruby/object:Gem::Requirement
|
36
26
|
requirements:
|
37
27
|
- - '>='
|
38
28
|
- !ruby/object:Gem::Version
|
39
|
-
version: 2.0.
|
29
|
+
version: 2.0.0
|
40
30
|
- - <
|
41
31
|
- !ruby/object:Gem::Version
|
42
32
|
version: 3.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
43
34
|
requirement: !ruby/object:Gem::Requirement
|
44
35
|
requirements:
|
45
36
|
- - '>='
|
46
37
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.0
|
38
|
+
version: 2.2.0
|
48
39
|
- - <
|
49
40
|
- !ruby/object:Gem::Version
|
50
41
|
version: 3.0.0
|
42
|
+
name: logstash-mixin-http_client
|
51
43
|
prerelease: false
|
52
44
|
type: :runtime
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: manticore
|
55
45
|
version_requirements: !ruby/object:Gem::Requirement
|
56
46
|
requirements:
|
57
|
-
- -
|
47
|
+
- - '>='
|
58
48
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
60
|
-
requirement: !ruby/object:Gem::Requirement
|
61
|
-
requirements:
|
49
|
+
version: 2.2.0
|
62
50
|
- - <
|
63
51
|
- !ruby/object:Gem::Version
|
64
|
-
version: 0.
|
65
|
-
prerelease: false
|
66
|
-
type: :runtime
|
52
|
+
version: 3.0.0
|
67
53
|
- !ruby/object:Gem::Dependency
|
68
|
-
name: logstash-devutils
|
69
|
-
version_requirements: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - '>='
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '0'
|
74
54
|
requirement: !ruby/object:Gem::Requirement
|
75
55
|
requirements:
|
76
56
|
- - '>='
|
77
57
|
- !ruby/object:Gem::Version
|
78
58
|
version: '0'
|
59
|
+
name: logstash-devutils
|
79
60
|
prerelease: false
|
80
61
|
type: :development
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: sinatra
|
83
62
|
version_requirements: !ruby/object:Gem::Requirement
|
84
63
|
requirements:
|
85
64
|
- - '>='
|
86
65
|
- !ruby/object:Gem::Version
|
87
66
|
version: '0'
|
67
|
+
- !ruby/object:Gem::Dependency
|
88
68
|
requirement: !ruby/object:Gem::Requirement
|
89
69
|
requirements:
|
90
70
|
- - '>='
|
91
71
|
- !ruby/object:Gem::Version
|
92
72
|
version: '0'
|
73
|
+
name: sinatra
|
93
74
|
prerelease: false
|
94
75
|
type: :development
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: webrick
|
97
76
|
version_requirements: !ruby/object:Gem::Requirement
|
98
77
|
requirements:
|
99
78
|
- - '>='
|
100
79
|
- !ruby/object:Gem::Version
|
101
80
|
version: '0'
|
81
|
+
- !ruby/object:Gem::Dependency
|
102
82
|
requirement: !ruby/object:Gem::Requirement
|
103
83
|
requirements:
|
104
84
|
- - '>='
|
105
85
|
- !ruby/object:Gem::Version
|
106
86
|
version: '0'
|
87
|
+
name: webrick
|
107
88
|
prerelease: false
|
108
89
|
type: :development
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
109
95
|
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
|
110
96
|
email: info@elastic.co
|
111
97
|
executables: []
|
112
98
|
extensions: []
|
113
99
|
extra_rdoc_files: []
|
114
100
|
files:
|
115
|
-
- lib/logstash/outputs/http.rb
|
116
|
-
- spec/outputs/http_spec.rb
|
117
|
-
- logstash-output-http.gemspec
|
118
|
-
- README.md
|
119
101
|
- CHANGELOG.md
|
120
102
|
- CONTRIBUTORS
|
121
103
|
- Gemfile
|
122
104
|
- LICENSE
|
123
105
|
- NOTICE.TXT
|
106
|
+
- README.md
|
107
|
+
- lib/logstash/outputs/http.rb
|
108
|
+
- logstash-output-http.gemspec
|
109
|
+
- spec/outputs/http_spec.rb
|
124
110
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
125
111
|
licenses:
|
126
112
|
- Apache License (2.0)
|
@@ -143,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
129
|
version: '0'
|
144
130
|
requirements: []
|
145
131
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
132
|
+
rubygems_version: 2.4.8
|
147
133
|
signing_key:
|
148
134
|
specification_version: 4
|
149
135
|
summary: This output lets you `PUT` or `POST` events to a generic HTTP(S) endpoint
|