lib/logstash/inputs/snmp/base_client.rb in logstash-input-snmp-1.2.3 vs lib/logstash/inputs/snmp/base_client.rb in logstash-input-snmp-1.2.4
- old
+ new
@@ -5,68 +5,25 @@
module LogStash
class SnmpClientError < StandardError
end
- # Only one Snmp instance per transport should be created and listened on.
- # The Snmp object is thread safe and can be shared across input threads and pipelines.
- class SnmpFactory
- java_import "org.snmp4j.Snmp"
- java_import "org.snmp4j.transport.DefaultUdpTransportMapping"
- java_import "org.snmp4j.transport.DefaultTcpTransportMapping"
-
- include Singleton
-
- def initialize
- @lock = Mutex.new
- @udp = nil
- @tcp = nil
- end
-
- def udp
- @lock.synchronize do
- if @udp.nil?
- @udp = Snmp.new(DefaultUdpTransportMapping.new)
- @udp.listen
- end
- end
- @udp
- end
-
- def tcp
- @lock.synchronize do
- if @tcp.nil?
- @tcp = Snmp.new(DefaultTcpTransportMapping.new)
- @tcp.listen
- end
- end
- @tcp
- end
- end
-
class BaseSnmpClient
java_import "org.snmp4j.TransportMapping"
java_import "org.snmp4j.mp.SnmpConstants"
java_import "org.snmp4j.smi.OID"
java_import "org.snmp4j.smi.VariableBinding"
java_import "org.snmp4j.util.TableUtils"
java_import "org.snmp4j.util.TreeUtils"
java_import "org.snmp4j.asn1.BER"
+ java_import "org.snmp4j.transport.DefaultUdpTransportMapping"
+ java_import "org.snmp4j.transport.DefaultTcpTransportMapping"
include LogStash::Util::Loggable
def initialize(protocol, address, port, retries, timeout, mib)
@mib = mib
-
- transport = case protocol.to_s
- when "udp"
- @snmp = SnmpFactory.instance.udp
- when "tcp"
- @snmp = SnmpFactory.instance.tcp
- else
- raise(SnmpClientError, "invalid transport protocol specified '#{protocol.to_s}', expecting 'udp' or 'tcp'")
- end
end
def get(oids, strip_root = 0, path_length = 0)
pdu = get_pdu
Array(oids).each { |oid| pdu.add(VariableBinding.new(OID.new(oid))) }
@@ -92,11 +49,10 @@
end
result
end
-
def walk(oid, strip_root = 0, path_length = 0)
result = {}
pdufactory = get_pdu_factory
treeUtils = TreeUtils.new(@snmp, pdufactory)
@@ -200,11 +156,10 @@
logger.error(msg)
msg
end
end
-
def parse_version(version)
case version.to_s
when "3"
SnmpConstants.version3
when "2c"
@@ -215,9 +170,20 @@
raise(SnmpClientError, "protocol version '#{version}' is not supported, expected versions are '1', '2c' and '3'")
end
end
private
+
+ def create_transport(protocol)
+ case protocol.to_s
+ when "udp"
+ DefaultUdpTransportMapping.new
+ when "tcp"
+ DefaultTcpTransportMapping.new
+ else
+ raise(SnmpClientError, "invalid transport protocol specified '#{protocol.to_s}', expecting 'udp' or 'tcp'")
+ end
+ end
def get_pdu
raise("abstract method")
end