logstash-output-http 5.2.1 → 5.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a0d07cbf8fdcd4bbd6f98617208c4446785b64be7f314865d1dcb3f84a8d00d
4
- data.tar.gz: 280a1a1097797e2822ef442168aa1a5a77114e5d1c8627c2e811d56adeb9e3f7
3
+ metadata.gz: bd00218e30610f309f7870230ffeff01b5d1481b38d8723cb2e938f2067a561b
4
+ data.tar.gz: 6c31789a86e548649b8ae995cab4e5927fe071d4491570d98c3ef454c28649fd
5
5
  SHA512:
6
- metadata.gz: 022e139b5bebe07707c0df01ed0392e6eb5c553d7f1201e5546e2a9f386ea938b71a1cc18421e3a2445031925d21d75ecd3b56a1e2c4b0477f82cbc5e01cf554
7
- data.tar.gz: 3c84c3a83ddd00dd8ba8059d6080114c08269ea233d41d1d768aeb94db9789fca628b57bb6e8137dc0b32c9a57fdec92b0bc2022439810a996cc162e83e82679
6
+ metadata.gz: 0ed20344862d2b1587d8a3b5cb8bb6b71de3c51ac75a91c85f5f1326185438f899ff08573de4613394c0fbae252c572e8c4996f05497e9cf081fc92c227182c1
7
+ data.tar.gz: 11248626b51ec811d865f761e01a7adf219b9967211c20abd71c901ff16d0e551201c7d931d209f19cf40fa6d7dad164e4dbe06f2c13ee2bfa7549bb8a16b1b3
@@ -1,3 +1,7 @@
1
+ ## 5.2.2
2
+ - Fix high CPU usage on retries in json_batch mode. [#89](https://github.com/logstash-plugins/logstash-output-http/pull/89)
3
+ - Enable compression in json_batch mode. [#89](https://github.com/logstash-plugins/logstash-output-http/pull/89)
4
+
1
5
  ## 5.2.1
2
6
  - Docs: Set the default_codec doc attribute.
3
7
 
@@ -11,6 +11,8 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
11
11
 
12
12
  concurrency :shared
13
13
 
14
+ attr_accessor :is_batch
15
+
14
16
  VALID_METHODS = ["put", "post", "patch", "delete", "get", "head"]
15
17
 
16
18
  RETRYABLE_MANTICORE_EXCEPTIONS = [
@@ -107,6 +109,7 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
107
109
  end
108
110
  end
109
111
 
112
+ @is_batch = @format == "json_batch"
110
113
 
111
114
  @headers["Content-Type"] = @content_type
112
115
 
@@ -118,11 +121,7 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
118
121
 
119
122
  def multi_receive(events)
120
123
  return if events.empty?
121
- if @format == "json_batch"
122
- send_json_batch(events)
123
- else
124
- send_events(events)
125
- end
124
+ send_events(events)
126
125
  end
127
126
 
128
127
  class RetryTimerTask < java.util.TimerTask
@@ -138,29 +137,6 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
138
137
  end
139
138
  end
140
139
 
141
- def send_json_batch(events)
142
- attempt = 1
143
- body = LogStash::Json.dump(events.map {|e| map_event(e) })
144
- begin
145
- while true
146
- request = client.send(@http_method, @url, :body => body, :headers => @headers)
147
- response = request.call
148
- break if response_success?(response)
149
- if retryable_response?(response)
150
- log_retryable_response(response)
151
- sleep_for_attempt attempt
152
- attempt += 1
153
- else
154
- log_error_response(response, url, events)
155
- end
156
- end
157
- rescue *RETRYABLE_MANTICORE_EXCEPTIONS => e
158
- logger.warn("Encountered exception during http output send, will retry after delay", :message => e.message, :class => e.class.name)
159
- sleep_for_attempt attempt
160
- retry
161
- end
162
- end
163
-
164
140
  def log_retryable_response(response)
165
141
  if (response.code == 429)
166
142
  @logger.debug? && @logger.debug("Encountered a 429 response, will retry. This is not serious, just flow control via HTTP")
@@ -182,15 +158,20 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
182
158
  successes = java.util.concurrent.atomic.AtomicInteger.new(0)
183
159
  failures = java.util.concurrent.atomic.AtomicInteger.new(0)
184
160
  retries = java.util.concurrent.atomic.AtomicInteger.new(0)
185
-
161
+ event_count = @is_batch ? 1 : events.size
162
+
186
163
  pending = Queue.new
187
- events.each {|e| pending << [e, 0]}
164
+ if @is_batch
165
+ pending << [events, 0]
166
+ else
167
+ events.each {|e| pending << [e, 0]}
168
+ end
188
169
 
189
170
  while popped = pending.pop
190
171
  break if popped == :done
191
172
 
192
173
  event, attempt = popped
193
-
174
+
194
175
  send_event(event, attempt) do |action,event,attempt|
195
176
  begin
196
177
  action = :failure if action == :retry && !@retry_failed
@@ -213,7 +194,7 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
213
194
  end
214
195
 
215
196
  if action == :success || action == :failure
216
- if successes.get+failures.get == events.size
197
+ if successes.get+failures.get == event_count
217
198
  pending << :done
218
199
  end
219
200
  end
@@ -246,8 +227,8 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
246
227
  body = event_body(event)
247
228
 
248
229
  # Send the request
249
- url = event.sprintf(@url)
250
- headers = event_headers(event)
230
+ url = @is_batch ? @url : event.sprintf(@url)
231
+ headers = @is_batch ? @headers : event_headers(event)
251
232
 
252
233
  # Compress the body and add appropriate header
253
234
  if @http_compression == true
@@ -347,6 +328,8 @@ class LogStash::Outputs::Http < LogStash::Outputs::Base
347
328
  LogStash::Json.dump(map_event(event))
348
329
  elsif @format == "message"
349
330
  event.sprintf(@message)
331
+ elsif @format == "json_batch"
332
+ LogStash::Json.dump(event.map {|e| map_event(e) })
350
333
  else
351
334
  encode(map_event(event))
352
335
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-http'
3
- s.version = '5.2.1'
3
+ s.version = '5.2.2'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "Sends events to a generic HTTP or HTTPS endpoint"
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/logstash-plugin install gemname. This gem is not a stand-alone program"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.1
4
+ version: 5.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-06 00:00:00.000000000 Z
11
+ date: 2018-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  version: '0'
134
134
  requirements: []
135
135
  rubyforge_project:
136
- rubygems_version: 2.6.11
136
+ rubygems_version: 2.6.13
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: Sends events to a generic HTTP or HTTPS endpoint