logstash-output-mqtt 1.1.0 → 1.2.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
  SHA256:
3
- metadata.gz: c13e7a4156045d08c121c0de23f4eaa1a4bce1995b2d079abb4dd15ac7d5c1d9
4
- data.tar.gz: 610ddd709836340d87c55ce1ecc2ef145ca6c6e447d8a9688e55d4f775639457
3
+ metadata.gz: 6466f5b821ccadda609280f2b3fa5f8db9db834a67a09b3687504058233c391a
4
+ data.tar.gz: eadd6cde4e746c043b2ca6fc400ff98f08181cbdf1c930dc2580cc594cb3c99d
5
5
  SHA512:
6
- metadata.gz: f98f37cd1a440228baf58e576765eef0c573d349e857ded201c680fd9c5f87085a11cb63f21262eb95f27b05e00d4eccf8197676b903502f8f7d94adfa666441
7
- data.tar.gz: 27a270fd71d5deba222d85113231be86f43b747e538d11dcc404f459dd88e96a7d1dc26801a8af3ccf6a98a3ff906c55451d664fb964f56f05417730401aba63
6
+ metadata.gz: 3fdd61209f6761f2c06459d2099632472b68880a836224315634b5789fb2334c1955df195c461d2f1285b60d3990b7813a607abc1b7100143ee76d6a37bfeee4
7
+ data.tar.gz: 7ad0be8ab0e16a818673cc4622778fb4b9e88481f5a0e949092fdb4d7428c52b805a00806b892c4f35304c5555edecd02b3c5e6576278989b1e4610d3db4152c
@@ -102,7 +102,6 @@ class LogStash::Outputs::MQTT < LogStash::Outputs::Base
102
102
  # Time in seconds to wait before retrying a connection
103
103
  config :connect_retry_interval, :validate => :number, :default => 10
104
104
 
105
- public
106
105
  def register
107
106
  @options = {
108
107
  :host => @host
@@ -138,50 +137,41 @@ class LogStash::Outputs::MQTT < LogStash::Outputs::Base
138
137
  @codec.on_event do |event, encoded_event|
139
138
  @event_buffer.push([event, encoded_event])
140
139
  end
141
-
142
140
  end # def register
143
141
 
144
- public
145
142
  def receive(event)
146
-
147
143
  @codec.encode(event)
148
144
  handle_events
149
145
  end # def receive
150
146
 
151
- public
152
147
  def multi_receive(events)
153
- events.each do |event|
154
- @codec.encode(event)
155
- end
156
-
148
+ events.each { |event| @codec.encode(event) }
157
149
  # Handle all events at once to prevent taking a new connection for each event
158
150
  handle_events
159
151
  end
160
152
 
161
- public
162
153
  def close
163
-
164
154
  @closing = true
165
155
  end # def close
166
156
 
167
157
  private
168
- def handle_events
169
- # Simple design: connect separately for each event / bunch of events in the buffer
170
- # This way it is easy to cope with network failures, ie. if connection fails just try it again
158
+
159
+ def mqtt_client
171
160
  @logger.debug("Connecting MQTT with options #{@options}")
172
- MQTT::Client.connect(@options) do |client|
173
- while event = @event_buffer.first do
174
- @logger.debug("Publishing MQTT event #{event[1]} with topic #{@topic}, retain #{@retain}, qos #{@qos}")
175
- client.publish(event[0].sprintf(@topic), event[1], @retain, @qos)
176
- @event_buffer.shift
177
- end
178
- end
161
+ @mqtt_client ||= MQTT::Client.connect(@options)
162
+ end
179
163
 
164
+ def handle_events
165
+ # It is easy to cope with network failures, ie. if connection fails just try it again
166
+ while event = @event_buffer.first do
167
+ @logger.debug("Publishing MQTT event #{event[1]} with topic #{@topic}, retain #{@retain}, qos #{@qos}")
168
+ mqtt_client.publish(event[0].sprintf(@topic), event[1], @retain, @qos)
169
+ @event_buffer.shift
170
+ end
180
171
  rescue StandardError => e
181
172
  @logger.error("Error #{e.message} while publishing to MQTT server. Will retry in #{@connect_retry_interval} seconds.")
182
-
173
+ @mqtt_client = nil
183
174
  Stud.stoppable_sleep(@connect_retry_interval, 1) { @closing }
184
175
  retry
185
176
  end # def handle_event
186
-
187
177
  end # class LogStash::Outputs::MQTT
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-mqtt'
3
- s.version = "1.1.0"
4
- s.licenses = ["Apache License (2.0)"]
3
+ s.version = "1.2.0"
4
+ s.licenses = ["Apache-2.0"]
5
5
  s.summary = "This is Logstash output plugin for the http://mqtt.org/[MQTT] protocol"
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"
7
7
  s.authors = ["Tommi Palomäki"]
@@ -22,5 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
23
23
  s.add_runtime_dependency "logstash-codec-json"
24
24
  s.add_runtime_dependency "mqtt"
25
- s.add_development_dependency "logstash-devutils", "< 1.3.5"
25
+
26
+ # 1.3.5 version has some problems, stick to 1.3.4 by now
27
+ s.add_development_dependency "logstash-devutils", "< 1.3.6"
26
28
  end
@@ -4,6 +4,7 @@ require "logstash/outputs/mqtt"
4
4
  require "logstash/codecs/json"
5
5
  require "logstash/event"
6
6
  require "time"
7
+ require "json"
7
8
 
8
9
  describe LogStash::Outputs::MQTT do
9
10
  # Define a sample event and its JSON encoded form
@@ -11,48 +12,37 @@ describe LogStash::Outputs::MQTT do
11
12
  tstamp = Time.parse(datestring)
12
13
  tstamp_utc = tstamp.utc.iso8601(3)
13
14
  let(:sample_event) { LogStash::Event.new("message" => "test message", "@timestamp" => datestring) }
14
- encoded_event = "{\"@timestamp\":\"" + tstamp_utc + "\",\"@version\":\"1\",\"message\":\"test message\"}"
15
+ encoded_event = "{\"message\":\"test message\",\"@version\":\"1\",\"@timestamp\":\"" + tstamp_utc + "\"}"
15
16
 
16
17
  settings = {
17
18
  "host" => "test.mosquitto.org",
18
19
  "topic" => "hello"
19
20
  }
20
21
  let(:output) { LogStash::Outputs::MQTT.new(settings) }
21
- let(:stub_client) { Object.new }
22
+ let(:stub_client) { instance_double(MQTT::Client) }
22
23
 
23
24
  before do
24
25
  output.register
25
26
  end
26
27
 
27
28
  describe "receive message" do
28
-
29
29
  it "connects and publishes with correct arguments" do
30
-
31
30
  expect(MQTT::Client).to receive(:connect).with(
32
31
  :host => "test.mosquitto.org",
33
32
  :port => 8883
34
- ) do |*args, &block|
35
- block.call(stub_client)
36
- end
37
-
33
+ ).and_return(stub_client)
38
34
  expect(stub_client).to receive(:publish).with("hello", encoded_event, false, 0)
39
-
40
35
  output.receive(sample_event)
41
36
  end
42
37
  end
43
38
 
44
39
  describe "multi_receive" do
45
40
  it "connects once and publishes all messages" do
46
-
47
41
  expect(MQTT::Client).to receive(:connect).once.with(
48
42
  :host => "test.mosquitto.org",
49
43
  :port => 8883
50
- ) do |*args, &block|
51
- block.call(stub_client)
52
- end
53
-
44
+ ).and_return(stub_client)
54
45
  expect(stub_client).to receive(:publish).exactly(3).times.with("hello", encoded_event, false, 0)
55
-
56
46
  three_events = [sample_event, sample_event, sample_event]
57
47
  output.multi_receive(three_events)
58
48
  end
@@ -65,14 +55,14 @@ describe "Test subtopic:" do
65
55
  tstamp = Time.parse(datestring)
66
56
  tstamp_utc = tstamp.utc.iso8601(3)
67
57
  let(:sample_event) { LogStash::Event.new("message" => "test message", "@timestamp" => datestring, "subtopic" => "mysubtopic") }
68
- encoded_event = "{\"@timestamp\":\"" + tstamp_utc + "\",\"@version\":\"1\",\"message\":\"test message\",\"subtopic\":\"mysubtopic\"}"
58
+ encoded_event = "{\"@version\":\"1\",\"@timestamp\":\"" + tstamp_utc + "\",\"message\":\"test message\",\"subtopic\":\"mysubtopic\"}"
69
59
 
70
60
  settings = {
71
61
  "host" => "test.mosquitto.org",
72
62
  "topic" => "hello/%{subtopic}"
73
63
  }
74
64
  let(:output) { LogStash::Outputs::MQTT.new(settings) }
75
- let(:stub_client) { Object.new }
65
+ let(:stub_client) { instance_double(MQTT::Client) }
76
66
 
77
67
  before do
78
68
  output.register
@@ -80,16 +70,11 @@ describe "Test subtopic:" do
80
70
 
81
71
  describe "receive message on a subtopic based on a field of an event" do
82
72
  it "connects and publishes" do
83
-
84
73
  expect(MQTT::Client).to receive(:connect).with(
85
74
  :host => "test.mosquitto.org",
86
75
  :port => 8883
87
- ) do |*args, &block|
88
- block.call(stub_client)
89
- end
90
-
76
+ ).and_return(stub_client)
91
77
  expect(stub_client).to receive(:publish).with("hello/mysubtopic", encoded_event, false, 0)
92
-
93
78
  output.receive(sample_event)
94
79
  end
95
80
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-mqtt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tommi Palomäki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-24 00:00:00.000000000 Z
11
+ date: 2018-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -57,7 +57,7 @@ dependencies:
57
57
  requirements:
58
58
  - - "<"
59
59
  - !ruby/object:Gem::Version
60
- version: 1.3.5
60
+ version: 1.3.6
61
61
  name: logstash-devutils
62
62
  prerelease: false
63
63
  type: :development
@@ -65,7 +65,7 @@ dependencies:
65
65
  requirements:
66
66
  - - "<"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.3.5
68
+ version: 1.3.6
69
69
  description: This gem is a logstash plugin required to be installed on top of the
70
70
  Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not
71
71
  a stand-alone program
@@ -85,7 +85,7 @@ files:
85
85
  - spec/outputs/mqtt_spec.rb
86
86
  homepage: https://github.com/kompa3/logstash-output-mqtt
87
87
  licenses:
88
- - Apache License (2.0)
88
+ - Apache-2.0
89
89
  metadata:
90
90
  logstash_plugin: 'true'
91
91
  logstash_group: output
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.6.13
108
+ rubygems_version: 2.7.6
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: This is Logstash output plugin for the http://mqtt.org/[MQTT] protocol