logstash-input-http_poller 5.3.0 → 5.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59101199a9b6eda278187132d5e5fd719247a893a29917fb305178347f89bf1e
4
- data.tar.gz: 10f4717d83cd6befd62a314939c27db5633e65cd7c83706478efe3c2f42b1983
3
+ metadata.gz: 510ac72c358c306a8377a8cd714a1f58c867283b792e68f0374c79737f758126
4
+ data.tar.gz: 8c375ba083f4d8e6b8b20ced9d2b5c81c7f1322e36c0115dcbedcdc91087d16d
5
5
  SHA512:
6
- metadata.gz: e6eb58b9354d0e60aa5c2d5c1217f8fa769c3c70b8f207c453645b8e12dadd5b533193c8fcb60689319be0d6abdcba5e2de931f956a6b7974739d1cc516dad35
7
- data.tar.gz: 15dcd344b59b3a14184153b82f5be9375427a5ff3cbdf2103922a4c8800624957ed86bff73c45bdf854ac52577e7a899f35c750d123ca8b8fc870e005e36cd5a
6
+ metadata.gz: 54b5171093fc938cb49e273cad550c6430179812b1c47d34b6fd1c307281612ad872a50aee10f420e39002a46e7a7b143162ae331a90bdc42fc4a534e2666762
7
+ data.tar.gz: 87bc152a391d0e76942ead58d80679ce5581275f89863e6e629248751713f17052ecef2d5ca7dcd778d776828be7f20e5fd9338ad4c181d0e5d9ec837faea775
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 5.3.1
2
+ - Fix: make sure plugin is closing the http client [#130](https://github.com/logstash-plugins/logstash-input-http_poller/pull/130)
3
+
1
4
  ## 5.3.0
2
5
  - Feat: added ssl_supported_protocols option [#133](https://github.com/logstash-plugins/logstash-input-http_poller/pull/133)
3
6
 
@@ -49,19 +49,35 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
49
49
  def register
50
50
  @host = Socket.gethostname.force_encoding(Encoding::UTF_8)
51
51
 
52
- @logger.info("Registering http_poller Input", :type => @type, :schedule => @schedule, :timeout => @timeout)
53
-
54
52
  setup_ecs_field!
55
53
  setup_requests!
56
54
  end
57
55
 
58
56
  # @overload
59
57
  def stop
58
+ shutdown_scheduler_and_close_client(:wait)
59
+ end
60
+
61
+ # @overload
62
+ def close
63
+ shutdown_scheduler_and_close_client
64
+ end
65
+
66
+ def shutdown_scheduler_and_close_client(opt = nil)
67
+ @logger.debug("closing http client", client: client)
68
+ begin
69
+ client.close # since Manticore 0.9.0 this shuts-down/closes all resources
70
+ rescue => e
71
+ details = { exception: e.class, message: e.message }
72
+ details[:backtrace] = e.backtrace if @logger.debug?
73
+ @logger.warn "failed closing http client", details
74
+ end
60
75
  if @scheduler
61
- @scheduler.shutdown # on newer Rufus (3.8) this joins on the scheduler thread
76
+ @logger.debug("shutting down scheduler", scheduler: @scheduler)
77
+ @scheduler.shutdown(opt) # on newer Rufus (3.8) this joins on the scheduler thread
62
78
  end
63
- # TODO implement client.close as we as releasing it's pooled resources!
64
79
  end
80
+ private :shutdown_scheduler_and_close_client
65
81
 
66
82
  private
67
83
  def setup_requests!
@@ -179,15 +195,18 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
179
195
 
180
196
  def run_once(queue)
181
197
  @requests.each do |name, request|
198
+ # prevent executing a scheduler kick after the plugin has been stop-ed
199
+ # this could easily happen as the scheduler shutdown is not immediate
200
+ return if stop?
182
201
  request_async(queue, name, request)
183
202
  end
184
203
 
185
- client.execute!
204
+ client.execute! unless stop?
186
205
  end
187
206
 
188
207
  private
189
208
  def request_async(queue, name, request)
190
- @logger.debug? && @logger.debug("Fetching URL", :name => name, :url => request)
209
+ @logger.debug? && @logger.debug("async queueing fetching url", name: name, url: request)
191
210
  started = Time.now
192
211
 
193
212
  method, *request_opts = request
@@ -204,6 +223,7 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
204
223
 
205
224
  private
206
225
  def handle_success(queue, name, request, response, execution_time)
226
+ @logger.debug? && @logger.debug("success fetching url", name: name, url: request)
207
227
  body = response.body
208
228
  # If there is a usable response. HEAD requests are `nil` and empty get
209
229
  # responses come up as "" which will cause the codec to not yield anything
@@ -242,6 +262,7 @@ class LogStash::Inputs::HTTP_Poller < LogStash::Inputs::Base
242
262
  private
243
263
  # Beware, on old versions of manticore some uncommon failures are not handled
244
264
  def handle_failure(queue, name, request, exception, execution_time)
265
+ @logger.debug? && @logger.debug("failed fetching url", name: name, url: request)
245
266
  event = event_factory.new_event
246
267
  event.tag("_http_request_failure")
247
268
  apply_metadata(event, name, request, nil, execution_time)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-http_poller'
3
- s.version = '5.3.0'
3
+ s.version = '5.3.1'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "Decodes the output of an HTTP API into events"
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"
@@ -7,6 +7,15 @@ require "timecop"
7
7
  require 'rspec/matchers/built_in/raise_error.rb'
8
8
  require 'logstash/plugin_mixins/ecs_compatibility_support/spec_helper'
9
9
 
10
+ begin
11
+ # TODO: CI work-around - will most likely be moved to the scheduler mixin
12
+ require 'et-orbi.rb' # a dependency of rufus-scheduler since 3.4
13
+ ::EtOrbi::EoTime.now # might take a long time to initialize - loading time zone
14
+ # data (from tz-info) and thus gets un-predictable on CI, since the scheduler worker
15
+ # thread might be stuck starting while we attempt to shutdown in a given time frame
16
+ rescue LoadError
17
+ end
18
+
10
19
  describe LogStash::Inputs::HTTP_Poller do
11
20
  let(:metadata_target) { "_http_poller_metadata" }
12
21
  let(:queue) { Queue.new }
@@ -201,8 +210,8 @@ describe LogStash::Inputs::HTTP_Poller do
201
210
  end
202
211
 
203
212
  it "should run at the schedule" do
204
- run_plugin_and_yield_queue(plugin, sleep: 3) do |queue|
205
- try(5) { expect(queue.size).to be >= 2 }
213
+ run_plugin_and_yield_queue(plugin, sleep: 3.1) do |queue|
214
+ try(10) { expect(queue.size).to be >= 2 }
206
215
  end
207
216
  end
208
217
  end
@@ -227,8 +236,8 @@ describe LogStash::Inputs::HTTP_Poller do
227
236
  end
228
237
 
229
238
  it "should run at the schedule" do
230
- run_plugin_and_yield_queue(plugin, sleep: 2) do |queue|
231
- try(5) { expect(queue.size).to eq(1) }
239
+ run_plugin_and_yield_queue(plugin, sleep: 4.1) do |queue|
240
+ try(10) { expect(queue.size).to eq(1) }
232
241
  end
233
242
  end
234
243
  end
@@ -247,7 +256,7 @@ describe LogStash::Inputs::HTTP_Poller do
247
256
  #T 0123456
248
257
  #events x x x x
249
258
  #expects 3 events at T=5
250
- try(5) { expect(queue.size).to be_between(2, 3) }
259
+ try(10) { expect(queue.size).to be_between(2, 3) }
251
260
  end
252
261
  end
253
262
  end
@@ -255,15 +264,15 @@ describe LogStash::Inputs::HTTP_Poller do
255
264
  context "given 'in' expression" do
256
265
  let(:opts) {
257
266
  {
258
- "schedule" => { "in" => "2s"},
267
+ "schedule" => { "in" => "1s"},
259
268
  "urls" => default_urls,
260
269
  "codec" => "json",
261
270
  "metadata_target" => metadata_target
262
271
  }
263
272
  }
264
273
  it "should run at the schedule" do
265
- run_plugin_and_yield_queue(plugin, sleep: 2.5) do |queue|
266
- try(5) { expect(queue.size).to eq(1) }
274
+ run_plugin_and_yield_queue(plugin, sleep: 2.05) do |queue|
275
+ try(10) { expect(queue.size).to eq(1) }
267
276
  end
268
277
  end
269
278
  end
@@ -410,14 +419,15 @@ describe LogStash::Inputs::HTTP_Poller do
410
419
  before do
411
420
  plugin.register
412
421
  u = url.is_a?(Hash) ? url["url"] : url # handle both complex specs and simple string URLs
413
- plugin.client.stub(u,
414
- :body => response_body,
415
- :code => code
416
- )
422
+ plugin.client.stub(u, :body => response_body, :code => code)
417
423
  allow(plugin).to receive(:decorate)
418
424
  plugin.send(:run_once, queue)
419
425
  end
420
426
 
427
+ after do
428
+ plugin.close
429
+ end
430
+
421
431
  it "should have a matching message" do
422
432
  expect(event.to_hash).to include(payload)
423
433
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-http_poller
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.0
4
+ version: 5.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-03-28 00:00:00.000000000 Z
12
+ date: 2022-06-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: !ruby/object:Gem::Requirement