#!/usr/local/bin/python # # check_amr: check status of a LSI/AMR RAID controller # Dan R. K. Ports # # Copyright (c) 2007-2008 Dan R. K. Ports # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # # $Revision$ $Date$ import sys, os COMMAND = "sudo amrstat -gv" OK = 0 WARN = 1 CRIT = 2 stat = OK def updateStat(x): global stat stat = max(stat,x) msgs = [] f = os.popen(COMMAND) for l in f.readlines(): parts = l.split("\t") key = parts[0].rstrip() val = parts[-1].rstrip() if key.startswith("Battery status"): if val.startswith("charge done"): pass elif val.startswith("charge in progress"): msgs.append("battery charging") updateStat(OK) else: msgs.append("battery " + val) updateStat(CRIT) elif key.startswith("Logical volume") or key.startswith("Physical drive"): if not (val.startswith("offline") or val.startswith("online") or val.startswith("hotspare") or val.startswith("optimal")): updateStat(CRIT) msgs.append(key + " " + val) if stat == OK: out = "OK " elif stat == WARN: out = "WARN " else: out = "CRIT " out += "; ".join(msgs) print out sys.exit(stat)