logstash-input-udp 3.2.1 → 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
  SHA256:
3
- metadata.gz: 65ce03f6729a3d13216ee414e60c83e23aaf0ba9975ab9138339ccc0fcb2373e
4
- data.tar.gz: 60b7a6b91ad030142164d5ce7b80208457735e93f26c70d8861eedf0f324a02e
3
+ metadata.gz: 60d650bd7c475a99512a2152b86460f1b8721772b2b2fd280f646027c77af60b
4
+ data.tar.gz: f99989e62ebfc5854f4c0e98d44b3afc6ca1809d3d61da9d267ffa5c44c69255
5
5
  SHA512:
6
- metadata.gz: 93a7f99e7e3a03c1370877a3f05599880d629581afcd08f47db6cd2416a30175fe791eab6d976e35d652ff96e13d44c85a18c031258657e059b5fb28f5f92de1
7
- data.tar.gz: f78894b90992202b434fe29ba2131336e2c836cbff14025b30d61a4333fdfc9999a5184d53a5d865dba1c436422939d483214cacb7fc4a7986a8daaf9ebe9ca1
6
+ metadata.gz: 6c66d1e0b1f7a694e0ce447571df4477967a3faff0c6064367343ecf1a52621ab1570e5d34e9fcb6486a99ab953da278a1cf5598eafee62d9ef2e0f20eea8166
7
+ data.tar.gz: 014d6c60519f8be62db95fbc09469a2afc46a44a9febaad3a03827c240b756a7721d4f7fd9c81cc9d850975e8b10371dea73fa7d41ac81920469401469c1b7ab
@@ -1,3 +1,7 @@
1
+ ## 3.3.0
2
+ - Add metrics support for events, operations, connections and errors produced during execution. #34
3
+ - Fix support for IPv6 #31
4
+
1
5
  ## 3.2.1
2
6
  - Code cleanup. See https://github.com/logstash-plugins/logstash-input-udp/pull/33
3
7
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012–2016 Elasticsearch <http://www.elastic.co>
1
+ Copyright (c) 2012-2018 Elasticsearch <http://www.elastic.co>
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
@@ -46,7 +46,8 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
46
46
 
47
47
  def register
48
48
  @udp = nil
49
- end
49
+ @metric_errors = metric.namespace(:errors)
50
+ end # def register
50
51
 
51
52
  def run(output_queue)
52
53
  @output_queue = output_queue
@@ -56,6 +57,7 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
56
57
  udp_listener(output_queue)
57
58
  rescue => e
58
59
  @logger.warn("UDP listener died", :exception => e, :backtrace => e.backtrace)
60
+ @metric_errors.increment(:listener)
59
61
  Stud.stoppable_sleep(5) { stop? }
60
62
  retry unless stop?
61
63
  end
@@ -82,7 +84,11 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
82
84
  @udp.close
83
85
  end
84
86
 
85
- @udp = UDPSocket.new(Socket::AF_INET)
87
+ if IPAddr.new(@host).ipv6?
88
+ @udp = UDPSocket.new(Socket::AF_INET6)
89
+ elsif IPAddr.new(@host).ipv4?
90
+ @udp = UDPSocket.new(Socket::AF_INET)
91
+ end
86
92
  # set socket receive buffer size if configured
87
93
  if @receive_buffer_bytes
88
94
  @udp.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF, @receive_buffer_bytes)
@@ -96,6 +102,8 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
96
102
  @logger.info("UDP listener started", :address => "#{@host}:#{@port}", :receive_buffer_bytes => "#{rcvbuf}", :queue_size => "#{@queue_size}")
97
103
 
98
104
  @input_to_worker = SizedQueue.new(@queue_size)
105
+ metric.gauge(:queue_size, @queue_size)
106
+ metric.gauge(:workers, @workers)
99
107
 
100
108
  @input_workers = @workers.times do |i|
101
109
  @logger.debug("Starting UDP worker thread", :worker => i)
@@ -135,6 +143,7 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
135
143
  end
136
144
  rescue => e
137
145
  @logger.error("Exception in inputworker", "exception" => e, "backtrace" => e.backtrace)
146
+ @metric_errors.increment(:worker)
138
147
  end
139
148
  end
140
149
 
@@ -142,6 +151,7 @@ class LogStash::Inputs::Udp < LogStash::Inputs::Base
142
151
  decorate(event)
143
152
  event.set(HOST_FIELD, host) if event.get(HOST_FIELD).nil?
144
153
  @output_queue.push(event)
154
+ metric.increment(:events)
145
155
  end
146
156
 
147
157
  def ignore_close_and_log(e)
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-input-udp'
4
- s.version = '3.2.1'
4
+ s.version = '3.3.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"
@@ -11,7 +11,8 @@ describe LogStash::Inputs::Udp do
11
11
  let!(:helper) { UdpHelpers.new }
12
12
  let(:client) { LogStash::Inputs::Test::UDPClient.new(port) }
13
13
  let(:port) { rand(1024..65535) }
14
- let(:config) { { "port" => port } }
14
+ let(:host) { "0.0.0.0" }
15
+ let(:config) { { "port" => port, "host" => host } }
15
16
  subject { LogStash::Plugin.lookup("input","udp").new(config) }
16
17
 
17
18
  after :each do
@@ -25,26 +26,38 @@ describe LogStash::Inputs::Udp do
25
26
  end
26
27
 
27
28
  describe "receive" do
28
- let(:nevents) { 10 }
29
+ shared_examples "receiving" do
30
+ before(:each) do
31
+ subject.register
32
+ end
29
33
 
30
- let(:events) do
31
- helper.input(subject, nevents) do
32
- nevents.times do |i|
33
- client.send("msg #{i}")
34
+ let(:nevents) { 10 }
35
+
36
+ let(:events) do
37
+ helper.input(subject, nevents) do
38
+ nevents.times do |i|
39
+ client.send("msg #{i}")
40
+ end
34
41
  end
35
42
  end
36
- end
37
43
 
38
- before(:each) do
39
- subject.register
44
+ it "should receive events been generated" do
45
+ expect(events.size).to be(nevents)
46
+ messages = events.map { |event| event.get("message")}
47
+ messages.each do |message|
48
+ expect(message).to match(/msg \d+/)
49
+ end
50
+ end
40
51
  end
41
52
 
42
- it "should receive events been generated" do
43
- expect(events.size).to be(nevents)
44
- messages = events.map { |event| event.get("message")}
45
- messages.each do |message|
46
- expect(message).to match(/msg \d+/)
47
- end
53
+ context "ipv4" do
54
+ let(:client) { LogStash::Inputs::Test::UDPClient.new(port, "127.0.0.1") }
55
+ include_examples "receiving"
56
+ end
57
+ context "ipv6" do
58
+ let(:host) { "::1" }
59
+ let(:client) { LogStash::Inputs::Test::UDPClient.new(port, "::1") }
60
+ include_examples "receiving"
48
61
  end
49
62
  end
50
63
 
@@ -74,4 +87,4 @@ describe LogStash::Inputs::Udp do
74
87
  it_behaves_like "an interruptible input plugin" do
75
88
  # see https://github.com/elastic/logstash-devutils/blob/9c4a1fbf2b0c4547e428c5a40ed84f60aad17f97/lib/logstash/devutils/rspec/shared_examples.rb
76
89
  end
77
- end
90
+ end
@@ -1,21 +1,25 @@
1
1
  # encoding: utf-8
2
2
  require "socket"
3
+ require "ipaddr"
3
4
 
4
5
  module LogStash::Inputs::Test
5
6
 
6
7
  class UDPClient
7
8
  attr_reader :host, :port, :socket
8
9
 
9
- def initialize(port)
10
+ def initialize(port, host = "0.0.0.0")
11
+ @host = host
10
12
  @port = port
11
- @host = "0.0.0.0"
12
- @socket = UDPSocket.new
13
- socket.connect(host, port)
13
+ if IPAddr.new(@host).ipv6?
14
+ @socket = UDPSocket.new(Socket::AF_INET6)
15
+ elsif IPAddr.new(@host).ipv4?
16
+ @socket = UDPSocket.new(Socket::AF_INET)
17
+ end
18
+ @socket.connect(host, port)
14
19
  end
15
20
 
16
21
  def send(msg)
17
22
  begin
18
- socket.connect(host, port) if socket.closed?
19
23
  socket.send(msg, 0)
20
24
  rescue => e
21
25
  puts("send exception, retrying", e.inspect)
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.2.1
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: 2017-12-19 00:00:00.000000000 Z
11
+ date: 2018-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement