logstash-input-jmx 3.0.6 → 3.0.7

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: f5036f5be1331e266e3760bd750f62fd9cecf1ead4bf311a7ca193896593c7fa
4
- data.tar.gz: 2927501779f323bbee6b0fb3f196e7fec74ef7bbc3ebc3083f5796466d00e0cf
3
+ metadata.gz: c53771abfa6de01498a61244afba4617cc15f2b018c6049ec11fb4e9337b5b9c
4
+ data.tar.gz: 333a64bfec48374fb106d44967017081a18a091469eb2a39ee80e1cf943f86f4
5
5
  SHA512:
6
- metadata.gz: 4a0c91f1da07a43b56275d80d922f25b694891c033d38e903290767a01bfc7dca34043552dd83d1302e78eba53fbb6280411fc3a29caabc8fb1a51216ca0fa84
7
- data.tar.gz: f0d3fceb40422062e5e40acfde3a1e896d68b218ac8ad2c90e3d026672cd01e9dc43c2b37b84d37d669b6987510d5055d39beb41864f137c4d6cb7a96a04edf7
6
+ metadata.gz: 367ab754640b80f64eab341adcdd6391354f1f851acf7bb3d235f3dcd6c9a96179905a994b577f39d909d6cd7c0588f98549003c1cea98084c1d1b23c2c4722c
7
+ data.tar.gz: 5ef2eba33289c66cf37a2685aa70130455b1b5da59a11d20b6c3fdf7421b7d0be5e3ccd5d27bc218f51c71b2f2f4c8d178c82bf37ef86cd41d67067e9cc8275f
@@ -1,3 +1,6 @@
1
+ ## 3.0.7
2
+ - Fixed shutdown handling [#47](https://github.com/logstash-plugins/logstash-input-jmx/pull/47)
3
+
1
4
  ## 3.0.6
2
5
  - Fix documentation issue (correct subheading format)
3
6
 
@@ -202,7 +202,14 @@ class LogStash::Inputs::Jmx < LogStash::Inputs::Base
202
202
  begin
203
203
  @logger.debug('Wait config to retrieve from queue conf')
204
204
  thread_hash_conf = queue_conf.pop
205
- @logger.debug("Retrieve config #{thread_hash_conf} from queue conf")
205
+
206
+ if thread_hash_conf == :END
207
+ # the :END symbol is a signal to terminate the thread
208
+ @logger.debug? && @logger.debug("Received jmx thread termination signal")
209
+ return
210
+ else
211
+ @logger.debug? && @logger.debug("Retrieve config #{thread_hash_conf} from queue conf")
212
+ end
206
213
 
207
214
  @logger.debug('Check if jmx connection need a user/password')
208
215
  if thread_hash_conf.has_key?('username') and thread_hash_conf.has_key?('password')
@@ -213,12 +220,16 @@ class LogStash::Inputs::Jmx < LogStash::Inputs::Base
213
220
  :username => thread_hash_conf['username'],
214
221
  :password => thread_hash_conf['password']
215
222
  else
216
- @logger.debug("Connect to #{thread_hash_conf['host']}:#{thread_hash_conf['port']}")
223
+ @logger.debug("Connect to #{thread_hash_conf['host']}:#{thread_hash_conf['port']}:#{thread_hash_conf['url']}")
217
224
  jmx_connection = JMX::MBean.connection :host => thread_hash_conf['host'],
218
225
  :port => thread_hash_conf['port'],
219
226
  :url => thread_hash_conf['url']
220
227
  end
221
228
 
229
+ if jmx_connection.nil?
230
+ @logger.warn("Invalid nil jmx connection, ignoring", :host => thread_hash_conf['host'], :port => thread_hash_conf['port'], :url => thread_hash_conf['url'])
231
+ next
232
+ end
222
233
 
223
234
  if thread_hash_conf.has_key?('alias')
224
235
  @logger.debug("Set base_metric_path to alias: #{thread_hash_conf['alias']}")
@@ -291,8 +302,6 @@ class LogStash::Inputs::Jmx < LogStash::Inputs::Base
291
302
  end
292
303
  end
293
304
  jmx_connection.close
294
- rescue LogStash::ShutdownSignal
295
- break #free
296
305
  rescue Exception => ex
297
306
  @logger.error(ex.message)
298
307
  @logger.error(ex.backtrace.join("\n"))
@@ -321,7 +330,7 @@ class LogStash::Inputs::Jmx < LogStash::Inputs::Base
321
330
  threads << Thread.new { thread_jmx(@queue_conf,queue) }
322
331
  end
323
332
 
324
- while !@interrupted
333
+ while !stop?
325
334
  @logger.info("Loading configuration files in path", :path => @path)
326
335
  Dir.foreach(@path) do |item|
327
336
  next if item == '.' or item == '..'
@@ -343,6 +352,7 @@ class LogStash::Inputs::Jmx < LogStash::Inputs::Base
343
352
  :exception => ex.message, :backtrace => ex.backtrace)
344
353
  end
345
354
  end
355
+
346
356
  @logger.debug('Wait until the queue conf is empty')
347
357
  delta=0
348
358
  until @queue_conf.empty?
@@ -350,30 +360,25 @@ class LogStash::Inputs::Jmx < LogStash::Inputs::Base
350
360
  delta=delta+1
351
361
  sleep(1)
352
362
  end
363
+
353
364
  wait_time=@polling_frequency-delta
354
365
  if wait_time>0
355
366
  @logger.debug("Wait #{wait_time}s (#{@polling_frequency}-#{delta}(seconds wait until queue conf empty)) before to launch again a new jmx metrics collection")
356
- sleep(wait_time)
367
+ Stud.stoppable_sleep(wait_time) { stop? }
357
368
  else
358
369
  @logger.warn("The time taken to retrieve metrics is more important than the retrieve_interval time set.
359
370
  \nYou must adapt nb_thread, retrieve_interval to the number of jvm/metrics you want to retrieve.")
360
371
  end
361
372
  end
362
- rescue LogStash::ShutdownSignal
363
- #exiting
364
373
  rescue Exception => ex
365
374
  @logger.error(ex.message)
366
375
  @logger.error(ex.backtrace.join("\n"))
367
376
  ensure
368
- threads.each do |thread|
369
- thread.raise(LogStash::ShutdownSignal) if thread.alive?
377
+ @nb_thread.times do |i|
378
+ @logger.debug? && @logger.debug("Signaling termination to jmx thread #{i + 1}")
379
+ @queue_conf << :END
370
380
  end
381
+ threads.each {|t| t.join }
371
382
  end
372
-
373
383
  end
374
-
375
- public
376
- def close
377
- @interrupted = true
378
- end # def close
379
384
  end
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-jmx'
4
- s.version = '3.0.6'
4
+ s.version = '3.0.7'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Retrieves metrics from remote Java applications over JMX"
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/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -12,6 +12,10 @@ describe LogStash::Inputs::Jmx do
12
12
  FileUtils.remove_dir(jmx_config_path)
13
13
  end
14
14
 
15
+ it_behaves_like "an interruptible input plugin" do
16
+ let(:config) {{"path" => jmx_config_path, "nb_thread" => 1, "polling_frequency" => 1}}
17
+ end
18
+
15
19
  subject { LogStash::Inputs::Jmx.new("path" => jmx_config_path)}
16
20
 
17
21
  context "#validate_configuration(conf_hash)" do
@@ -83,6 +87,7 @@ describe LogStash::Inputs::Jmx do
83
87
  subject { LogStash::Inputs::Jmx.new("path" => jmx_config_path, "nb_thread" => 1, "polling_frequency" => 1)}
84
88
 
85
89
  let(:queue) { Queue.new }
90
+
86
91
  it "pass host/port connection parameters to jmx4r" do
87
92
  File.open(File.join(jmx_config_path,"my.config.json"), "wb") { |file| file.write(<<-EOT)
88
93
  {
@@ -100,7 +105,7 @@ describe LogStash::Inputs::Jmx do
100
105
  }).and_return(nil)
101
106
 
102
107
  subject.register
103
- Thread.new(subject) { sleep 0.5; subject.close } # force the plugin to exit
108
+ Thread.new(subject) { sleep 0.5; subject.do_stop } # force the plugin to exit
104
109
  subject.run(queue)
105
110
  end
106
111
 
@@ -122,7 +127,7 @@ describe LogStash::Inputs::Jmx do
122
127
  }).and_return(nil)
123
128
 
124
129
  subject.register
125
- Thread.new(subject) { sleep 0.5; subject.close } # force the plugin to exit
130
+ Thread.new(subject) { sleep 0.5; subject.do_stop } # force the plugin to exit
126
131
  subject.run(queue)
127
132
  end
128
133
 
@@ -147,7 +152,7 @@ describe LogStash::Inputs::Jmx do
147
152
  }).and_return(nil)
148
153
 
149
154
  subject.register
150
- Thread.new(subject) { sleep 0.5; subject.close } # force the plugin to exit
155
+ Thread.new(subject) { sleep 0.5; subject.do_stop } # force the plugin to exit
151
156
  subject.run(queue)
152
157
  end
153
158
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-jmx
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.6
4
+ version: 3.0.7
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-13 00:00:00.000000000 Z
11
+ date: 2018-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement