logstash-integration-logstash 1.0.3-java → 1.1.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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +1 -1
  4. data/VERSION +1 -1
  5. data/docs/input-logstash.asciidoc +10 -0
  6. data/lib/logstash/inputs/logstash.rb +5 -1
  7. data/lib/logstash/outputs/logstash.rb +1 -1
  8. data/logstash-integration-logstash.gemspec +1 -1
  9. data/spec/fixtures/certs/generated/client_from_root.jks +0 -0
  10. data/spec/fixtures/certs/generated/client_from_root.key.pem +50 -50
  11. data/spec/fixtures/certs/generated/client_from_root.key.pkcs8.pem +52 -52
  12. data/spec/fixtures/certs/generated/client_from_root.p12 +0 -0
  13. data/spec/fixtures/certs/generated/client_from_root.pem +28 -28
  14. data/spec/fixtures/certs/generated/client_from_untrusted.jks +0 -0
  15. data/spec/fixtures/certs/generated/client_from_untrusted.key.pem +50 -50
  16. data/spec/fixtures/certs/generated/client_from_untrusted.key.pkcs8.pem +52 -52
  17. data/spec/fixtures/certs/generated/client_from_untrusted.p12 +0 -0
  18. data/spec/fixtures/certs/generated/client_from_untrusted.pem +28 -28
  19. data/spec/fixtures/certs/generated/client_self_signed.jks +0 -0
  20. data/spec/fixtures/certs/generated/client_self_signed.key.pem +50 -50
  21. data/spec/fixtures/certs/generated/client_self_signed.key.pkcs8.pem +52 -52
  22. data/spec/fixtures/certs/generated/client_self_signed.p12 +0 -0
  23. data/spec/fixtures/certs/generated/client_self_signed.pem +28 -28
  24. data/spec/fixtures/certs/generated/root.key.pem +50 -50
  25. data/spec/fixtures/certs/generated/root.pem +28 -28
  26. data/spec/fixtures/certs/generated/server_from_root-key-pkcs8.pem +50 -50
  27. data/spec/fixtures/certs/generated/server_from_root.jks +0 -0
  28. data/spec/fixtures/certs/generated/server_from_root.key.pem +50 -50
  29. data/spec/fixtures/certs/generated/server_from_root.key.pkcs8.pem +52 -52
  30. data/spec/fixtures/certs/generated/server_from_root.p12 +0 -0
  31. data/spec/fixtures/certs/generated/server_from_root.pem +29 -29
  32. data/spec/fixtures/certs/generated/untrusted.key.pem +50 -50
  33. data/spec/fixtures/certs/generated/untrusted.pem +28 -28
  34. data/spec/unit/logstash_input_spec.rb +29 -1
  35. data/spec/unit/logstash_output_spec.rb +37 -2
  36. metadata +15 -18
@@ -1,32 +1,32 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIFlTCCA32gAwIBAgIUeNj7QJ+FeZxVSOCx0Zq2Ww4tF/YwDQYJKoZIhvcNAQEL
2
+ MIIFlTCCA32gAwIBAgIUKrpIoReK5N2zR8+1J1OYTemSHG4wDQYJKoZIhvcNAQEL
3
3
  BQAwUjELMAkGA1UEBhMCTFMxCzAJBgNVBAgMAk5BMRMwEQYDVQQHDApIdHRwIElu
4
- cHV0MREwDwYDVQQKDAhMb2dzdGFzaDEOMAwGA1UEAwwFb3RoZXIwHhcNMjQwOTEy
5
- MTgwNDIxWhcNMjkwOTEyMTgwNDIxWjBSMQswCQYDVQQGEwJMUzELMAkGA1UECAwC
4
+ cHV0MREwDwYDVQQKDAhMb2dzdGFzaDEOMAwGA1UEAwwFb3RoZXIwHhcNMjYxMDI5
5
+ MDgxMTI5WhcNMzExMDI5MDgxMTI5WjBSMQswCQYDVQQGEwJMUzELMAkGA1UECAwC
6
6
  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
- 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
- MPlV40rrcL7dQSVPegpaNKhN/WpvU80mmgx1qZNGPEO3Q8OZFA6/7zt1hnEEc4+B
9
- TKPneZtzsHbmanlSA8pAl40NH3njikSpvdmIXkiVxfqCLD2zOB7GIxwommMzGi2V
10
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 1SYmOHOQcU34o0HrA+LK44OCdnH8SePDrJRbrETwvDOn8+lk5djP2VJQr7vdB2bS
18
- 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
- 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
- m1aoDTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B
21
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- eluTBYqoGMZDdLvi+YLnn8IIdMAcSnEG6kRtEcawx8CRtdVVwyba0F0=
7
+ VQQDDAVvdGhlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKOePrpU
8
+ h7eSky2Rq+4YsLy0JcZj6OIs9uyEo3g8NjKFAqB/HbyzJyGfHPSM3YQdLUj6XXr2
9
+ HTzTJ2K0Mi1Cpe3MNxj4Jindy+c7NpBPZdpLmP1k/nibJb/SxCfyURRB/Cgh1AT9
10
+ 8cCPdyn/y3L/UHSu1P1N/mg78/XQXY2qi39Q0z121rwmJBy+6fagF6SntAZhh3Xl
11
+ F4CDchIQ0NkVCWhnaTX3az9zJoB98R5y6jHRh3IxYpGbVQwfhpQmdJJDCQMvCF1b
12
+ 11rqGRkBokw0//FENnZBOg2rI27UT7rdswsoED/gZkdd6rHoXRcdPV8+CRy3Kco1
13
+ 1SH48B/hhss9k2nIHjjTsmfveF1qIhnO8/kBfD3XaMPwomco0dCN/FerChreIdRk
14
+ Lz6/mF4s98puBWXu1hbLjZBB4lVSJTZv/vzh+2DjrEqJwRfv/hbXe6dxzYC5ydb+
15
+ E7YW8cTnEnsj38FkOa4MF5ZO7/ajBWRCViZVMefDi5TsDQXeyWaRzaVIR6KwLOVT
16
+ KiUeToGVUxnFe0WkPpAkFGJDkg0ZYtcd434sey+tCYYyXFRPJDjFLmBuW4vVmJT0
17
+ DeO21GtPBnu4tcFnBydyCJsBaXkwwCoktq8v3RqPLw0nI4gRRNXYlGBvG6gEAx/k
18
+ J5UlApha1Rsqq7Nxz/zpKe+AovItdfwzUHO5AgMBAAGjYzBhMB0GA1UdDgQWBBRM
19
+ 7XH2ag7bTtnSZp9Wbjz6E2D9ajAfBgNVHSMEGDAWgBRM7XH2ag7bTtnSZp9Wbjz6
20
+ E2D9ajAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B
21
+ AQsFAAOCAgEAjUWlk1paU1D71cnPwwrnIUjxbIRDGlSRbUAhYL22CnYsZUpeel9o
22
+ /YwgWJi8Nur0haNBvch/TRO7oAoTpQeuSCTf3pdrNlLSXduqcCEoya9/JIkRyN2Z
23
+ htqTz3EqelguhADlZnUJUHNEjNykg19XQNhWDiMBZQx8d63jcrqC3eIFHuDK6ffE
24
+ pmg3PQb3b3q/4MyBky4i2/4oDUixU9Mdj7faWvgSv/BwbBhSx8mBt0q53LFXBbbo
25
+ JNg31/VNnRtw9RCxnVw4kFV1qp5gU7aHs7uejI55tU8EL0TapZ8Xu+SbIx/u3hD/
26
+ nfjT/PduHwmBFHNPkAH3R4Qh7EDanvDZr4JualUVrRUeSO4F9lA1H7UKa6rAI+Lt
27
+ McMd0LDvs72LxJx0SslpYYujE1i95YM0zIswU8y286FzDZzeazyoIqWIyY3NBB8h
28
+ 6KYjdGvsGqFX/l6JebZA1aN0gYDLSAA6VHQZnmWF9AImDxnBi+EBL1v2Ut3RzRJS
29
+ Oge7zK1m3nuelkjl3yq/8b6MTjAzOEzfloJxEoTHVl5Ak96HW9ndulFD1aWbQZZs
30
+ sd/zlzMVTvxhYbI3yBRQV57ke8oTsSFCAfIYN7yv5vk5LPec/t6hdxjKFmIDbFY4
31
+ 6QmD2q6mq2G1h+B7OhgQdinTkx+eU9s6K6aV45B3EtFc0jcKzudXv5M=
32
32
  -----END CERTIFICATE-----
@@ -28,7 +28,14 @@ describe LogStash::Inputs::Logstash do
28
28
  describe "plugin register" do
29
29
  let(:config) {{ }}
30
30
 
31
- let(:registered_plugin) { plugin.tap(&:register) }
31
+ # Register without letting the inner HTTP input bind a real socket, so these
32
+ # config-reflection unit tests don't depend on port/address availability.
33
+ let(:registered_plugin) do
34
+ plugin.tap do |p|
35
+ allow(p.instance_variable_get(:@internal_http)).to receive(:register)
36
+ p.register
37
+ end
38
+ end
32
39
  context "configuring port" do
33
40
  let(:config) { { "ssl_enabled" => false } } # minimum config
34
41
  context "default value" do
@@ -44,6 +51,27 @@ describe LogStash::Inputs::Logstash do
44
51
  end
45
52
  end
46
53
 
54
+ context "configuring decode_size_limit_bytes" do
55
+ let(:config) { { "ssl_enabled" => false } } # minimum config
56
+
57
+ context "default value" do
58
+ it "is not passed, so the inner codec's default applies" do
59
+ expect(registered_plugin.inner_json_lines_codec_options.keys).not_to include('decode_size_limit_bytes')
60
+ end
61
+ end
62
+
63
+ context "explicitly configured" do
64
+ let(:config) { super().merge("decode_size_limit_bytes" => 512) }
65
+
66
+ it "is passed to the inner codec" do
67
+ expect(registered_plugin.inner_json_lines_codec_options).to include("decode_size_limit_bytes" => 512)
68
+
69
+ inner_http = registered_plugin.instance_variable_get(:@internal_http)
70
+ expect(inner_http.codec).to have_attributes(:decode_size_limit_bytes => 512)
71
+ end
72
+ end
73
+ end
74
+
47
75
  context "configuring host" do
48
76
  let(:config) { { "ssl_enabled" => false } } # minimum config
49
77
  context "default value" do
@@ -202,11 +202,46 @@ describe LogStash::Outputs::Logstash do
202
202
  end
203
203
  end
204
204
 
205
+ describe "#send_events" do
206
+ let(:events) {
207
+ [
208
+ {"message" => "one"},
209
+ {"message" => "two"},
210
+ {"message" => "three"}
211
+ ].map{|eh| LogStash::Event.new(eh)}
212
+ }
213
+
214
+ before(:each) do
215
+ allow(registered_plugin).to receive(:transmit).and_return(:done)
216
+ end
217
+
218
+ it 'invokes #transmit with newline-delimited JSON body' do
219
+ registered_plugin.send(:send_events, events)
220
+
221
+ expect(registered_plugin).to have_received(:transmit) do |body, gzipped_body|
222
+ expect(body).to be_a_kind_of(String)
223
+ expect(gzipped_body).to be_a_kind_of(String)
224
+ .and(have_attributes(:encoding => Encoding::BINARY))
225
+ .and(start_with("\x1F\x8B".b))
226
+ .and(be_gzip_encoded_form_of(body))
227
+
228
+ expect(body.split(/(?<=\n)/)).to have(3).items.and(all(start_with("{").and(end_with("}\n"))))
229
+ end
230
+ end
231
+
232
+ RSpec::Matchers.define :be_gzip_encoded_form_of do |expected|
233
+ match do |actual|
234
+ decoded_actual = Zlib::GzipReader.new(StringIO.new(actual)).read
235
+ decoded_actual == expected
236
+ end
237
+ end
238
+ end
239
+
205
240
  describe "#transmit" do
206
241
  let(:normalized_host_uri) { "https://127.0.0.1:9800" }
207
242
 
208
- let(:encoded_body) { "[]" }
209
- let(:compressed_body) { "\x1F\xC3\xA3\b\x00\xE2\x80\xBA\xE2\x80\x9ACe\x00\x03\xC3\xA3\xC3\xA9\xC3\x82\x02\x00D\xE2\x80\x9Chp\x03\x00\x00\x00".b }
243
+ let(:encoded_body) { %w({"this":1}\n{"that":2}\n) }
244
+ let(:compressed_body) { "\x1F\x8B\b\x00\xC0\xECQg\x00\xFF\x8BV\xAA\x8EQ*\xC9\xC8,\x8EQ\xB22\xAC\x8D\x89\xC9\x03s\x13K\x80\\#\x10W)\x16\x00\x00g\xDEy\"\x00\x00\x00".b }
210
245
 
211
246
  subject(:transmit_result) { registered_plugin.send(:transmit, encoded_body, compressed_body) }
212
247
 
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-integration-logstash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-09-12 00:00:00.000000000 Z
10
+ date: 2026-10-29 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
13
+ name: logstash-core-plugin-api
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
@@ -19,7 +19,6 @@ dependencies:
19
19
  - - "<="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '2.99'
22
- name: logstash-core-plugin-api
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,12 +30,12 @@ dependencies:
31
30
  - !ruby/object:Gem::Version
32
31
  version: '2.99'
33
32
  - !ruby/object:Gem::Dependency
33
+ name: logstash-mixin-plugin_factory_support
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - "~>"
37
37
  - !ruby/object:Gem::Version
38
38
  version: '1.0'
39
- name: logstash-mixin-plugin_factory_support
40
39
  type: :runtime
41
40
  prerelease: false
42
41
  version_requirements: !ruby/object:Gem::Requirement
@@ -45,12 +44,12 @@ dependencies:
45
44
  - !ruby/object:Gem::Version
46
45
  version: '1.0'
47
46
  - !ruby/object:Gem::Dependency
47
+ name: logstash-mixin-validator_support
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '1.1'
53
- name: logstash-mixin-validator_support
54
53
  type: :runtime
55
54
  prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
@@ -59,26 +58,26 @@ dependencies:
59
58
  - !ruby/object:Gem::Version
60
59
  version: '1.1'
61
60
  - !ruby/object:Gem::Dependency
61
+ name: logstash-codec-json_lines
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: '3.1'
67
- name: logstash-codec-json_lines
66
+ version: '3.2'
68
67
  type: :runtime
69
68
  prerelease: false
70
69
  version_requirements: !ruby/object:Gem::Requirement
71
70
  requirements:
72
71
  - - "~>"
73
72
  - !ruby/object:Gem::Version
74
- version: '3.1'
73
+ version: '3.2'
75
74
  - !ruby/object:Gem::Dependency
75
+ name: logstash-mixin-http_client
76
76
  requirement: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
80
  version: '7.3'
81
- name: logstash-mixin-http_client
82
81
  type: :runtime
83
82
  prerelease: false
84
83
  version_requirements: !ruby/object:Gem::Requirement
@@ -87,12 +86,12 @@ dependencies:
87
86
  - !ruby/object:Gem::Version
88
87
  version: '7.3'
89
88
  - !ruby/object:Gem::Dependency
89
+ name: logstash-input-http
90
90
  requirement: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
94
  version: 3.7.0
95
- name: logstash-input-http
96
95
  type: :runtime
97
96
  prerelease: false
98
97
  version_requirements: !ruby/object:Gem::Requirement
@@ -101,12 +100,12 @@ dependencies:
101
100
  - !ruby/object:Gem::Version
102
101
  version: 3.7.0
103
102
  - !ruby/object:Gem::Dependency
103
+ name: stud
104
104
  requirement: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - ">="
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
- name: stud
110
109
  type: :runtime
111
110
  prerelease: false
112
111
  version_requirements: !ruby/object:Gem::Requirement
@@ -115,12 +114,12 @@ dependencies:
115
114
  - !ruby/object:Gem::Version
116
115
  version: '0'
117
116
  - !ruby/object:Gem::Dependency
117
+ name: logstash-devutils
118
118
  requirement: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - ">="
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
- name: logstash-devutils
124
123
  type: :development
125
124
  prerelease: false
126
125
  version_requirements: !ruby/object:Gem::Requirement
@@ -129,12 +128,12 @@ dependencies:
129
128
  - !ruby/object:Gem::Version
130
129
  version: '0'
131
130
  - !ruby/object:Gem::Dependency
131
+ name: rspec-collection_matchers
132
132
  requirement: !ruby/object:Gem::Requirement
133
133
  requirements:
134
134
  - - ">="
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
- name: rspec-collection_matchers
138
137
  type: :development
139
138
  prerelease: false
140
139
  version_requirements: !ruby/object:Gem::Requirement
@@ -143,12 +142,12 @@ dependencies:
143
142
  - !ruby/object:Gem::Version
144
143
  version: '0'
145
144
  - !ruby/object:Gem::Dependency
145
+ name: random-port
146
146
  requirement: !ruby/object:Gem::Requirement
147
147
  requirements:
148
148
  - - ">="
149
149
  - !ruby/object:Gem::Version
150
150
  version: '0'
151
- name: random-port
152
151
  type: :development
153
152
  prerelease: false
154
153
  version_requirements: !ruby/object:Gem::Requirement
@@ -217,7 +216,6 @@ metadata:
217
216
  logstash_plugin: 'true'
218
217
  logstash_group: integration
219
218
  integration_plugins: logstash-input-logstash,logstash-output-logstash
220
- post_install_message:
221
219
  rdoc_options: []
222
220
  require_paths:
223
221
  - lib
@@ -233,8 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
231
  - !ruby/object:Gem::Version
234
232
  version: '0'
235
233
  requirements: []
236
- rubygems_version: 3.3.26
237
- signing_key:
234
+ rubygems_version: 3.6.3
238
235
  specification_version: 4
239
236
  summary: Collection of Logstash plugins that enable sending events from one Logstash
240
237
  pipeline to another