class Apscanner::SnmpParser

Public Class Methods

new(response, type) click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 3
def initialize(response, type)
  @response = response
  @type = type
  @oids = SnmpManager::SNMP_OID[type]
end

Public Instance Methods

run() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 9
def run
  send("parse_#{@type}")
end

Private Instance Methods

clients() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 52
def clients
  @response[@oids[:clients]]
end
macs() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 44
def macs
  @response[@oids[:mac]]
end
names() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 48
def names
  @response[@oids[:name]]
end
parse() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 29
def parse
  macs.map do |oid, value|
    ap_oid = parse_ap_oid(oid)
    AccessPoint.new(
      name: names[@oids[:name] + '.' + ap_oid],
      mac_address: parse_mac(value),
      clients: clients[@oids[:clients] + '.' + ap_oid]
    ) if status_up?(ap_oid)
  end.compact
end
parse_ap_oid(oid) click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 40
def parse_ap_oid(oid)
  oid.gsub("#{@oids[:mac]}.", '')
end
parse_mac(mac) click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 65
def parse_mac(mac)
  mac.unpack('H2H2H2H2H2H2').join(':').upcase
end
parse_meraki() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 19
def parse_meraki
  @response = {
    @oids[:mac] => sys.select { |k, _| k.include?("#{@oids[:mac]}.") },
    @oids[:name] => sys.select { |k, _| k.include?("#{@oids[:name]}.") },
    @oids[:clients] => sys.select { |k, _| k.include?("#{@oids[:clients]}.") },
    @oids[:status] => sys.select { |k, _| k.include?("#{@oids[:status]}.") }
  }
  parse
end
parse_wlc() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 15
def parse_wlc
  parse
end
status_up?(ap_oid) click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 60
def status_up?(ap_oid)
  return true if @response[@oids[:status]].nil?
  @response[@oids[:status]][@oids[:status] + '.' + ap_oid] == 1
end
sys() click to toggle source
# File lib/apscanner/entities/snmp_parser.rb, line 56
def sys
  @response[@oids[:system]]
end