logstash-output-elasticsearch 11.21.0-java → 11.22.1-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: 670f82b7bbfea1744a5daaf77a069c8872f87e1b15226131a786f826a931cd9c
4
- data.tar.gz: 9aa78b93f19d995562192466ad7b816870706383da69b5050613079a76cd1e92
3
+ metadata.gz: 343fd4ddc3b4bef5b44a75dab05e92e88e745d4ed45c8bac1a1264c49ebea26c
4
+ data.tar.gz: 4db3cccc3c815d076ea5d060735934faedb903dd546fd812db9dfcb51b420815
5
5
  SHA512:
6
- metadata.gz: 71d5c1b1558c4ba2c0bb29ab761980dfaad7005410a5bda436ac7f1d6a637b523aa058176e14eed491e8ffb99503f963c2eb5a9c3423e3d7ebd550f74902913e
7
- data.tar.gz: aa32f8838b2526ae3fbcd3288ef6f848c90d926b0206416c5f2c348855e98494e36721ad9992cfbc238290a7c3e5baa90a518208c4b5cdc6187a80918f7b8716
6
+ metadata.gz: 106914085af2ec4e9eaab10d765eab7aca2f4967eb33bc76c11c87b6cbe77795a10966c3d314b612913c34fd91d9a7320f1c1f6990e2cc39f610ecd3dbefce0e
7
+ data.tar.gz: 507d0193320fdf5f5e48f3afc983f287bf69a8f122c3e1c05ee9854a203a90fc45ace2a337fd187b8744ac8693a4963e19da4fa11daafc1d0100d4346a29191f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 11.22.1
2
+ - Fix, avoid to populate `version` and `version_type` attributes when processing integration metadata and datastream is enabled. [#1161](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1161)
3
+
4
+ ## 11.22.0
5
+ - Added support for propagating event processing metadata when this output is downstream of an Elastic Integration Filter and configured _without_ explicit `version`, `version_type`, or `routing` directives [#1158](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1158)
6
+
1
7
  ## 11.21.0
2
8
  - Added support for propagating event processing metadata when this output is downstream of an Elastic Integration Filter and configured _without_ explicit `index`, `document_id`, or `pipeline` directives [#1155](https://github.com/logstash-plugins/logstash-output-elasticsearch/pull/1155)
3
9
 
@@ -499,8 +499,15 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
499
499
  params[retry_on_conflict_action_name] = @retry_on_conflict
500
500
  end
501
501
 
502
- params[:version] = event.sprintf(@version) if @version
503
- params[:version_type] = event.sprintf(@version_type) if @version_type
502
+ event_control = event.get("[@metadata][_ingest_document]")
503
+ event_version, event_version_type = event_control&.values_at("version", "version_type") rescue nil
504
+
505
+ resolved_version = resolve_version(event, event_version)
506
+ resolved_version_type = resolve_version_type(event, event_version_type)
507
+
508
+ # avoid to add nil valued key-value pairs
509
+ params[:version] = resolved_version unless resolved_version.nil?
510
+ params[:version_type] = resolved_version_type unless resolved_version_type.nil?
504
511
 
505
512
  EventActionTuple.new(action, params, event)
506
513
  end
@@ -541,12 +548,12 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
541
548
  # @private shared event params factory between index and data_stream mode
542
549
  def common_event_params(event)
543
550
  event_control = event.get("[@metadata][_ingest_document]")
544
- event_id, event_pipeline, event_index = event_control&.values_at("id","pipeline","index") rescue nil
551
+ event_id, event_pipeline, event_index, event_routing = event_control&.values_at("id","pipeline","index", "routing") rescue nil
545
552
 
546
553
  params = {
547
554
  :_id => resolve_document_id(event, event_id),
548
555
  :_index => resolve_index!(event, event_index),
549
- routing_field_name => @routing ? event.sprintf(@routing) : nil
556
+ routing_field_name => resolve_routing(event, event_routing)
550
557
  }
551
558
 
552
559
  target_pipeline = resolve_pipeline(event, event_pipeline)
@@ -560,6 +567,24 @@ class LogStash::Outputs::ElasticSearch < LogStash::Outputs::Base
560
567
  params
561
568
  end
562
569
 
570
+ def resolve_version(event, event_version)
571
+ return event_version if event_version && !@version
572
+ event.sprintf(@version) if @version
573
+ end
574
+ private :resolve_version
575
+
576
+ def resolve_version_type(event, event_version_type)
577
+ return event_version_type if event_version_type && !@version_type
578
+ event.sprintf(@version_type) if @version_type
579
+ end
580
+ private :resolve_version_type
581
+
582
+ def resolve_routing(event, event_routing)
583
+ return event_routing if event_routing && !@routing
584
+ @routing ? event.sprintf(@routing) : nil
585
+ end
586
+ private :resolve_routing
587
+
563
588
  def resolve_document_id(event, event_id)
564
589
  return event.sprintf(@document_id) if @document_id
565
590
  return event_id || nil
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-elasticsearch'
3
- s.version = '11.21.0'
3
+ s.version = '11.22.1'
4
4
  s.licenses = ['apache-2.0']
5
5
  s.summary = "Stores logs in Elasticsearch"
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"
@@ -275,6 +275,130 @@ describe LogStash::Outputs::ElasticSearch do
275
275
  let(:event_fields) {{}}
276
276
  let(:event) { LogStash::Event.new(event_fields)}
277
277
 
278
+ context "when plugin's version is specified" do
279
+ let(:options) { super().merge("version" => "123")}
280
+
281
+ context "when the event contains an integration metadata version" do
282
+ let(:event) { LogStash::Event.new({"@metadata" => {"_ingest_document" => {"version" => "456"}}}) }
283
+
284
+ it "plugin's version is used" do
285
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:version => "123")
286
+ end
287
+ end
288
+
289
+ context "when the event DOESN'T contains an integration metadata version" do
290
+ it "plugin's version is used" do
291
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:version => "123")
292
+ end
293
+ end
294
+ end
295
+
296
+ context "when plugin's version is NOT specified" do
297
+ context "when the event contains an integration metadata version" do
298
+ let(:event) { LogStash::Event.new({"@metadata" => {"_ingest_document" => {"version" => "456"}}}) }
299
+
300
+ context "when datastream settings are NOT configured" do
301
+ it "event's metadata version is used" do
302
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:version => "456")
303
+ end
304
+ end
305
+
306
+ context "when datastream settings are configured" do
307
+ # NOTE: we validate with datastream-specific `data_stream_event_action_tuple`
308
+ let(:event_fields) { super().merge({"data_stream" => {"type" => "logs", "dataset" => "generic", "namespace" => "default"}}) }
309
+
310
+ it "no version is used" do
311
+ expect(subject.send(:data_stream_event_action_tuple, event)[1]).to_not include(:version)
312
+ end
313
+ end
314
+ end
315
+
316
+ context "when the event DOESN'T contain an integration metadata version" do
317
+ it "plugin's default id mechanism is used" do
318
+ expect(subject.send(:event_action_tuple, event)[1]).to_not include(:version)
319
+ end
320
+ end
321
+ end
322
+
323
+ context "when plugin's version_type is specified" do
324
+ let(:options) { super().merge("version_type" => "internal")}
325
+
326
+ context "when the event contains an integration metadata version_type" do
327
+ let(:event) { LogStash::Event.new({"@metadata" => {"_ingest_document" => {"version_type" => "external"}}}) }
328
+
329
+ context "when datastream settings are NOT configured" do
330
+ it "plugin's version_type is used" do
331
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:version_type => "internal")
332
+ end
333
+ end
334
+
335
+ context "when datastream settings are configured" do
336
+ # NOTE: we validate with datastream-specific `data_stream_event_action_tuple`
337
+ let(:event_fields) { super().merge({"data_stream" => {"type" => "logs", "dataset" => "generic", "namespace" => "default"}}) }
338
+
339
+ it "no version_type is used" do
340
+ expect(subject.send(:data_stream_event_action_tuple, event)[1]).to_not include(:version_type)
341
+ end
342
+ end
343
+ end
344
+
345
+ context "when the event DOESN'T contains an integration metadata version_type" do
346
+ it "plugin's version_type is used" do
347
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:version_type => "internal")
348
+ end
349
+ end
350
+ end
351
+
352
+ context "when plugin's version_type is NOT specified" do
353
+ context "when the event contains an integration metadata version_type" do
354
+ let(:event) { LogStash::Event.new({"@metadata" => {"_ingest_document" => {"version_type" => "external"}}}) }
355
+
356
+ it "event's metadata version_type is used" do
357
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:version_type => "external")
358
+ end
359
+ end
360
+
361
+ context "when the event DOESN'T contain an integration metadata version_type" do
362
+ it "plugin's default id mechanism is used" do
363
+ expect(subject.send(:event_action_tuple, event)[1]).to_not include(:version_type)
364
+ end
365
+ end
366
+ end
367
+
368
+ context "when plugin's routing is specified" do
369
+ let(:options) { super().merge("routing" => "settings_routing")}
370
+
371
+ context "when the event contains an integration metadata routing" do
372
+ let(:event) { LogStash::Event.new({"@metadata" => {"_ingest_document" => {"routing" => "meta-document-routing"}}}) }
373
+
374
+ it "plugin's routing is used" do
375
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:routing => "settings_routing")
376
+ end
377
+ end
378
+
379
+ context "when the event DOESN'T contains an integration metadata routing" do
380
+ it "plugin's routing is used" do
381
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:routing => "settings_routing")
382
+ end
383
+ end
384
+ end
385
+
386
+ context "when plugin's routing is NOT specified" do
387
+ context "when the event contains an integration metadata routing" do
388
+ let(:event) { LogStash::Event.new({"@metadata" => {"_ingest_document" => {"routing" => "meta-document-routing"}}}) }
389
+
390
+ it "event's metadata routing is used" do
391
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:routing => "meta-document-routing")
392
+ end
393
+ end
394
+
395
+ context "when the event DOESN'T contain an integration metadata routing" do
396
+ it "plugin's default id mechanism is used" do
397
+ expect(subject.send(:event_action_tuple, event)[1]).to include(:routing => nil)
398
+ end
399
+ end
400
+ end
401
+
278
402
  context "when plugin's index is specified" do
279
403
  let(:options) { super().merge("index" => "index_from_settings")}
280
404
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-elasticsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.21.0
4
+ version: 11.22.1
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-10 00:00:00.000000000 Z
11
+ date: 2023-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement