def platform(ip): """return 'ACREA' or 'PROWARE' or 'UNRECOGNIZED' based on reply to snmp request for serial number. """ if len(snmp.walk(ip, pwOID["serNum"])) > 0: return "PROWARE" elif len(snmp.walk(ip, aceraOID["serNum"])) > 0: return "ACREA" else: return "UNRECOGNIZED"
def pwQuery(ip): """run the proware query """ status = nagios.OK message = snmp.get(ip, pwOID["defaultMsg"]).strip() errMessages = [] # check proware events events = snmp.walk(ip, pwOID["event"]) for name, sStat in events: if sStat != "Good(1)": status = nagios.CRITICAL name = name.rstrip(".0").replace("event", "") errMessages.append("%s-%s" % (name, sStat)) # disk status sTable = snmp.walkTable("192.168.0.112", pwOID["slotTable"]) dStatCount = iterCount(sTable["slotStatus"]) # hot spare check if "Free(2)" not in dStatCount: dStatCount["Free(2)"] = 0 if dStatCount["Free(2)"] != 1: status = nagios.CRITICAL errMessages.append("%s Hot Spares" % (dStatCount["Free(2)"])) # indivdual slot check slotStat = dict(zip(sTable["slotDiskIndex"], zip(sTable["slotStatus"], sTable["slotBadBlockNumber"]))) sIdx = slotStat.keys() sIdx.sort() for s in sIdx: sStat, sBB = slotStat[s] if sStat not in ("Arranged(1)", "Free(2)"): status = nagios.CRITICAL errMessages.append("Slot %s Status-%s" % (s, sStat)) if sBB > 0: errMessages.append("Slot %s-%s Bad Blocks" % (s, sBB)) if status == nagios.OK: status = nagios.WARN if len(errMessages) > 0: message = ";".join(errMessages) return status, message