pep8 fixes

This commit is contained in:
Pall Sigurdsson 2014-02-21 10:52:39 +00:00
parent b96e973e60
commit b0b55dcd3e
1 changed files with 508 additions and 461 deletions

View File

@ -20,7 +20,6 @@
# This script will check the status of a remote IBM Bladecenter via SNMP. # This script will check the status of a remote IBM Bladecenter via SNMP.
# No real need to change anything below here # No real need to change anything below here
version = "1.1.2" version = "1.1.2"
ok = 0 ok = 0
@ -31,7 +30,6 @@ not_present = -1
exit_status = -1 exit_status = -1
state = {} state = {}
state[not_present] = "Not Present" state[not_present] = "Not Present"
state[ok] = "OK" state[ok] = "OK"
@ -52,10 +50,6 @@ from os import getenv,putenv,environ
import subprocess import subprocess
# Parse some Arguments # Parse some Arguments
from optparse import OptionParser from optparse import OptionParser
parser = OptionParser() parser = OptionParser()
@ -87,12 +81,14 @@ parser.add_option("-d","--debug", dest="debug",
(opts, args) = parser.parse_args() (opts, args) = parser.parse_args()
if opts.host == None: if opts.host is None:
parser.error("Hostname (-H) is required.") parser.error("Hostname (-H) is required.")
if opts.mode == None: if opts.mode is None:
parser.error("Mode (--mode) is required.") parser.error("Mode (--mode) is required.")
snmp_options = "" snmp_options = ""
def set_snmp_options(): def set_snmp_options():
global snmp_options global snmp_options
if opts.snmp_version is not None: if opts.snmp_version is not None:
@ -101,33 +97,41 @@ def set_snmp_options():
if opts.snmp_username is None: if opts.snmp_username is None:
parser.error("--snmp_username required with --snmp_version=3") parser.error("--snmp_username required with --snmp_version=3")
if opts.snmp_seclevel is None: if opts.snmp_seclevel is None:
parser.error("--snmp_security_level required with --snmp_version=3") parser.error(
"--snmp_security_level required with --snmp_version=3")
if opts.snmp_password is None: if opts.snmp_password is None:
parser.error("--snmp_password required with --snmp_version=3") parser.error("--snmp_password required with --snmp_version=3")
snmp_options = snmp_options + " -u %s -l %s -A %s " % (opts.snmp_username, opts.snmp_seclevel,opts.snmp_password) snmp_options = snmp_options + " -u %s -l %s -A %s " % (
opts.snmp_username, opts.snmp_seclevel, opts.snmp_password)
else: else:
if opts.snmp_community is None: if opts.snmp_community is None:
parser.error("--snmp_community is required with --snmp_version=1|2c") parser.error(
"--snmp_community is required with --snmp_version=1|2c")
snmp_options = snmp_options + " -c %s " % opts.snmp_community snmp_options = snmp_options + " -c %s " % opts.snmp_community
snmp_options += " -t %s " % (opts.snmp_timeout) snmp_options += " -t %s " % (opts.snmp_timeout)
def error(errortext): def error(errortext):
print "* Error: %s" % errortext print "* Error: %s" % errortext
exit(unknown) exit(unknown)
def debug(debugtext): def debug(debugtext):
if opts.debug: if opts.debug:
print debugtext print debugtext
def nagios_status(newStatus): def nagios_status(newStatus):
global exit_status global exit_status
exit_status = max(exit_status, newStatus) exit_status = max(exit_status, newStatus)
return exit_status return exit_status
'''runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful'''
def runCommand(command): def runCommand(command):
'''runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful'''
debug("Executing: %s" % command) debug("Executing: %s" % command)
proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE,) proc = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,)
stdout, stderr = proc.communicate('through stdin to stdout') stdout, stderr = proc.communicate('through stdin to stdout')
if proc.returncode > 0: if proc.returncode > 0:
print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command) print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command)
@ -143,6 +147,7 @@ def runCommand(command):
else: else:
return stdout return stdout
def end(): def end():
global summary global summary
global longserviceoutput global longserviceoutput
@ -150,36 +155,43 @@ def end():
global exit_status global exit_status
print "%s - %s | %s" % (state[exit_status], summary, perfdata) print "%s - %s | %s" % (state[exit_status], summary, perfdata)
print longserviceoutput print longserviceoutput
if exit_status < 0: exit_status = unknown if exit_status < 0:
exit_status = unknown
exit(exit_status) exit(exit_status)
def add_perfdata(text): def add_perfdata(text):
global perfdata global perfdata
text = text.strip() text = text.strip()
perfdata = perfdata + " %s " % (text) perfdata = perfdata + " %s " % (text)
def add_long(text): def add_long(text):
global longserviceoutput global longserviceoutput
longserviceoutput = longserviceoutput + text + '\n' longserviceoutput = longserviceoutput + text + '\n'
def add_summary(text): def add_summary(text):
global summary global summary
summary = summary + text summary = summary + text
def set_path(path): def set_path(path):
current_path = getenv('PATH') current_path = getenv('PATH')
if current_path.find('C:\\') > -1: # We are on this platform if current_path.find('C:\\') > -1: # We are on this platform
if path == '': if path == '':
pass pass
else: path = ';' + path else:
path = ';' + path
else: # Unix/Linux, etc else: # Unix/Linux, etc
if path == '': path = ":/usr/sbin" if path == '':
else: path = ':' + path path = ":/usr/sbin"
else:
path = ':' + path
current_path = "%s%s" % (current_path, path) current_path = "%s%s" % (current_path, path)
environ['PATH'] = current_path environ['PATH'] = current_path
def snmpget(oid): def snmpget(oid):
snmpgetcommand = "snmpget %s %s %s" % (snmp_options, opts.host, oid) snmpgetcommand = "snmpget %s %s %s" % (snmp_options, opts.host, oid)
output = runCommand(snmpgetcommand) output = runCommand(snmpgetcommand)
@ -189,12 +201,16 @@ def snmpget(oid):
resultValue = resultValue[1:-1] resultValue = resultValue[1:-1]
return resultValue return resultValue
# snmpwalk -v3 -u v3get mgmt-rek-proxy-p02 -A proxy2011 -l authNoPriv 1.3.6.1.4.1.15497 # snmpwalk -v3 -u v3get mgmt-rek-proxy-p02 -A proxy2011 -l authNoPriv
# 1.3.6.1.4.1.15497
def snmpwalk(base_oid): def snmpwalk(base_oid):
snmpwalkcommand = "snmpwalk %s %s %s" % (snmp_options, opts.host, base_oid) snmpwalkcommand = "snmpwalk %s %s %s" % (snmp_options, opts.host, base_oid)
output = runCommand(snmpwalkcommand + " " + base_oid) output = runCommand(snmpwalkcommand + " " + base_oid)
return output return output
def getTable(base_oid): def getTable(base_oid):
myTable = {} myTable = {}
output = snmpwalk(base_oid) output = snmpwalk(base_oid)
@ -215,10 +231,12 @@ def getTable(base_oid):
index = oid.strip().split('.') index = oid.strip().split('.')
column = int(index.pop()) column = int(index.pop())
row = int(index.pop()) row = int(index.pop())
if not myTable.has_key(column): myTable[column] = {} if not myTable.has_key(column):
myTable[column] = {}
myTable[column][row] = resultValue myTable[column][row] = resultValue
return myTable return myTable
def check_powermodules(): def check_powermodules():
powermodules = getTable('1.3.6.1.4.1.2.3.51.2.2.4') powermodules = getTable('1.3.6.1.4.1.2.3.51.2.2.4')
index = 1 index = 1
@ -232,22 +250,27 @@ def check_powermodules():
myStatus = i[status] myStatus = i[status]
myDetails = i[details] myDetails = i[details]
myExists = i[exists] myExists = i[exists]
if myIndex == opts.exclude: continue if myIndex == opts.exclude:
continue
if myExists == "0": if myExists == "0":
num_no = num_no + 1 num_no = num_no + 1
else: else:
if myStatus != "1": if myStatus != "1":
nagios_status(warning) nagios_status(warning)
add_summary( 'Powermodule "%s" status "%s". %s. ' % (myIndex,myStatus,myDetails) ) add_summary('Powermodule "%s" status "%s". %s. ' %
(myIndex, myStatus, myDetails))
else: else:
num_ok = num_ok + 1 num_ok = num_ok + 1
add_long('Powersupply "%s" status "%s". %s. ' % (myIndex,myStatus,myDetails) ) add_long('Powersupply "%s" status "%s". %s. ' %
add_summary( "%s out of %s powermodules are healthy" % (num_ok, len(powermodules) ) ) (myIndex, myStatus, myDetails))
add_perfdata( "'Number of powermodules'=%s" % (len(powermodules) - num_no ) ) add_summary("%s out of %s powermodules are healthy" %
(num_ok, len(powermodules)))
add_perfdata("'Number of powermodules'=%s" %
(len(powermodules) - num_no))
nagios_status(ok) nagios_status(ok)
def check_switchmodules(): def check_switchmodules():
switchmodules = getTable("1.3.6.1.4.1.2.3.51.2.22.3.1.1") switchmodules = getTable("1.3.6.1.4.1.2.3.51.2.22.3.1.1")
# The following oid is undocumented, but contains some useful extra info # The following oid is undocumented, but contains some useful extra info
@ -265,10 +288,12 @@ def check_switchmodules():
'this module is installed' 'this module is installed'
if healthstate == "1": if healthstate == "1":
nagios_status(ok) nagios_status(ok)
add_long("Module%s health good.\n post=%s" % (myIndex,resultvalue)) add_long("Module%s health good.\n post=%s" %
(myIndex, resultvalue))
else: else:
nagios_status(warning) nagios_status(warning)
add_long("Module%s health bad(%s).\n post=%s" % (myIndex, healthstate,resultvalue) ) add_long("Module%s health bad(%s).\n post=%s" %
(myIndex, healthstate, resultvalue))
add_summary("Problem with Module %s. " % (myIndex)) add_summary("Problem with Module %s. " % (myIndex))
if len(extrainfo) > int(myIndex): if len(extrainfo) > int(myIndex):
try: try:
@ -276,7 +301,8 @@ def check_switchmodules():
module_type = myExtraInfo[22] module_type = myExtraInfo[22]
module_ip = myExtraInfo[6] module_ip = myExtraInfo[6]
add_long(" type=%s ip=%s" % (module_type, module_ip)) add_long(" type=%s ip=%s" % (module_type, module_ip))
except: pass except:
pass
if exit_status == ok: if exit_status == ok:
add_summary("All switchmodules healthy") add_summary("All switchmodules healthy")
@ -408,14 +434,15 @@ def check_chassis_status():
nagios_status(warning) nagios_status(warning)
add_summary("Media Trays NOT OK. ") add_summary("Media Trays NOT OK. ")
# status_oids, oids that where 0 == ok # status_oids, oids that where 0 == ok
status_oids = ( 2,3,5,7,8,9,10,11,14,18,19,20,21,22,23,24,25,26,27,28,29,30, ) status_oids = (2, 3, 5, 7, 8, 9, 10, 11, 14, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, )
add_long("Other Sensors: ") add_long("Other Sensors: ")
sensor_status = ok sensor_status = ok
for oid in status_oids: for oid in status_oids:
if not chassis_oid.has_key(oid): continue if not chassis_oid.has_key(oid):
continue
oidValue = oids[oid] oidValue = oids[oid]
oidName = chassis_oid[oid] oidName = chassis_oid[oid]
if oidValue == "0": if oidValue == "0":
@ -442,10 +469,14 @@ def check_bladehealth():
myBladeid = row[bladeid] myBladeid = row[bladeid]
mySeverity = row[severity] mySeverity = row[severity]
myDescription = row[description] myDescription = row[description]
try: myName = bladestate[i][6] try:
except: myName = "" myName = bladestate[i][6]
if mySeverity == "(No severity)": continue except:
add_long( "blade%s (%s): %s %s" % (myBladeid,myName,mySeverity, myDescription) ) myName = ""
if mySeverity == "(No severity)":
continue
add_long("blade%s (%s): %s %s" %
(myBladeid, myName, mySeverity, myDescription))
if opts.exclude: if opts.exclude:
if myDescription.find(opts.exclude) > -1: if myDescription.find(opts.exclude) > -1:
continue continue
@ -455,25 +486,32 @@ def check_bladehealth():
good_blades += 1 good_blades += 1
else: else:
nagios_status(warning) nagios_status(warning)
add_summary( "blade%s (%s): %s %s. " % (myBladeid,myName,mySeverity, myDescription) ) add_summary("blade%s (%s): %s %s. " %
(myBladeid, myName, mySeverity, myDescription))
if good_blades == total_blades: if good_blades == total_blades:
add_summary( "%s out of %s blades in Good health. " % (good_blades, total_blades)) add_summary("%s out of %s blades in Good health. " %
(good_blades, total_blades))
nagios_status(ok) nagios_status(ok)
else: else:
nagios_status(warning) nagios_status(warning)
def check_systemhealth(): def check_systemhealth():
systemhealthstat = snmpget('1.3.6.1.4.1.2.3.51.2.2.7.1.0') systemhealthstat = snmpget('1.3.6.1.4.1.2.3.51.2.2.7.1.0')
summary = getTable('1.3.6.1.4.1.2.3.51.2.2.7.2.1') summary = getTable('1.3.6.1.4.1.2.3.51.2.2.7.2.1')
index, severity, description, date = (1, 2, 3, 4) index, severity, description, date = (1, 2, 3, 4)
# Sometimes chassis delivers warning when absolutely nothing is going on. Lets work around that # Sometimes chassis delivers warning when absolutely nothing is going on.
workaround = {1: '1', 2: 'Good', 3: 'No critical or warning events', 4: 'No timestamp'} # Lets work around that
workaround = {1: '1', 2: 'Good', 3:
'No critical or warning events', 4: 'No timestamp'}
# Check overall health # Check overall health
if systemhealthstat == '255': if systemhealthstat == '255':
nagios_status(ok) nagios_status(ok)
add_summary("Bladecenter health: OK. ") add_summary("Bladecenter health: OK. ")
elif systemhealthstat == "2": elif systemhealthstat == "2":
if summary.values() == workaround: if summary.values() == workaround:
add_summary("Non-Critical Error: %s " % workaround[0][description] ) add_summary("Non-Critical Error: %s " %
workaround[0][description])
nagios_status(ok) nagios_status(ok)
return return
nagios_status(warning) nagios_status(warning)
@ -486,7 +524,9 @@ def check_systemhealth():
add_summary("Critical. ") add_summary("Critical. ")
else: else:
nagios_status(unknown) nagios_status(unknown)
add_summary("Bladecenter health unkown (oid 1.3.6.1.4.1.2.3.51.2.2.7.1.0 returns %s). " % systemhealthstat) add_summary(
"Bladecenter health unkown (oid 1.3.6.1.4.1.2.3.51.2.2.7.1.0 returns %s). " %
systemhealthstat)
for row in summary.values(): for row in summary.values():
if row[severity] == 'Good': if row[severity] == 'Good':
nagios_status(ok) nagios_status(ok)
@ -499,27 +539,34 @@ def check_systemhealth():
add_summary("%s. " % (row[description])) add_summary("%s. " % (row[description]))
add_long("* %s. " % (row[description])) add_long("* %s. " % (row[description]))
def check_temperature(): def check_temperature():
# set some sensible defaults # set some sensible defaults
if opts.warning_threshold is None: opts.warning_threshold = 28 if opts.warning_threshold is None:
if opts.critical_threshold is None: opts.critical_threshold = 35 opts.warning_threshold = 28
if opts.critical_threshold is None:
opts.critical_threshold = 35
str_temp = snmpget('1.3.6.1.4.1.2.3.51.2.2.1.5.1.0') str_temp = snmpget('1.3.6.1.4.1.2.3.51.2.2.1.5.1.0')
float_temp, measurement = str_temp.split(None, 1) float_temp, measurement = str_temp.split(None, 1)
float_temp = float(float_temp) float_temp = float(float_temp)
if opts.critical_threshold is not None and float_temp > opts.critical_threshold: if opts.critical_threshold is not None and float_temp > opts.critical_threshold:
nagios_status(critical) nagios_status(critical)
add_summary( "ambient temperature (%s) is over critical thresholds (%s). " % (str_temp, opts.critical_threshold) ) add_summary(
"ambient temperature (%s) is over critical thresholds (%s). " %
(str_temp, opts.critical_threshold))
elif opts.warning_threshold is not None and float_temp > opts.warning_threshold: elif opts.warning_threshold is not None and float_temp > opts.warning_threshold:
nagios_status(warning) nagios_status(warning)
add_summary( "ambient temperature (%s) is over warning thresholds (%s). " % (str_temp, opts.warning_threshold) ) add_summary(
"ambient temperature (%s) is over warning thresholds (%s). " %
(str_temp, opts.warning_threshold))
else: else:
add_summary("Ambient temperature = %s. " % (str_temp)) add_summary("Ambient temperature = %s. " % (str_temp))
add_perfdata( "'ambient_temp'=%s;%s;%s " % (float_temp,opts.warning_threshold,opts.critical_threshold) ) add_perfdata("'ambient_temp'=%s;%s;%s " %
(float_temp, opts.warning_threshold, opts.critical_threshold))
#add_long( "Ambient Temperature = %s" % (str_temp) ) #add_long( "Ambient Temperature = %s" % (str_temp) )
nagios_status(ok) nagios_status(ok)
if __name__ == '__main__': if __name__ == '__main__':
try: try:
set_snmp_options() set_snmp_options()