logstash-input-irc 3.0.5 → 3.0.6

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
- SHA1:
3
- metadata.gz: a906d1aa29a29c2110cd2ebb3f3c071edf20c1b8
4
- data.tar.gz: ee82f1d99d13842c5283d00fbd5b9225ab9f0105
2
+ SHA256:
3
+ metadata.gz: c61c7494644d96e7f3e5501d46712ace4228ff2b2bcf5cfabf93098eca16c0b9
4
+ data.tar.gz: 40a95b5e27c74dcbcd7ff78f999818aa3a1396c03d9b873cb06b7cd352b3ee57
5
5
  SHA512:
6
- metadata.gz: 754f1c068911131beb8a2b5b233e77508a8d578d0deeee6618211baf1909b060fade16bfdb4e66a497a0d9f4b9c7817bd70ad8f044bf6e0e6215683d47b09144
7
- data.tar.gz: de9fa78c0dc8dabd76d0ac39a93f5a32dc635513aba3acca5d61c652eb664c425120ac06cc777d304cdeb998418dc716d33217c0070de1fd82d91eae752207c0
6
+ metadata.gz: 3537b0a6d751872c48fdd403d47855e764a7aa83602a81587dba50c8c03858c0c9862f0cbec759e7957990396bc42265c40b3ef617df2c440211283705c0a71e
7
+ data.tar.gz: b32a07533cbcd777f7f47e45444e6fcb780041871e9161b3fe6217e6845d8203133aed0e84a61c112454917b95a000a5eb14c32d656910775281455dd6d45d9c
@@ -1,3 +1,8 @@
1
+ ## 3.0.6
2
+ - Fix bug where a connection to an idle IRC channel consumed 100% available CPU
3
+ - Fix issue where a message that did not contain a user's hostname could cause irc input to hang or crash
4
+ - Fix issue where IRC bots could be left running after a pipeline reload
5
+
1
6
  ## 3.0.5
2
7
  - Update gemspec summary
3
8
 
@@ -4,6 +4,9 @@ require "logstash/namespace"
4
4
  require "thread"
5
5
  require "stud/task"
6
6
  require "stud/interval"
7
+
8
+ require "java"
9
+
7
10
  # Read events from an IRC Server.
8
11
  #
9
12
  class LogStash::Inputs::Irc < LogStash::Inputs::Base
@@ -66,7 +69,7 @@ class LogStash::Inputs::Irc < LogStash::Inputs::Base
66
69
  def register
67
70
  require "cinch"
68
71
  @user_stats = Hash.new
69
- @irc_queue = Queue.new
72
+ @irc_queue = java.util.concurrent.LinkedBlockingQueue.new
70
73
  @catch_all = true if @get_stats
71
74
  @logger.info("Connecting to irc server", :host => @host, :port => @port, :nick => @nick, :channels => @channels)
72
75
 
@@ -110,13 +113,11 @@ class LogStash::Inputs::Irc < LogStash::Inputs::Base
110
113
  end
111
114
  end
112
115
  while !stop?
113
- begin
114
- msg = @irc_queue.pop(true)
115
- handle_response(msg, output_queue)
116
- rescue ThreadError
117
- # Empty queue
118
- end
116
+ msg = @irc_queue.poll(1, java.util.concurrent.TimeUnit::SECONDS)
117
+ handle_response(msg, output_queue) unless msg.nil?
119
118
  end
119
+ ensure
120
+ stop rescue logger.warn("irc input failed to shutdown gracefully: #{$!.message}")
120
121
  end # def run
121
122
 
122
123
  RPL_NAMREPLY = "353"
@@ -149,7 +150,11 @@ class LogStash::Inputs::Irc < LogStash::Inputs::Base
149
150
  event.set("channel", msg.channel.to_s)
150
151
  event.set("nick", msg.user.nick)
151
152
  event.set("server", "#{@host}:#{@port}")
152
- event.set("host", msg.user.host)
153
+ # The user's host attribute is an optional part of the message format;
154
+ # when it is not included, `Cinch::User#host` times out waiting for it
155
+ # to be populated, raising an exception; use `Cinch::User#data` to get
156
+ # host, which includes the user attributes as-parsed.
157
+ event.set("host", msg.user.data[:host])
153
158
  output_queue << event
154
159
  end
155
160
  end
@@ -167,7 +172,7 @@ class LogStash::Inputs::Irc < LogStash::Inputs::Base
167
172
  end
168
173
 
169
174
  def stop
170
- @request_names_thread.stop! if @request_names_thread
171
- @bot_thread.stop!
175
+ @request_names_thread.stop! if @request_names_thread && !@request_names_thread.stop?
176
+ @bot_thread.stop! if @bot_thread && !@bot_thread.stop?
172
177
  end
173
178
  end # class LogStash::Inputs::Irc
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-irc'
4
- s.version = '3.0.5'
4
+ s.version = '3.0.6'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads events from an IRC server"
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"
@@ -33,11 +33,13 @@ describe LogStash::Inputs::Irc do
33
33
  let(:msg) { double("message") }
34
34
  let(:user) { double("user") }
35
35
 
36
+ let(:user_data) { { host: "host", nick: "nick"} }
37
+
36
38
  before(:each) do
37
39
  allow(msg).to receive(:message).and_return("message")
38
40
  allow(msg).to receive(:command).and_return("command")
39
- allow(user).to receive(:host).and_return("host")
40
- allow(user).to receive(:nick).and_return("nick")
41
+ allow(user).to receive(:data).and_return(user_data)
42
+ allow(user).to receive(:nick).and_return(user_data[:nick])
41
43
  allow(msg).to receive(:user).and_return(user)
42
44
  allow(msg).to receive(:prefix).and_return("prefix")
43
45
  allow(msg).to receive(:channel).and_return("channel")
@@ -74,5 +76,18 @@ describe LogStash::Inputs::Irc do
74
76
  it "receive events with nick information" do
75
77
  expect(event.get("nick")).to eq("nick")
76
78
  end
79
+
80
+ it "receive events with host information" do
81
+ expect(event.get("host")).to eq("host")
82
+ end
83
+
84
+ context "when host is unavailable" do
85
+
86
+ let(:user_data) { super().merge(host: nil)}
87
+
88
+ it "handles unknown host well" do
89
+ expect(event.get("host")).to be_nil
90
+ end
91
+ end
77
92
  end
78
93
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-irc
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.5
4
+ version: 3.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-14 00:00:00.000000000 Z
11
+ date: 2017-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -86,7 +86,9 @@ dependencies:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
- 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
89
+ description: This gem is a Logstash plugin required to be installed on top of the
90
+ Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
91
+ gem is not a stand-alone program
90
92
  email: info@elastic.co
91
93
  executables: []
92
94
  extensions: []
@@ -125,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
127
  version: '0'
126
128
  requirements: []
127
129
  rubyforge_project:
128
- rubygems_version: 2.4.8
130
+ rubygems_version: 2.6.13
129
131
  signing_key:
130
132
  specification_version: 4
131
133
  summary: Reads events from an IRC server