From 9907356c39456cb35eb362da4466ad6049193555 Mon Sep 17 00:00:00 2001 From: Pall Sigurdsson Date: Mon, 2 Sep 2013 15:14:07 +0000 Subject: [PATCH] PEP8 cleanup --- check_eva/check_eva.py | 466 +++++++++++++++++++++++------------------ 1 file changed, 257 insertions(+), 209 deletions(-) diff --git a/check_eva/check_eva.py b/check_eva/check_eva.py index 1bee31a..6c2f361 100644 --- a/check_eva/check_eva.py +++ b/check_eva/check_eva.py @@ -16,50 +16,45 @@ # along with this program. If not, see . # About this script -# +# # This script will check the status of all EVA arrays via the sssu binary. # You will need the sssu binary in path (/usr/bin/sssu is a good place) # If you do not have sssu, check your commandview CD, it should have both # binaries for Windows and Linux - - - - # Some Defaults show_perfdata = True show_longserviceoutput = True debugging = False - # check_eva defaults -hostname="localhost" -username="eva" -password="eva1234" -mode="check_systems" -path='' +hostname = "localhost" +username = "eva" +password = "eva1234" +mode = "check_systems" +path = '' nagios_server = "94.142.154.10" nagios_port = 80 nagios_myhostname = None do_phone_home = False escape_newlines = False -check_system = None # By default check all systems +check_system = None # By default check all systems proxyserver = None -server_side_troubleshooting = False # set to true, if you do not have sssu binary handy +# set to true, if you do not have sssu binary handy +server_side_troubleshooting = False # No real need to change anything below here -version="1.0" -ok=0 -warning=1 -critical=2 -unknown=3 +version = "1.0" +ok = 0 +warning = 1 +critical = 2 +unknown = 3 not_present = -1 - state = {} state[not_present] = "Not Present" state[ok] = "OK" @@ -67,18 +62,20 @@ state[warning] = "Warning" state[critical] = "Critical" state[unknown] = "Unknown" -longserviceoutput="\n" -perfdata="" +longserviceoutput = "\n" +perfdata = "" -valid_modes = ( "check_systems", "check_controllers", "check_diskgroups","check_disks", "check_diskshelfs", "check_diskshelves") +valid_modes = ("check_systems", "check_controllers", "check_diskgroups", + "check_disks", "check_diskshelfs", "check_diskshelves") from sys import exit from sys import argv -from os import getenv,putenv,environ +from os import getenv, putenv, environ import subprocess -import xmlrpclib,httplib +import xmlrpclib +import httplib import socket -socket.setdefaulttimeout(5) +socket.setdefaulttimeout(5) def print_help(): @@ -87,18 +84,18 @@ def print_help(): print "" print "Usage: %s [OPTIONS]" % argv[0] print "OPTIONS:" - print " [--host ]" - print " [--username ]" - print " [--password ]" - print " [--mode ] " - print " [--test]" - print " [--debug]" - print " [--help]" - print "" - print " Valid modes are: %s" % ', '.join(valid_modes) - print "" - print "Example: %s --host commandview.example.net --username eva --password myPassword --mode check_systems" % (argv[0]) + print " [--host ]" + print " [--username ]" + print " [--password ]" + print " [--mode ] " + print " [--test]" + print " [--debug]" + print " [--help]" + print "" + print " Valid modes are: %s" % ', '.join(valid_modes) + print "" + print "Example: %s --host commandview.example.net --username eva --password myPassword --mode check_systems" % (argv[0]) def error(errortext): @@ -107,34 +104,35 @@ def error(errortext): print "* Error: %s" % errortext exit(unknown) -def debug( debugtext ): + +def debug(debugtext): global debugging if debugging: - print debugtext + print debugtext # parse arguments -arguments=argv[1:] +arguments = argv[1:] while len(arguments) > 0: - arg=arguments.pop(0) + arg = arguments.pop(0) if arg == 'invalid': pass elif arg == '-H' or arg == '--host': - hostname=arguments.pop(0) + hostname = arguments.pop(0) elif arg == '-U' or arg == '--username': - username=arguments.pop(0) + username = arguments.pop(0) elif arg == '-P' or arg == '--password': password = arguments.pop(0) elif arg == '-T' or arg == '--test': - testmode=1 + testmode = 1 elif arg == '--path': path = arguments.pop(0) + '/' elif arg == '-M' or arg == '--mode': - mode=arguments.pop(0) + mode = arguments.pop(0) if mode not in valid_modes: error("Invalid --mode %s" % arg) elif arg == '-d' or arg == '--debug': - debugging=True + debugging = True elif arg == '--longserviceoutput': show_longserviceoutput = True elif arg == '--no-longserviceoutput': @@ -161,9 +159,7 @@ while len(arguments) > 0: print_help() exit(ok) else: - error( "Invalid argument %s"% arg) - - + error("Invalid argument %s" % arg) subitems = {} @@ -177,29 +173,29 @@ subitems['bus'] = 'communicationbuses' subitems['port'] = 'fibrechannelports' - def runCommand(command): """ runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful """ - 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') if proc.returncode > 0: - print "Error %s: %s\n command was: '%s'" % (proc.returncode,stderr.strip(),command) - if proc.returncode == 127 or proc.returncode == 1: # File not found, lets print path - path=getenv("PATH") + print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command) + # File not found, lets print path + if proc.returncode == 127 or proc.returncode == 1: + path = getenv("PATH") print "Current Path: %s" % path exit(unknown) else: return stdout - - def run_sssu(system=None, command="ls system full"): """Runs the sssu command. This one is responsible for error checking from sssu""" commands = [] - continue_on_error="set option on_error=continue" - login="select manager %s USERNAME=%s PASSWORD=%s"%(hostname,username,password) + continue_on_error = "set option on_error=continue" + login = "select manager %s USERNAME=%s PASSWORD=%s" % ( + hostname, username, password) commands.append(continue_on_error) commands.append(login) @@ -214,29 +210,36 @@ def run_sssu(system=None, command="ls system full"): if server_side_troubleshooting == True: commandstring = 'cat "debug/%s"' % command - #print mystring - #if command == "ls system full": + # print mystring + # if command == "ls system full": # output = runCommand("cat sssu.out") - #elif command == "ls disk_groups full": + # elif command == "ls disk_groups full": # output = runCommand("cat ls_disk*") - #elif command == "ls controller full": + # elif command == "ls controller full": # output = runCommand("cat ls_controller") - #else: + # else: # print "What command is this?", command # exit(unknown) output = runCommand(commandstring) - debug( commandstring ) + debug(commandstring) output = output.split('\n') - # Lets process the top few results from the sssu command. Make sure the results make sense + # Lets process the top few results from the sssu command. Make sure the + # results make sense error = 0 - if output.pop(0).strip() != '': error = 1 - if output.pop(0).strip() != '': error = 1 - if output.pop(0).strip() != 'SSSU for HP StorageWorks Command View EVA': error = 1 - if output.pop(0).strip().find('Version:') != 0: error=1 - if output.pop(0).strip().find('Build:') != 0: error=1 - if output.pop(0).strip().find('NoSystemSelected> ') != 0: error=1 + if output.pop(0).strip() != '': + error = 1 + if output.pop(0).strip() != '': + error = 1 + if output.pop(0).strip() != 'SSSU for HP StorageWorks Command View EVA': + error = 1 + if output.pop(0).strip().find('Version:') != 0: + error = 1 + if output.pop(0).strip().find('Build:') != 0: + error = 1 + if output.pop(0).strip().find('NoSystemSelected> ') != 0: + error = 1 #if output.pop(0).strip() != '': error = 1 #if output.pop(0).strip().find('NoSystemSelected> ') != 0: error=1 #if output.pop(0).strip() != '': error = 1 @@ -246,7 +249,8 @@ def run_sssu(system=None, command="ls system full"): if i.find('Error') > -1: print "This is the command i was trying to execute: %s" % i error = 1 - if i.find('information:') > 0: break + if i.find('information:') > 0: + break if error > 0: print "Error running the sssu command" print commandstring @@ -261,11 +265,13 @@ def run_sssu(system=None, command="ls system full"): tmp = line.split() if len(tmp) == 0: if current_object: - if not current_object['master'] in objects: objects.append( current_object['master'] ) + if not current_object['master'] in objects: + objects.append(current_object['master']) current_object = None continue key = tmp[0].strip() - if current_object and not current_object['master'] in objects: objects.append( current_object['master'] ) + if current_object and not current_object['master'] in objects: + objects.append(current_object['master']) if key == 'object': current_object = {} current_object['master'] = current_object @@ -273,7 +279,7 @@ def run_sssu(system=None, command="ls system full"): current_object = current_object['master'] if key == 'iomodules': key = 'modules' - #if key in subitems.values(): + # if key in subitems.values(): # object['master'][key] = [] if key in subitems.keys(): mastergroup = subitems[key] @@ -285,13 +291,11 @@ def run_sssu(system=None, command="ls system full"): current_object['master'][mastergroup] = [] current_object['master'][mastergroup].append(current_object) - - if line.find('.:') > 0: # We work on first come, first serve basis, so if # we accidentally see same key again, we will ignore if not current_object.has_key(key): - value = ' '.join( tmp[2:] ).strip() + value = ' '.join(tmp[2:]).strip() current_object[key] = value # Check if we were instructed to check only one eva system global check_system @@ -299,11 +303,12 @@ def run_sssu(system=None, command="ls system full"): tmp_objects = [] for i in objects: if i['objectname'] == check_system: - tmp_objects.append( i ) + tmp_objects.append(i) objects = tmp_objects return objects -def end(summary,perfdata,longserviceoutput,nagios_state): + +def end(summary, perfdata, longserviceoutput, nagios_state): global show_longserviceoutput global show_perfdata global nagios_server @@ -315,21 +320,21 @@ def end(summary,perfdata,longserviceoutput,nagios_state): global escape_newlines global check_system - message = "%s - %s" % ( state[nagios_state], summary) + message = "%s - %s" % (state[nagios_state], summary) if show_perfdata: - message = "%s | %s" % ( message, perfdata) + message = "%s | %s" % (message, perfdata) if show_longserviceoutput: - message = "%s\n%s" % ( message, longserviceoutput.strip()) + message = "%s\n%s" % (message, longserviceoutput.strip()) if escape_newlines == True: lines = message.split('\n') message = '\\n'.join(lines) - debug( "do_phone_home = %s" % do_phone_home) + debug("do_phone_home = %s" % do_phone_home) if do_phone_home == True: try: if nagios_myhostname is None: - if environ.has_key( 'HOSTNAME' ): + if environ.has_key('HOSTNAME'): nagios_myhostname = environ['HOSTNAME'] - elif environ.has_key( 'COMPUTERNAME' ): + elif environ.has_key('COMPUTERNAME'): nagios_myhostname = environ['COMPUTERNAME'] else: nagios_myhostname = hostname @@ -341,7 +346,7 @@ def end(summary,perfdata,longserviceoutput,nagios_state): hostname=nagios_myhostname, servicename=mode, system=check_system - ) + ) except Exception: pass @@ -349,41 +354,47 @@ def end(summary,perfdata,longserviceoutput,nagios_state): raise print message exit(nagios_state) + + class ProxiedTransport(xmlrpclib.Transport): + def set_proxy(self, proxy): self.proxy = proxy + def make_connection(self, host): self.realhost = host h = httplib.HTTP(self.proxy) return h + def send_request(self, connection, handler, request_body): connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler)) + def send_host(self, connection, host): connection.putheader('Host', self.realhost) - -def phone_home(nagios_server,nagios_port, status, message, hostname=None, servicename=None,system=None): +def phone_home(nagios_server, nagios_port, status, message, hostname=None, servicename=None, system=None): """phone_home: Sends results to remote nagios server via python xml-rpc""" debug("phoning home: %s" % servicename) if system is not None: servicename = str(servicename) + str(system) - uri = "http://%s:%s" % (nagios_server,nagios_port) + uri = "http://%s:%s" % (nagios_server, nagios_port) global proxyserver if proxyserver is not None: p = ProxiedTransport() p.set_proxy(proxyserver) - s = xmlrpclib.Server( uri, transport=p ) + s = xmlrpclib.Server(uri, transport=p) else: - s = xmlrpclib.ServerProxy( uri ) + s = xmlrpclib.ServerProxy(uri) s.nagiosupdate(hostname, servicename, status, message) return 0 + def check_systems(): - summary="" - perfdata="" - #longserviceoutput="\n" + summary = "" + perfdata = "" + # longserviceoutput="\n" nagios_state = ok objects = run_sssu() for i in objects: @@ -396,56 +407,66 @@ def check_systems(): summary += " %s=%s " % (name, operationalstate) # Collect the performance data interesting_perfdata = 'totalstoragespace|usedstoragespace|availablestoragespace' - perfdata += get_perfdata(i, interesting_perfdata.split('|'), identifier="%s_" % name) + perfdata += get_perfdata( + i, interesting_perfdata.split('|'), identifier="%s_" % name) # Collect extra info for longserviceoutput - longoutput("%s = %s (%s)\n" % ( i['objectname'], i['operationalstate'], i['operationalstatedetail']) ) + longoutput("%s = %s (%s)\n" % + (i['objectname'], i['operationalstate'], i['operationalstatedetail'])) interesting_fields = 'licensestate|systemtype|firmwareversion|nscfwversion|totalstoragespace|usedstoragespace|availablestoragespace' for x in interesting_fields.split('|'): - longoutput( "- %s = %s \n" %(x, i[x]) ) + longoutput("- %s = %s \n" % (x, i[x])) longoutput("\n") - end(summary,perfdata,longserviceoutput,nagios_state) - + end(summary, perfdata, longserviceoutput, nagios_state) def get_perfdata(my_object, interesting_fields, identifier=""): perfdata = "" for i in interesting_fields: - if i == '': continue + if i == '': + continue perfdata += "'%s%s'=%s " % (identifier, i, my_object[i]) return perfdata + def add_perfdata(text): global perfdata text = text.strip() perfdata += " %s " % text + def longoutput(text): global longserviceoutput longserviceoutput = longserviceoutput + text + + def get_longserviceoutput(my_object, interesting_fields): longserviceoutput = "" for i in interesting_fields: longserviceoutput += "%s = %s \n" % (i, my_object[i]) return longserviceoutput -def check_operationalstate(my_object, print_failed_objects=False,namefield='objectname',detailfield='operationalstatedetail',statefield='operationalstate',valid_states=None): + +def check_operationalstate(my_object, print_failed_objects=False, namefield='objectname', detailfield='operationalstatedetail', statefield='operationalstate', valid_states=None): if not valid_states: - valid_states=['good'] - if not my_object.has_key(detailfield): detailfield = statefield + valid_states = ['good'] + if not my_object.has_key(detailfield): + detailfield = statefield if not my_object.has_key(statefield): if print_failed_objects: - longoutput("- Warning, %s does not have any '%s'" % ( my_object[namefield], statefield ) ) + longoutput("- Warning, %s does not have any '%s'" % + (my_object[namefield], statefield)) return warning if my_object[statefield] not in valid_states: if print_failed_objects: - longoutput("- Warning, %s=%s (%s)\n" % ( my_object[namefield], my_object['operationalstate'], my_object[detailfield] )) + longoutput("- Warning, %s=%s (%s)\n" % + (my_object[namefield], my_object['operationalstate'], my_object[detailfield])) return warning - debug( "OK, %s=%s (%s)\n" % ( my_object[namefield], my_object['operationalstate'], my_object[detailfield] ) ) + debug("OK, %s=%s (%s)\n" % + (my_object[namefield], my_object['operationalstate'], my_object[detailfield])) return ok - -def check_generic(command="ls disk full",namefield="objectname", perfdata_fields=None, longserviceoutputfields=None, detailedsummary=False): +def check_generic(command="ls disk full", namefield="objectname", perfdata_fields=None, longserviceoutputfields=None, detailedsummary=False): if not perfdata_fields: perfdata_fields = [] if not longserviceoutputfields: @@ -456,118 +477,132 @@ def check_generic(command="ls disk full",namefield="objectname", perfdata_fields objects = [] if command == 'ls system full': objects = systems - for i in systems: i['systemname'] = '' #i['objectname'] + for i in systems: + i['systemname'] = '' # i['objectname'] else: for i in systems: result = run_sssu(system=i['objectname'], command=command) for x in result: x['systemname'] = i['objectname'] - objects.append( x ) + objects.append(x) summary = "%s objects found " % len(objects) - usedstoragespacegb=0 - occupancyalarmlvel=0 - warninggb=0 + usedstoragespacegb = 0 + occupancyalarmlvel = 0 + warninggb = 0 for i in objects: systemname = i['systemname'] # Some versions of commandview use "objectname" instead of namefield - if i.has_key( namefield ): + if i.has_key(namefield): objectname = i[namefield] else: objectname = i['objectname'] - # Some versions of CV also return garbage objects, luckily it is easy to find these + # Some versions of CV also return garbage objects, luckily it is easy + # to find these if i.has_key('objecttype') and i['objecttype'] == 'typenotset': - longoutput("Object %s was skipped because objecttype == typenotset\n" % objectname ) + longoutput( + "Object %s was skipped because objecttype == typenotset\n" % objectname) continue # Lets see if this object is working - nagios_state = max( check_operationalstate(i), nagios_state ) - + nagios_state = max(check_operationalstate(i), nagios_state) # Lets add to the summary - if i['operationalstate'] != 'good' or detailedsummary == True: - summary += " %s/%s=%s " % (systemname, objectname, i['operationalstate']) + if i['operationalstate'] != 'good' or detailedsummary == True: + summary += " %s/%s=%s " % ( + systemname, objectname, i['operationalstate']) # Lets get some perfdata - identifier = "%s/%s_" % (systemname,objectname) + identifier = "%s/%s_" % (systemname, objectname) i['identifier'] = identifier - for field in perfdata_fields: - if field == '': continue - print perfdata_fields - add_perfdata( "'%s%s'=%s " % (identifier, field, i.get(field,None) )) + if field == '': + continue + add_perfdata("'%s%s'=%s " % + (identifier, field, i.get(field, None))) # Disk group gets a special perfdata treatment if command == "ls disk_group full": - totalstoragespacegb = float( i['totalstoragespacegb'] ) - usedstoragespacegb = float ( i['usedstoragespacegb'] ) - occupancyalarmlvel = float( i['occupancyalarmlevel'] ) + totalstoragespacegb = float(i['totalstoragespacegb']) + usedstoragespacegb = float(i['usedstoragespacegb']) + occupancyalarmlvel = float(i['occupancyalarmlevel']) warninggb = totalstoragespacegb * occupancyalarmlvel / 100 - add_perfdata( " '%sdiskusage'=%s;%s;%s "% (identifier, usedstoragespacegb,warninggb,totalstoragespacegb) ) + add_perfdata(" '%sdiskusage'=%s;%s;%s " % + (identifier, usedstoragespacegb, warninggb, totalstoragespacegb)) # Long Serviceoutput # There are usually to many disks for nagios to display. Skip. if command != "ls disk full": - longoutput( "\n%s/%s = %s (%s)\n"%(systemname,objectname,i['operationalstate'], i['operationalstatedetail']) ) + longoutput("\n%s/%s = %s (%s)\n" % + (systemname, objectname, i['operationalstate'], i['operationalstatedetail'])) - # If diskgroup has a problem because it is over allocated. Lets inform about that + # If diskgroup has a problem because it is over allocated. Lets inform + # about that if command == "ls disk_group full" and usedstoragespacegb > warninggb: - longoutput("- %s - diskgroup usage is over %s%% threshold !\n" % (state[warning], occupancyalarmlvel) ) + longoutput( + "- %s - diskgroup usage is over %s%% threshold !\n" % + (state[warning], occupancyalarmlvel)) # If a disk has a problem, lets display some extra info on it elif command == "ls disk full" and i['operationalstate'] != 'good': - longoutput( "Warning - %s=%s (%s)\n" % (i['diskname'], i['operationalstate'], i['operationalstatedetail'] )) - fields="modelnumber firmwareversion serialnumber failurepredicted diskdrivetype".split() + longoutput("Warning - %s=%s (%s)\n" % + (i['diskname'], i['operationalstate'], i['operationalstatedetail'])) + fields = "modelnumber firmwareversion serialnumber failurepredicted diskdrivetype".split( + ) for field in fields: - longoutput( "- %s = %s\n" % (field, i[field]) ) - + longoutput("- %s = %s\n" % (field, i[field])) nagios_state = max(nagios_state, check_multiple_objects(i, 'sensors')) nagios_state = max(nagios_state, check_multiple_objects(i, 'fans')) - nagios_state = max(nagios_state, check_multiple_objects(i, 'powersupplies')) - nagios_state = max(nagios_state, check_multiple_objects(i, 'communicationbuses')) - nagios_state = max(nagios_state, check_multiple_objects(i, 'fibrechannelports')) + nagios_state = max( + nagios_state, check_multiple_objects(i, 'powersupplies')) + nagios_state = max( + nagios_state, check_multiple_objects(i, 'communicationbuses')) + nagios_state = max( + nagios_state, check_multiple_objects(i, 'fibrechannelports')) nagios_state = max(nagios_state, check_multiple_objects(i, 'modules')) for x in longserviceoutputfields: - if i.has_key( x ): - longoutput( "- %s = %s\n" % (x, i[x])) + if i.has_key(x): + longoutput("- %s = %s\n" % (x, i[x])) + + end(summary, perfdata, longserviceoutput, nagios_state) - end(summary,perfdata,longserviceoutput,nagios_state) def check_multiple_objects(my_object, name): item_status = not_present if my_object.has_key(name): item_status = not_present - valid_states=['good'] - namefield="name" + valid_states = ['good'] + namefield = "name" detailfield = 'operationalstatedetail' - - if name == 'fans' or name == 'sensors': - valid_states = ['good','notavailable','unsupported','notinstalled'] + valid_states = [ + 'good', 'notavailable', 'unsupported', 'notinstalled'] elif name == 'fibrechannelports': - valid_states.append( 'notinstalled' ) + valid_states.append('notinstalled') num_items = len(my_object[name]) for item in my_object[name]: - stat = check_operationalstate( item,print_failed_objects=True, namefield=namefield, valid_states=valid_states,detailfield=detailfield) - item_status = max( stat, item_status ) - longoutput('- %s on %s (%s detected)\n'% (state[item_status], name, num_items) ) - add_perfdata( " '%s%s'=%s" % (my_object['identifier'],name, num_items) ) + stat = check_operationalstate( + item, print_failed_objects=True, namefield=namefield, valid_states=valid_states, detailfield=detailfield) + item_status = max(stat, item_status) + longoutput('- %s on %s (%s detected)\n' % + (state[item_status], name, num_items)) + add_perfdata(" '%s%s'=%s" % + (my_object['identifier'], name, num_items)) return item_status - def check_controllers(): - perfdata="" - #longserviceoutput="\n" + perfdata = "" + # longserviceoutput="\n" nagios_state = ok systems = run_sssu() - controllers =[] + controllers = [] for i in systems: result = run_sssu(system=i['objectname'], command="ls controller full") for controller in result: controller['systemname'] = i['objectname'] - controllers.append( controller ) + controllers.append(controller) summary = "%s objects found " % len(controllers) for i in controllers: systemname = i['systemname'] @@ -576,28 +611,30 @@ def check_controllers(): else: controllername = i['objectname'] # Lets see if this controller is working - nagios_state = max( check_operationalstate(i), nagios_state ) + nagios_state = max(check_operationalstate(i), nagios_state) # Lets add to the summary if not i.has_key('operationalstate'): summary += " %s does not have any operationalstate " % controllername - nagios_state = max( unknown, nagios_state ) + nagios_state = max(unknown, nagios_state) continue - elif i['operationalstate'] != 'good': - summary += " %s/%s=%s " % (systemname, controllername, i['operationalstate']) + elif i['operationalstate'] != 'good': + summary += " %s/%s=%s " % ( + systemname, controllername, i['operationalstate']) # Lets get some perfdata interesting_fields = "controllermainmemory" - identifier = "%s/%s_" % (systemname,controllername) - perfdata += get_perfdata(i, interesting_fields.split('|'), identifier=identifier) + identifier = "%s/%s_" % (systemname, controllername) + perfdata += get_perfdata( + i, interesting_fields.split('|'), identifier=identifier) # Long Serviceoutput #longserviceoutput = longserviceoutput + get_longserviceoutput(i, interesting_fields.split('|') ) #longserviceoutput = longserviceoutput + "\n%s/%s\n"%(systemname,controllername) - longoutput( "\n%s/%s = %s (%s)\n"%(systemname,controllername,i['operationalstate'], i['operationalstatedetail']) ) - longoutput( "- firmwareversion = %s \n" %(i['firmwareversion'])) - longoutput( "- serialnumber = %s \n" %(i['serialnumber'])) - + longoutput("\n%s/%s = %s (%s)\n" % + (systemname, controllername, i['operationalstate'], i['operationalstatedetail'])) + longoutput("- firmwareversion = %s \n" % (i['firmwareversion'])) + longoutput("- serialnumber = %s \n" % (i['serialnumber'])) controllertemper1aturestatus = not_present fanstate = not_present @@ -619,86 +656,97 @@ def check_controllers(): else: controllertemperaturestatus = warning - # Process the subsensors for hostport in i['hostports']: #long(" %s = %s\n" % (hostport['portname'], hostport['operationalstate'])) - hostportstate = max(hostportstate,ok) + hostportstate = max(hostportstate, ok) if hostport['operationalstate'] != 'good': - hostportstate = max(warning,hostport_state) - message = "Hostport %s state = %s\n" % (hostport['portname'], hostport['operationalstate']) + hostportstate = max(warning, hostport_state) + message = "Hostport %s state = %s\n" % ( + hostport['portname'], hostport['operationalstate']) longoutput(message) if i.has_key('fans'): for fan in i['fans']: - fanstate = max(fanstate,ok) + fanstate = max(fanstate, ok) #long(" %s = %s\n" % (fan['fanname'], fan['status'])) - if fan.has_key('status'): status = fan['status'] - elif fan.has_key('installstatus'): status = fan['installstatus'] + if fan.has_key('status'): + status = fan['status'] + elif fan.has_key('installstatus'): + status = fan['installstatus'] if status != 'normal' and status != 'yes': - fanstate = max(warning,fanstate) - longoutput("Fan %s status = %s\n" % (fan['fanname'],status)) + fanstate = max(warning, fanstate) + longoutput("Fan %s status = %s\n" % + (fan['fanname'], status)) if i.has_key('powersources'): for source in i['powersources']: - source_state = max(source_state,ok) - if not source.has_key('status'): continue + source_state = max(source_state, ok) + if not source.has_key('status'): + continue if source['state'] != 'good': - source_state = max(warning,source_state) - longoutput("Powersource %s status = %s\n" % (source['type'],source['state'])) + source_state = max(warning, source_state) + longoutput("Powersource %s status = %s\n" % + (source['type'], source['state'])) if i.has_key('modules'): for module in i['modules']: - module_state = max(module_state,ok) - if module['operationalstate'] not in ('good','not_present'): - module_state = max(warning,module_state) - longoutput("Battery Module %s status = %s\n" % (module['name'],module['operationalstate'])) + module_state = max(module_state, ok) + if module['operationalstate'] not in ('good', 'not_present'): + module_state = max(warning, module_state) + longoutput("Battery Module %s status = %s\n" % + (module['name'], module['operationalstate'])) - - for i in (fanstate,hostportstate,sensorstate,source_state,module_state,cache_state,controllertemperaturestatus): + for i in (fanstate, hostportstate, sensorstate, source_state, module_state, cache_state, controllertemperaturestatus): nagios_state = max(nagios_state, i) - longoutput("- %s on fans\n"%( state[fanstate] ) ) - longoutput("- %s on cachememory\n"%( state[cache_state] ) ) - longoutput("- %s on temperature\n"%( state[controllertemperaturestatus] ) ) - longoutput("- %s on hostports\n"%( state[hostportstate] ) ) - longoutput("- %s on sensors\n"%( state[sensorstate] ) ) - longoutput("- %s on powersupplies\n"%( state[source_state] ) ) - longoutput("- %s on batterymodules\n"%( state[module_state] ) ) - + longoutput("- %s on fans\n" % (state[fanstate])) + longoutput("- %s on cachememory\n" % (state[cache_state])) + longoutput("- %s on temperature\n" % + (state[controllertemperaturestatus])) + longoutput("- %s on hostports\n" % (state[hostportstate])) + longoutput("- %s on sensors\n" % (state[sensorstate])) + longoutput("- %s on powersupplies\n" % (state[source_state])) + longoutput("- %s on batterymodules\n" % (state[module_state])) longoutput('\n') - end(summary,perfdata,longserviceoutput,nagios_state) + end(summary, perfdata, longserviceoutput, nagios_state) + def set_path(): global path current_path = getenv('PATH') if path == '': - if current_path.find('C:\\') > -1: # We are on this platform + if current_path.find('C:\\') > -1: # We are on this platform path = ";C:\\Program Files\\Hewlett-Packard\\Sanworks\\Element Manager for StorageWorks HSV" else: path = ":/usr/local/bin" - current_path = "%s%s" % (current_path,path) + current_path = "%s%s" % (current_path, path) environ['PATH'] = current_path set_path() - if mode == 'check_systems': - perfdata_fields = 'totalstoragespace usedstoragespace availablestoragespace'.split() - longserviceoutputfields = 'licensestate systemtype firmwareversion nscfwversion totalstoragespace usedstoragespace availablestoragespace'.split() + perfdata_fields = 'totalstoragespace usedstoragespace availablestoragespace'.split( + ) + longserviceoutputfields = 'licensestate systemtype firmwareversion nscfwversion totalstoragespace usedstoragespace availablestoragespace'.split( + ) command = "ls system full" - namefield="objectname" - check_generic(command=command,namefield=namefield,longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields) + namefield = "objectname" + check_generic(command=command, namefield=namefield, + longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields) elif mode == 'check_controllers': check_controllers() elif mode == 'check_diskgroups': command = "ls disk_group full" - namefield='diskgroupname' - longserviceoutputfields = "totaldisks levelingstate levelingprogress totalstoragespacegb usedstoragespacegb occupancyalarmlevel".split() - perfdata_fields="totaldisks".split() - check_generic(command=command,namefield=namefield,longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields) + namefield = 'diskgroupname' + longserviceoutputfields = "totaldisks levelingstate levelingprogress totalstoragespacegb usedstoragespacegb occupancyalarmlevel".split( + ) + perfdata_fields = "totaldisks".split() + check_generic(command=command, namefield=namefield, + longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields) elif mode == 'check_disks': - check_generic(command="ls disk full",namefield="objectname") + check_generic(command="ls disk full", namefield="objectname") elif mode == 'check_diskshelfs' or mode == 'check_diskshelves': - check_generic(command="ls diskshelf full", namefield="diskshelfname", longserviceoutputfields=[], perfdata_fields=[]) + check_generic(command="ls diskshelf full", namefield="diskshelfname", + longserviceoutputfields=[], perfdata_fields=[]) else: print "* Error: Mode %s not found" % mode print_help()