class Apscanner::SnmpManager
Constants
- SNMP_OID
Public Class Methods
new(sensor)
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 18 def initialize(sensor) @sensor = sensor end
Public Instance Methods
run()
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 22 def run response = request_by_type return [] if empty?(response) SnmpParser.new(response, @sensor.type).run end
Private Instance Methods
discover()
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 49 def discover response = {} SNMP_OID.keys.each do |type| response = request(oids(type)) unless empty?(response) @sensor.type = type break end end response end
empty?(response)
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 30 def empty?(response) response.empty? || response.values.uniq == [{}] end
manager()
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 34 def manager SNMP4EM::Manager.new( host: @sensor.ip_address, community: @sensor.community || 'public', version: :SNMPv2c, port: @sensor.port || 161, retries: 2 ) end
oids(type)
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 44 def oids(type) oids = SNMP_OID[type].values type == :wlc ? oids : [oids.first] end
request(oids)
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 69 def request(oids) response = {} EM.run do req = manager.bulkwalk(oids) req.errback do |error| Apscanner.logger.error(error) EM.stop end req.callback do |resp| Apscanner.logger.debug("#{@sensor.ip_address}: #{resp}") response = resp EM.stop end end response end
request_by_type()
click to toggle source
# File lib/apscanner/entities/snmp_manager.rb, line 61 def request_by_type if SNMP_OID.keys.include?(@sensor.type) request(oids(@sensor.type)) else discover end end