logstash-input-rabbitmq 3.2.0 → 3.3.0

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
  SHA1:
3
- metadata.gz: 5caab21a9bb09f1d4af8660f26558c9bde6e9968
4
- data.tar.gz: 522d2d66e0c768a06dc14f7dea3e38cc3e4419c0
3
+ metadata.gz: 234eccd39f2d2459784e232bfee4aca303c51956
4
+ data.tar.gz: 8ff9cd86fbd139dd7a3623316f1b60749a9bfe57
5
5
  SHA512:
6
- metadata.gz: 1d8a4404784a9de832e23c4b1c9272a87997fbeb4fc5984380c27e6c52a1e8f3661f170e8909eb59bfe7fad15c7af4303e327e44da23ce89632e65a737d1b47b
7
- data.tar.gz: 5f01768900d95ddba5259bff24c01856297684c3a46642d78643c96b16d2f508eb37052cb309bc13d8829a6ca3154d97275d85ab96e0c4e22240be6fce2039d7
6
+ metadata.gz: 8e7947a49fc82d0066c9d0563b2dd9ca16d5780ffec7bca130b58a5e1776c3ca7bfaf18528ca1e3f4982ae794f0636e0d029d7e330d6ec9e207bd3117813518a
7
+ data.tar.gz: efb6b29abfdd37f47cf9ea707789561ab5848f2c00e1e59dc66958802527ef793d871b264cc4d9f86b7757f4c96b1243e14bfd4c7017aa346e2fcd222b3589d3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 3.3.0
2
+ - Fix a regression in 3.2.0 that reinstated behavior that duplicated consumers
3
+ - Always declare exchanges used, the exchange now need not exist before LS starts
4
+ - Allow a precise specification of the exchange type
5
+
1
6
  ## 3.2.0
2
7
  - The properties and headers of the messages are now saved in the [@metadata][rabbitmq_headers] and [@metadata][rabbitmq_properties] fields.
3
8
  - Logstash now shuts down if the server sends a basic.cancel method.
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'logstash/plugin_mixins/rabbitmq_connection'
3
3
  require 'logstash/inputs/threadable'
4
+ require 'logstash/event'
4
5
 
5
6
  module LogStash
6
7
  module Inputs
@@ -142,6 +143,9 @@ module LogStash
142
143
  # The name of the exchange to bind the queue to.
143
144
  config :exchange, :validate => :string
144
145
 
146
+ # The type of the exchange to bind to
147
+ config :exchange_type, :validate => :string
148
+
145
149
  # The routing key to use when binding a queue to the exchange.
146
150
  # This is only relevant for direct or topic exchanges.
147
151
  #
@@ -174,6 +178,7 @@ module LogStash
174
178
 
175
179
  def bind_exchange!
176
180
  if @exchange
181
+ @hare_info.exchange = declare_exchange!(@hare_info.channel, @exchange, @exchange_type, @durable)
177
182
  @hare_info.queue.bind(@exchange, :routing_key => @key)
178
183
  end
179
184
  end
@@ -199,8 +204,7 @@ module LogStash
199
204
  # that we rely on MarchHare to do the reconnection for us with auto_reconnect.
200
205
  # Unfortunately, while MarchHare does the reconnection work it won't re-subscribe the consumer
201
206
  # hence the logic below.
202
- @consumer = @hare_info.queue.build_consumer(:block => true,
203
- :on_cancellation => Proc.new { on_cancellation }) do |metadata, data|
207
+ @consumer = @hare_info.queue.build_consumer(:on_cancellation => Proc.new { on_cancellation }) do |metadata, data|
204
208
  @codec.decode(data) do |event|
205
209
  decorate(event)
206
210
  event["@metadata"]["rabbitmq_headers"] = get_headers(metadata)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-rabbitmq'
3
- s.version = '3.2.0'
3
+ s.version = '3.3.0'
4
4
  s.licenses = ['Apache License (2.0)']
5
5
  s.summary = "Pull events from a RabbitMQ exchange."
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/plugin install gemname. This gem is not a stand-alone program"
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
20
20
 
21
21
  # Gem dependencies
22
- s.add_runtime_dependency "logstash-core", ">= 2.0.0.beta2", "< 3.0.0"
22
+ s.add_runtime_dependency "logstash-core", ">= 2.0.0", "< 3.0.0"
23
23
  s.add_runtime_dependency "logstash-mixin-rabbitmq_connection", '>= 2.3.0', '< 3.0.0'
24
24
 
25
25
  s.add_runtime_dependency 'logstash-codec-json'
@@ -2,6 +2,7 @@
2
2
  require "logstash/devutils/rspec/spec_helper"
3
3
  require "logstash/inputs/rabbitmq"
4
4
  require "thread"
5
+ require 'logstash/event'
5
6
 
6
7
  Thread.abort_on_exception = true
7
8
 
@@ -72,9 +73,22 @@ describe LogStash::Inputs::RabbitMQ do
72
73
  let(:key) { "routing key" }
73
74
  let(:rabbitmq_settings) { super.merge("exchange" => exchange, "key" => key) }
74
75
 
75
- it "should bind to the exchange" do
76
- instance.register
77
- expect(queue).to have_received(:bind).with(exchange, :routing_key => key)
76
+ before do
77
+ allow(instance).to receive(:declare_exchange!)
78
+ end
79
+
80
+ context "on register" do
81
+ before do
82
+ instance.register
83
+ end
84
+
85
+ it "should bind to the exchange" do
86
+ expect(queue).to have_received(:bind).with(exchange, :routing_key => key)
87
+ end
88
+
89
+ it "should declare the exchange" do
90
+ expect(instance).to have_received(:declare_exchange!)
91
+ end
78
92
  end
79
93
 
80
94
  context "but not immediately available" do
@@ -165,15 +179,21 @@ describe "with a live server", :integration => true do
165
179
  expect(instance.instance_variable_get(:@hare_info).channel.prefetch).to eql(256)
166
180
  end
167
181
 
168
- describe "receiving a message with a queue specified" do
169
- let(:config) { super.merge("queue" => queue_name) }
182
+ describe "receiving a message with a queue + exchange specified" do
183
+ let(:config) { super.merge("queue" => queue_name, "exchange" => exchange_name, "exchange_type" => "fanout") }
170
184
  let(:event) { output_queue.pop }
171
- let(:queue) { test_channel.queue(queue_name, :auto_delete => true) }
185
+ let(:exchange) { test_channel.exchange(exchange_name, :type => "fanout") }
186
+ let(:exchange_name) { "logstash-input-rabbitmq-#{rand(0xFFFFFFFF)}" }
187
+ #let(:queue) { test_channel.queue(queue_name, :auto_delete => true) }
172
188
  let(:queue_name) { "logstash-input-rabbitmq-#{rand(0xFFFFFFFF)}" }
173
189
 
190
+ after do
191
+ exchange.delete
192
+ end
193
+
174
194
  context "when the message has a payload but no message headers" do
175
195
  before do
176
- queue.publish(message)
196
+ exchange.publish(message)
177
197
  end
178
198
 
179
199
  let(:message) { "Foo Message" }
@@ -193,7 +213,7 @@ describe "with a live server", :integration => true do
193
213
  before do
194
214
  # Don't test every single property but select a few with
195
215
  # different characteristics to get sufficient coverage.
196
- queue.publish("",
216
+ exchange.publish("",
197
217
  :properties => {
198
218
  :app_id => app_id,
199
219
  :timestamp => Java::JavaUtil::Date.new(epoch * 1000),
@@ -215,16 +235,16 @@ describe "with a live server", :integration => true do
215
235
  props = event["@metadata"]["rabbitmq_properties"]
216
236
  expect(props["app-id"]).to eq(app_id)
217
237
  expect(props["delivery-mode"]).to eq(1)
218
- expect(props["exchange"]).to eq("")
238
+ expect(props["exchange"]).to eq(exchange_name)
219
239
  expect(props["priority"]).to eq(priority)
220
- expect(props["routing-key"]).to eq(queue_name)
240
+ expect(props["routing-key"]).to eq("")
221
241
  expect(props["timestamp"]).to eq(epoch)
222
242
  end
223
243
  end
224
244
 
225
245
  context "when message headers are available" do
226
246
  before do
227
- queue.publish("", :properties => { :headers => headers })
247
+ exchange.publish("", :properties => { :headers => headers })
228
248
  end
229
249
 
230
250
  let (:headers) {
@@ -245,8 +265,6 @@ describe "with a live server", :integration => true do
245
265
  end
246
266
 
247
267
  describe LogStash::Inputs::RabbitMQ do
248
- it_behaves_like "an interruptible input plugin" do
249
-
250
- end
268
+ it_behaves_like "an interruptible input plugin"
251
269
  end
252
270
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-rabbitmq
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-08 00:00:00.000000000 Z
11
+ date: 2016-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.0.beta2
19
+ version: 2.0.0
20
20
  - - <
21
21
  - !ruby/object:Gem::Version
22
22
  version: 3.0.0
@@ -24,7 +24,7 @@ dependencies:
24
24
  requirements:
25
25
  - - '>='
26
26
  - !ruby/object:Gem::Version
27
- version: 2.0.0.beta2
27
+ version: 2.0.0
28
28
  - - <
29
29
  - !ruby/object:Gem::Version
30
30
  version: 3.0.0