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