logstash-input-jms 3.2.2-java → 3.3.0-java

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: 17ab471b9058d8bdc626619b3bd60948e8b15022b5c0d7b576295a23f9fd9a6a
4
- data.tar.gz: '09cc9532fc6183256f2d69b436d8dcd70ede94b89d14a8f9247e4f1d6baccf0e'
3
+ metadata.gz: f7e8a70badadf706c39ae7c2c1d91b40be697abba13ec8abe80d7e6a19e355af
4
+ data.tar.gz: 106b0f7af45b2426d6bb8ab3b927699145a8b958ba3ad4ace3cd204061e75199
5
5
  SHA512:
6
- metadata.gz: cf73ec01b747be388ca3e091512806335ddb109d20844710c3bf5acfddd2bf460c8c5ad4210d54da38c5d99fecb140f75ce45f22f374ee220d379ede4d29a8f4
7
- data.tar.gz: df5bf8bc4f1a0fb8efadb71083cc110a5c640c48f637adfb2ce43af0d8daeabfda087519547944966b2a9bc22f23d3342c82346004d7fbb68ddb13ff13d72392
6
+ metadata.gz: 26c0fee3a16983338c36071c8cd0007501f5a26284287bbd3d39da000ad651758a97067647bdb0ce00977358b5ac8b4fe61cdb60e46a93a733e61640c5b5ed62
7
+ data.tar.gz: e93a57c7fb6d4ec2560aed0443821dfe803d93d4e3964437c937765c0a623477a00c2c75ae7777d90c784b5832a2a2a3802d8fec0485de618def9c1dd682cefb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.3.0
2
+ - Added support for decoding multiple events from text or binary messages when using a codec that produces multiple events
3
+
1
4
  ## 3.2.2
2
5
  - Fix: Remove usage of `java_kind_of?` to allow this plugin to be supported for versions of Logstash using jruby-9.3.x
3
6
  [#54](https://github.com/logstash-plugins/logstash-input-jms/pull/54)
@@ -276,7 +276,7 @@ class LogStash::Inputs::Jms < LogStash::Inputs::Threadable
276
276
  # read from the queue/topic until :timeout is reached, or a message is available
277
277
  # (whichever comes first)
278
278
  do_receive_message(subscriber, timeout: @interval * 1000) do |message|
279
- queue_event(message, output_queue)
279
+ queue_events(message, output_queue)
280
280
  break if stop?
281
281
  end
282
282
  end
@@ -296,20 +296,27 @@ class LogStash::Inputs::Jms < LogStash::Inputs::Threadable
296
296
  end
297
297
  end # def run_consumer
298
298
 
299
- def queue_event(msg, output_queue)
300
- begin
301
- if @include_body
302
- if msg.kind_of?(JMS::MapMessage)
303
- event = process_map_message(msg)
304
- elsif msg.kind_of?(JMS::TextMessage) || msg.kind_of?(JMS::BytesMessage)
305
- event = decode_message(msg)
306
- else
307
- @logger.error( "Unsupported message type #{msg.data.class.to_s}" )
308
- end
299
+ def events(msg, &event_handler)
300
+ return enum_for(:events, msg).to_a unless block_given?
301
+
302
+ if @include_body
303
+ if msg.kind_of?(JMS::MapMessage)
304
+ return process_map_message(msg, &event_handler)
305
+ elsif msg.kind_of?(JMS::TextMessage) || msg.kind_of?(JMS::BytesMessage)
306
+ return process_string_message(msg, &event_handler)
307
+ else
308
+ @logger.error( "Unsupported message type #{msg.data.class.to_s}" )
309
309
  end
310
+ end
310
311
 
311
- event ||= event_factory.new_event
312
+ yield event_factory.new_event
313
+ rescue => e
314
+ @logger.error("Failed to create event", :message => msg, :exception => e,
315
+ :backtrace => e.backtrace)
316
+ end
312
317
 
318
+ def queue_events(msg, output_queue)
319
+ events(msg).map do |event|
313
320
  # Here, we can use the JMS Enqueue timestamp as the @timestamp
314
321
  if @use_jms_timestamp && msg.jms_timestamp
315
322
  event.set("@timestamp", LogStash::Timestamp.at(msg.jms_timestamp / 1000, (msg.jms_timestamp % 1000) * 1000))
@@ -327,12 +334,9 @@ class LogStash::Inputs::Jms < LogStash::Inputs::Threadable
327
334
  @properties_setter.call(event, properties)
328
335
  end
329
336
 
330
- decorate(event)
331
- output_queue << event
332
-
333
- rescue => e # parse or event creation error
334
- @logger.error("Failed to create event", :message => msg, :exception => e,
335
- :backtrace => e.backtrace)
337
+ event
338
+ end.each do |ready_event|
339
+ output_queue << ready_event
336
340
  end
337
341
  end
338
342
 
@@ -365,9 +369,17 @@ class LogStash::Inputs::Jms < LogStash::Inputs::Threadable
365
369
 
366
370
  # @param msg [JMS::MapMessage]
367
371
  # @return [LogStash::Event]
368
- def process_map_message(msg)
372
+ def process_map_message(msg, &event_handler)
369
373
  data = to_string_keyed_hash(msg.data)
370
- do_target_check_once_and_get_event_factory.new_event(data)
374
+ yield do_target_check_once_and_get_event_factory.new_event(data)
375
+ end
376
+
377
+ def process_string_message(msg, &event_handler)
378
+ text = msg.to_s # javax.jms.TextMessage#getText (e.g. JSON payload)
379
+ return event_factory.new_event if text.nil?
380
+
381
+ @codec.decode(text, &event_handler)
382
+ @codec.flush(&event_handler)
371
383
  end
372
384
 
373
385
  def do_target_check_once_and_get_event_factory
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-jms'
4
- s.version = '3.2.2'
4
+ s.version = '3.3.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads events from a Jms Broker"
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"
@@ -32,5 +32,6 @@ Gem::Specification.new do |s|
32
32
  s.add_runtime_dependency "jruby-jms", ">= 1.2.0" #(Apache 2.0 license)
33
33
  s.add_runtime_dependency 'semantic_logger', '< 4.0.0'
34
34
 
35
+ s.add_development_dependency 'logstash-codec-line', '~> 3.0'
35
36
  s.add_development_dependency 'logstash-devutils'
36
37
  end
@@ -241,6 +241,19 @@ shared_examples_for "a JMS input" do
241
241
 
242
242
  end
243
243
  end
244
+
245
+ context 'when using a multi-event codec' do
246
+ let(:config) { super().merge('codec' => 'line') }
247
+ let(:message) { 'one' + "\n" + 'two' + "\n" + 'three' }
248
+ it 'emits multiple events' do
249
+ send_message do |session|
250
+ session.message(message)
251
+ end
252
+ expect(queue.size).to eql 3
253
+ expect(queue.map { |e| e.get('message') }).to contain_exactly("one", "two", "three")
254
+ expect(queue).to all(have_header_value("jms_destination", destination))
255
+ end
256
+ end
244
257
  end
245
258
 
246
259
  context 'when the message is map message', :ecs_compatibility_support do
@@ -291,7 +291,7 @@ describe LogStash::Inputs::Jms do
291
291
  allow_any_instance_of(described_class).to receive(:ecs_compatibility).and_return(ecs_compatibility)
292
292
 
293
293
  plugin.register
294
- plugin.queue_event(jms_message_double, queue = [])
294
+ plugin.queue_events(jms_message_double, queue = [])
295
295
  expect(queue.size).to eql 1
296
296
  @event = queue.first
297
297
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-jms
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.2
4
+ version: 3.3.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elasticsearch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-13 00:00:00.000000000 Z
11
+ date: 2025-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -20,8 +20,8 @@ dependencies:
20
20
  - !ruby/object:Gem::Version
21
21
  version: '2.99'
22
22
  name: logstash-core-plugin-api
23
- prerelease: false
24
23
  type: :runtime
24
+ prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
@@ -37,8 +37,8 @@ dependencies:
37
37
  - !ruby/object:Gem::Version
38
38
  version: '3.0'
39
39
  name: logstash-codec-json
40
- prerelease: false
41
40
  type: :runtime
41
+ prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
@@ -51,8 +51,8 @@ dependencies:
51
51
  - !ruby/object:Gem::Version
52
52
  version: '3.0'
53
53
  name: logstash-codec-plain
54
- prerelease: false
55
54
  type: :runtime
55
+ prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
@@ -65,8 +65,8 @@ dependencies:
65
65
  - !ruby/object:Gem::Version
66
66
  version: '1.3'
67
67
  name: logstash-mixin-ecs_compatibility_support
68
- prerelease: false
69
68
  type: :runtime
69
+ prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
@@ -79,8 +79,8 @@ dependencies:
79
79
  - !ruby/object:Gem::Version
80
80
  version: '1.0'
81
81
  name: logstash-mixin-event_support
82
- prerelease: false
83
82
  type: :runtime
83
+ prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
@@ -93,8 +93,8 @@ dependencies:
93
93
  - !ruby/object:Gem::Version
94
94
  version: '1.0'
95
95
  name: logstash-mixin-validator_support
96
- prerelease: false
97
96
  type: :runtime
97
+ prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
@@ -107,8 +107,8 @@ dependencies:
107
107
  - !ruby/object:Gem::Version
108
108
  version: 1.2.0
109
109
  name: jruby-jms
110
- prerelease: false
111
110
  type: :runtime
111
+ prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - ">="
@@ -121,13 +121,27 @@ dependencies:
121
121
  - !ruby/object:Gem::Version
122
122
  version: 4.0.0
123
123
  name: semantic_logger
124
- prerelease: false
125
124
  type: :runtime
125
+ prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "<"
129
129
  - !ruby/object:Gem::Version
130
130
  version: 4.0.0
131
+ - !ruby/object:Gem::Dependency
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '3.0'
137
+ name: logstash-codec-line
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '3.0'
131
145
  - !ruby/object:Gem::Dependency
132
146
  requirement: !ruby/object:Gem::Requirement
133
147
  requirements:
@@ -135,8 +149,8 @@ dependencies:
135
149
  - !ruby/object:Gem::Version
136
150
  version: '0'
137
151
  name: logstash-devutils
138
- prerelease: false
139
152
  type: :development
153
+ prerelease: false
140
154
  version_requirements: !ruby/object:Gem::Requirement
141
155
  requirements:
142
156
  - - ">="
@@ -186,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
200
  - !ruby/object:Gem::Version
187
201
  version: '0'
188
202
  requirements: []
189
- rubygems_version: 3.1.6
203
+ rubygems_version: 3.3.26
190
204
  signing_key:
191
205
  specification_version: 4
192
206
  summary: Reads events from a Jms Broker