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