logstash-input-udp 3.1.3 → 3.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: 29522e18476cbd28b2df6af5c4628d51a05269e925fdedab6f9e461108f1453c
4
- data.tar.gz: 4de2a83077bdc9193c08970ce38a9eb1f42ebb141b45b5d2eb22af42004aeb61
3
+ metadata.gz: 0105afa2ee725c47660577dbf22c2ad2f67be803379a6fd65dd0dfae7a2cafff
4
+ data.tar.gz: 6daebc814537c9219e9b993e97f0a55f2c0bbfb9769bc4ee09930614a3ffd96b
5
5
  SHA512:
6
- metadata.gz: 93217447e2fdb8ea74166fde9759bf66e031d6570dca4dd471f72913d189926e9e0a77c4f6580e6aa13214cbc6d2ddeaaf8d8621d11e34c9393711bb3b681f22
7
- data.tar.gz: 6880681a1da9e4b9399162601532348f47f53414f760077805214e7d25529ae3f00943b467db90fea7b569cda9fb9037fa9b75f89162fb22223b3c6ccb9a2293
6
+ metadata.gz: 982fef22a015e83c177579134eecc8fb042af10fbe78652b465ad5298f04112855fce191a8818b6518c9dc0119e12bd1c468d8944dc7dcc9867f1ebc6f3943d8
7
+ data.tar.gz: c540241bc6cec7b34e0063f950967e58f9c241aebb83903aa389019497f9db40b133fa10cc2f309a449d180982bb811c073922c7e37f537e87421f53fddd4fa2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 3.2.0
2
+ - Clone codec per worker. See https://github.com/logstash-plugins/logstash-input-udp/pull/32
3
+
1
4
  ## 3.1.3
2
5
  - Update gemspec summary
3
6
 
data/CONTRIBUTORS CHANGED
@@ -11,6 +11,7 @@ Contributors:
11
11
  * Pier-Hugues Pellerin (ph)
12
12
  * Richard Pijnenburg (electrical)
13
13
  * kcrayon
14
+ * Colin Surprenant (colinsurprenant)
14
15
 
15
16
  Note: If you've sent us patches, bug reports, or otherwise contributed to
16
17
  Logstash, and you aren't on the list above and want to be, please let us know
@@ -37,6 +37,8 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
37
37
  # before packets will start dropping.
38
38
  config :queue_size, :validate => :number, :default => 2000
39
39
 
40
+ HOST_FIELD = "host".freeze
41
+
40
42
  public
41
43
  def initialize(params)
42
44
  super
@@ -86,7 +88,7 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
86
88
 
87
89
  @input_workers = @workers.times do |i|
88
90
  @logger.debug("Starting UDP worker thread", :worker => i)
89
- Thread.new { inputworker(i) }
91
+ Thread.new(i, @codec.clone) { |i, codec| inputworker(i, codec) }
90
92
  end
91
93
 
92
94
  while !stop?
@@ -109,17 +111,15 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
109
111
  end
110
112
  end # def udp_listener
111
113
 
112
- def inputworker(number)
114
+ def inputworker(number, codec)
113
115
  LogStash::Util::set_thread_name("<udp.#{number}")
114
116
  begin
115
117
  while true
116
118
  payload, client = @input_to_worker.pop
119
+ host = client[3]
117
120
 
118
- @codec.decode(payload) do |event|
119
- decorate(event)
120
- event.set("host", client[3]) if event.get("host").nil?
121
- @output_queue.push(event)
122
- end
121
+ codec.decode(payload) { |event| push_decoded_event(host, event) }
122
+ codec.flush { |event| push_decoded_event(host, event) }
123
123
  end
124
124
  rescue => e
125
125
  @logger.error("Exception in inputworker", "exception" => e, "backtrace" => e.backtrace)
@@ -136,4 +136,12 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
136
136
  @udp.close rescue nil
137
137
  end
138
138
 
139
+ private
140
+
141
+ def push_decoded_event(host, event)
142
+ decorate(event)
143
+ event.set(HOST_FIELD, host) if event.get(HOST_FIELD).nil?
144
+ @output_queue.push(event)
145
+ end
146
+
139
147
  end # class LogStash::Inputs::Udp
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-udp'
4
- s.version = '3.1.3'
4
+ s.version = '3.2.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Reads events over UDP"
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"
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.add_runtime_dependency 'logstash-codec-plain'
26
26
  s.add_runtime_dependency 'stud', '~> 0.0.22'
27
+ s.add_development_dependency 'logstash-codec-line'
27
28
  s.add_development_dependency 'logstash-devutils'
28
29
  end
29
30
 
@@ -9,8 +9,10 @@ describe LogStash::Inputs::Udp do
9
9
  end
10
10
 
11
11
  let!(:helper) { UdpHelpers.new }
12
- let(:port) { rand(1024..65535) }
13
- subject { LogStash::Plugin.lookup("input", "udp").new({ "port" => port }) }
12
+ let(:client) { LogStash::Inputs::Test::UDPClient.new(port) }
13
+ let(:port) { rand(1024..65535) }
14
+ let(:config) { { "port" => port } }
15
+ subject { LogStash::Plugin.lookup("input","udp").new(config) }
14
16
 
15
17
  after :each do
16
18
  subject.close rescue nil
@@ -23,8 +25,6 @@ describe LogStash::Inputs::Udp do
23
25
  end
24
26
 
25
27
  describe "receive" do
26
-
27
- let(:client) { LogStash::Inputs::Test::UDPClient.new(port) }
28
28
  let(:nevents) { 10 }
29
29
 
30
30
  let(:events) do
@@ -46,10 +46,32 @@ describe LogStash::Inputs::Udp do
46
46
  expect(message).to match(/msg \d+/)
47
47
  end
48
48
  end
49
+ end
50
+
51
+ describe "multiple lines per datagram using line codec" do
52
+ # 3 workers for 3 datagrams send below
53
+ let(:config) { { "port" => port, "workers" => 3, "codec" => "line" } }
54
+
55
+ let(:events) do
56
+ helper.input(subject, 8) do
57
+ client.send("line1\nline2")
58
+ client.send("line3\nline4")
59
+ client.send("line5\nline6\nline7\nline8")
60
+ end
61
+ end
49
62
 
63
+ before(:each) do
64
+ subject.register
65
+ end
66
+
67
+ it "should receive events been generated" do
68
+ expect(events.size).to be(8)
69
+ messages = events.map { |event| event.get("message") }.sort # important to sort here because order is unpredictable
70
+ messages.each_index {|i| expect(messages[i]).to match("line#{i + 1}")}
71
+ end
50
72
  end
51
73
 
52
74
  it_behaves_like "an interruptible input plugin" do
53
- let(:config) { { "port" => port } }
75
+ # see https://github.com/elastic/logstash-devutils/blob/9c4a1fbf2b0c4547e428c5a40ed84f60aad17f97/lib/logstash/devutils/rspec/shared_examples.rb
54
76
  end
55
- end
77
+ end
@@ -4,7 +4,6 @@ require "socket"
4
4
  module LogStash::Inputs::Test
5
5
 
6
6
  class UDPClient
7
-
8
7
  attr_reader :host, :port, :socket
9
8
 
10
9
  def initialize(port)
@@ -14,24 +13,18 @@ module LogStash::Inputs::Test
14
13
  socket.connect(host, port)
15
14
  end
16
15
 
17
- def send(msg="")
16
+ def send(msg)
18
17
  begin
19
- send(msg)
20
- rescue Exception => e
21
- puts "send.exception", e
18
+ socket.connect(host, port) if socket.closed?
19
+ socket.send(msg, 0)
20
+ rescue => e
21
+ puts("send exception, retrying", e.inspect)
22
22
  retry
23
23
  end
24
24
  end
25
25
 
26
- def send(msg)
27
- socket.connect(host, port) if socket.closed?
28
- socket.send(msg, 0)
29
- end
30
-
31
26
  def close
32
- socket.close
27
+ socket.close unless socket.closed?
33
28
  end
34
-
35
29
  end
36
-
37
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-udp
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.3
4
+ version: 3.2.0
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-07 00:00:00.000000000 Z
11
+ date: 2017-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: 0.0.22
61
+ - !ruby/object:Gem::Dependency
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ name: logstash-codec-line
68
+ prerelease: false
69
+ type: :development
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
61
75
  - !ruby/object:Gem::Dependency
62
76
  requirement: !ruby/object:Gem::Requirement
63
77
  requirements:
@@ -114,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
128
  version: '0'
115
129
  requirements: []
116
130
  rubyforge_project:
117
- rubygems_version: 2.6.11
131
+ rubygems_version: 2.6.13
118
132
  signing_key:
119
133
  specification_version: 4
120
134
  summary: Reads events over UDP