logstash-input-snmp 0.1.0.beta2 → 0.1.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/logstash/inputs/snmp.rb +14 -6
- data/lib/logstash/inputs/snmp/client.rb +20 -6
- data/logstash-input-snmp.gemspec +1 -1
- data/spec/inputs/snmp_spec.rb +7 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cbe158bdaf1a09765f4f5590c770c85cd5005a094ee867ac97b720f39b69bab
|
4
|
+
data.tar.gz: 4be94637f117dd5e5e31d29c58c25e8c50aa307266f4b15b37bc749dcee3e462
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbe55fe3d13e49d62c4a7376aef50f3daf38e19aeaddcb9dd32c933d648a1dc2fb69adb6625e3cc24d05559cf20faa25bf6785192299ae5da3781c1bf7a240fd
|
7
|
+
data.tar.gz: 8f93b7fbb5005b8c4321e7d39534b7f2a540da3f2aa0b6d30c433d66f59578bcf5af042db64533fd54b2869404aff9ecf0af4bd6feb91f4f1400c33511ffe1cd
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 0.1.0.beta3
|
2
|
+
- add tcp transport protocol support, https://github.com/logstash-plugins/logstash-input-snmp/pull/8
|
3
|
+
- add SNMPv1 protocol version support, https://github.com/logstash-plugins/logstash-input-snmp/pull/9
|
4
|
+
|
1
5
|
## 0.1.0.beta2
|
2
6
|
- add host info in metadata and host field, https://github.com/logstash-plugins/logstash-input-snmp/pull/7
|
3
7
|
|
data/lib/logstash/inputs/snmp.rb
CHANGED
@@ -26,7 +26,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
26
26
|
# for example `host => "udp:127.0.0.1/161"`
|
27
27
|
# Each host definition can optionally include the following keys and values:
|
28
28
|
# `community` with a default value of `public`
|
29
|
-
# `version` with a default value of `2c`
|
29
|
+
# `version` `1` or `2c` with a default value of `2c`
|
30
30
|
# `retries` with a detault value of `2`
|
31
31
|
# `timeout` in milliseconds with a default value of `1000`
|
32
32
|
config :hosts, :validate => :array #[ {"host" => "udp:127.0.0.1/161", "community" => "public"} ]
|
@@ -71,21 +71,28 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
71
71
|
host_name = host["host"]
|
72
72
|
community = host["community"] || "public"
|
73
73
|
version = host["version"] || "2c"
|
74
|
+
raise(LogStash::ConfigurationError, "only protocol version '1' and '2c' are supported for host option '#{host_name}'") unless version =~ VERSION_REGEX
|
75
|
+
|
74
76
|
retries = host["retries"] || 2
|
75
77
|
timeout = host["timeout"] || 1000
|
76
78
|
|
79
|
+
# TODO: move these validations in a custom validator so it happens before the register method is called.
|
77
80
|
host_details = host_name.match(HOST_REGEX)
|
78
81
|
raise(LogStash::ConfigurationError, "invalid format for host option '#{host_name}'") unless host_details
|
79
|
-
raise(LogStash::ConfigurationError, "only
|
82
|
+
raise(LogStash::ConfigurationError, "only udp & tcp protocols are supported for host option '#{host_name}'") unless host_details[:host_protocol].to_s =~ /^(?:udp|tcp)$/i
|
83
|
+
|
84
|
+
protocol = host_details[:host_protocol]
|
85
|
+
address = host_details[:host_address]
|
86
|
+
port = host_details[:host_port]
|
80
87
|
|
81
88
|
definition = {
|
82
|
-
:client => LogStash::SnmpClient.new(
|
89
|
+
:client => LogStash::SnmpClient.new(protocol, address, port, community, version, retries, timeout, mib),
|
83
90
|
:get => Array(get),
|
84
91
|
:walk => Array(walk),
|
85
92
|
|
86
|
-
:host_protocol =>
|
87
|
-
:host_address =>
|
88
|
-
:host_port =>
|
93
|
+
:host_protocol => protocol,
|
94
|
+
:host_address => address,
|
95
|
+
:host_port => port,
|
89
96
|
:host_community => community,
|
90
97
|
}
|
91
98
|
@client_definitions << definition
|
@@ -141,6 +148,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
|
|
141
148
|
|
142
149
|
OID_REGEX = /^\.?([0-9\.]+)$/
|
143
150
|
HOST_REGEX = /^(?<host_protocol>udp|tcp):(?<host_address>.+)\/(?<host_port>\d+)$/i
|
151
|
+
VERSION_REGEX =/^1|2c$/
|
144
152
|
|
145
153
|
def validate_oids!
|
146
154
|
@get = Array(@get).map do |oid|
|
@@ -14,6 +14,7 @@ java_import "org.snmp4j.smi.OID"
|
|
14
14
|
java_import "org.snmp4j.smi.OctetString"
|
15
15
|
java_import "org.snmp4j.smi.VariableBinding"
|
16
16
|
java_import "org.snmp4j.transport.DefaultUdpTransportMapping"
|
17
|
+
java_import "org.snmp4j.transport.DefaultTcpTransportMapping"
|
17
18
|
java_import "org.snmp4j.util.TreeUtils"
|
18
19
|
java_import "org.snmp4j.util.DefaultPDUFactory"
|
19
20
|
java_import "org.snmp4j.asn1.BER"
|
@@ -24,12 +25,19 @@ module LogStash
|
|
24
25
|
|
25
26
|
class SnmpClient
|
26
27
|
|
27
|
-
def initialize(address, community, version, retries, timeout, mib)
|
28
|
-
|
28
|
+
def initialize(protocol, address, port, community, version, retries, timeout, mib)
|
29
|
+
transport = case protocol.to_s
|
30
|
+
when "udp"
|
31
|
+
DefaultUdpTransportMapping.new
|
32
|
+
when "tcp"
|
33
|
+
DefaultTcpTransportMapping.new
|
34
|
+
else
|
35
|
+
raise(SnmpClientError, "invalid transport protocol specified '#{protocol.to_s}', expecting 'udp' or 'tcp'")
|
36
|
+
end
|
37
|
+
|
38
|
+
@target = build_target("#{protocol}:#{address}/#{port}", community, version, retries, timeout)
|
29
39
|
@mib = mib
|
30
40
|
|
31
|
-
# for now hardwired udp transport
|
32
|
-
transport = DefaultUdpTransportMapping.new
|
33
41
|
@snmp = Snmp.new(transport)
|
34
42
|
transport.listen()
|
35
43
|
end
|
@@ -128,8 +136,14 @@ module LogStash
|
|
128
136
|
end
|
129
137
|
|
130
138
|
def parse_version(version)
|
131
|
-
|
132
|
-
|
139
|
+
case version.to_s
|
140
|
+
when "2c"
|
141
|
+
SnmpConstants.version2c
|
142
|
+
when "1"
|
143
|
+
SnmpConstants.version1
|
144
|
+
else
|
145
|
+
raise(SnmpClientError, "protocol version '#{version}' is not supported, expected versions are '1' and '2c'")
|
146
|
+
end
|
133
147
|
end
|
134
148
|
end
|
135
149
|
end
|
data/logstash-input-snmp.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-input-snmp'
|
3
|
-
s.version = '0.1.0.
|
3
|
+
s.version = '0.1.0.beta3'
|
4
4
|
s.licenses = ['Apache-2.0']
|
5
5
|
s.summary = "SNMP input plugin"
|
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/logstash-plugin install gemname. This gem is not a stand-alone program"
|
data/spec/inputs/snmp_spec.rb
CHANGED
@@ -54,19 +54,25 @@ describe LogStash::Inputs::Snmp do
|
|
54
54
|
{"get" => ["1.0"], "hosts" => [{"host" => "udp:localhost/161"}]},
|
55
55
|
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/112345"}]},
|
56
56
|
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "community" => "public"}]},
|
57
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "tcp:127.0.0.1/112345"}]},
|
58
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "tcp:127.0.0.1/161", "community" => "public"}]},
|
59
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "1"}]},
|
60
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "2c"}]},
|
57
61
|
]
|
58
62
|
}
|
59
63
|
|
60
64
|
let(:invalid_configs) {
|
61
65
|
[
|
62
66
|
{"get" => ["1.0"], "hosts" => [{"host" => "aaa:127.0.0.1/161"}]},
|
63
|
-
{"get" => ["1.0"], "hosts" => [{"host" => "tcp
|
67
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "tcp.127.0.0.1/161"}]},
|
64
68
|
{"get" => ["1.0"], "hosts" => [{"host" => "localhost"}]},
|
65
69
|
{"get" => ["1.0"], "hosts" => [{"host" => "localhost/161"}]},
|
66
70
|
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1"}]},
|
67
71
|
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/"}]},
|
68
72
|
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/aaa"}]},
|
69
73
|
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}, {"host" => "udp:127.0.0.1/aaa"}]},
|
74
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "2"}]},
|
75
|
+
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "version" => "3"}]},
|
70
76
|
{"get" => ["1.0"], "hosts" => ""},
|
71
77
|
{"get" => ["1.0"], "hosts" => []},
|
72
78
|
{"get" => ["1.0"] },
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-snmp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elasticsearch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|