This commit is contained in:
Páll Guðjón Sigurðsson 2010-10-06 09:51:47 +00:00
parent f186687bb7
commit 4b5edf25c7
5 changed files with 69 additions and 20 deletions

View File

@ -71,7 +71,7 @@ valid_modes = ( "check_systems", "check_controllers", "check_diskgroups","check_
from sys import exit from sys import exit
from sys import argv from sys import argv
from os import getenv,putenv from os import getenv,putenv,environ
import subprocess import subprocess
import xmlrpclib import xmlrpclib
import socket import socket
@ -178,7 +178,7 @@ def runCommand(command):
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)
if proc.returncode == 127: # File not found, lets print path if proc.returncode == 127 or proc.returncode == 1: # File not found, lets print path
path=getenv("PATH") path=getenv("PATH")
print "Current Path: %s" % (path) print "Current Path: %s" % (path)
exit(unknown) exit(unknown)
@ -596,11 +596,11 @@ def set_path():
current_path = getenv('PATH') current_path = getenv('PATH')
if 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" path = ";C:\\Program Files\\Hewlett-Packard\\Sanworks\\Element Manager for StorageWorks HSV"
else: else:
path = "/usr/local/bin" path = ":/usr/local/bin"
current_path = "%s:%s" % (current_path,path) current_path = "%s%s" % (current_path,path)
putenv('PATH', current_path) environ['PATH'] = current_path
set_path() set_path()

View File

@ -0,0 +1,32 @@
[modules]
NSCAAgent.dll
CheckExternalScripts.dll
[External Scripts]
eva-check_systems=cmd /c scripts\check_eva\check_eva.exe --mode check_systems --host localhost --username administrator --password Z0rglu66 --nagios_server 94.142.154.11 --nagios_myhostname commandview.okhysing.is
eva-check_disks=cmd /c scripts\check_eva\check_eva.exe --mode check_disks --host localhost --username administrator --password Z0rglu66 --nagios_myhostname commandview.okhysing.is --nagios_server 94.142.154.11
eva-check_diskgroups=cmd /c scripts\check_eva\check_eva.exe --mode check_diskgroups --host localhost --username administrator --password Z0rglu66 --nagios_myhostname commandview.okhysing.is --nagios_server 94.142.154.11
eva-check_diskshelfs=cmd /c scripts\check_eva\check_eva.exe --mode check_diskshelfs --host localhost --username administrator --password Z0rglu66 --nagios_myhostname commandview.okhysing.is --nagios_server 94.142.154.11
eva-check_controllers=cmd /c scripts\check_eva\check_eva.exe --mode check_controllers --host localhost --username administrator --password Z0rglu66 --nagios_myhostname commandview.okhysing.is --nagios_server 94.142.154.11
ls=cmd /c dir
[NSCA Agent]
hostname=commandview.okhysing.is
interval=300
encryption_method=1
password=prufa
nsca_host=94.142.154.11
nsca_port=5667
command_timeout=300
[NSCA Commands]
HP EVA Systems=eva-check_systems
HP EVA Diskshelves=eva-check_diskshelfs
HP EVA Disks=eva-check_disks
HP EVA Diskgroups=eva-check_diskgroups
HP EVA Controllers=eva-check_controllers
;check_ls=ls

View File

@ -40,10 +40,12 @@ username="eva"
password="eva1234" password="eva1234"
mode="check_systems" mode="check_systems"
path='' path=''
nagios_server = "" nagios_server = "94.142.154.10"
nagios_port = 8002 nagios_port = 80
nagios_myhostname = "localhost" nagios_myhostname = None
do_phone_home = False
escape_newlines = False escape_newlines = False
check_system = None # By default check all systems
# No real need to change anything below here # No real need to change anything below here
version="1.0" version="1.0"
@ -69,7 +71,7 @@ valid_modes = ( "check_systems", "check_controllers", "check_diskgroups","check_
from sys import exit from sys import exit
from sys import argv from sys import argv
from os import getenv,putenv from os import getenv,putenv,environ
import subprocess import subprocess
import xmlrpclib import xmlrpclib
import socket import socket
@ -77,7 +79,6 @@ socket.setdefaulttimeout(5)
def print_help(): def print_help():
print broken
print "check_eva version %s" % version print "check_eva version %s" % version
print "This plugin checks HP EVA Array with the sssu command" print "This plugin checks HP EVA Array with the sssu command"
print "" print ""
@ -143,8 +144,12 @@ while len(arguments) > 0:
nagios_myhostname = arguments.pop(0) nagios_myhostname = arguments.pop(0)
elif arg == '--nagios_server': elif arg == '--nagios_server':
nagios_server = arguments.pop(0) nagios_server = arguments.pop(0)
elif arg == '--nagiosport': elif arg == '--nagios_port':
nagios_port = arguments.pop(0) nagios_port = arguments.pop(0)
elif arg == '--system':
check_system = arguments.pop(0)
elif arg == '--phone-home':
do_phone_home = True
elif arg == '--escape-newlines': elif arg == '--escape-newlines':
escape_newlines = True escape_newlines = True
elif arg == '-h' or '--help': elif arg == '-h' or '--help':
@ -173,7 +178,7 @@ def runCommand(command):
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)
if proc.returncode == 127: # File not found, lets print path if proc.returncode == 127 or proc.returncode == 1: # File not found, lets print path
path=getenv("PATH") path=getenv("PATH")
print "Current Path: %s" % (path) print "Current Path: %s" % (path)
exit(unknown) exit(unknown)
@ -280,14 +285,21 @@ def run_sssu(system=None, command="ls system full"):
if not object.has_key(key): if not object.has_key(key):
value = ' '.join( tmp[2:] ).strip() value = ' '.join( tmp[2:] ).strip()
object[key] = value object[key] = value
#for i in objects: # Check if we were instructed to check only one eva system
# print i['objectname'] global check_system
if command == "ls system full" and check_system != None:
tmp_objects = []
for i in objects:
if i['objectname'] == check_system:
tmp_objects.append( i )
objects = tmp_objects
return objects return objects
def end(summary,perfdata,longserviceoutput,nagios_state): def end(summary,perfdata,longserviceoutput,nagios_state):
global show_longserviceoutput global show_longserviceoutput
global show_perfdata global show_perfdata
global nagios_server global nagios_server
global do_phone_home
global nagios_port global nagios_port
global nagios_myhostname global nagios_myhostname
global hostname global hostname
@ -302,8 +314,10 @@ def end(summary,perfdata,longserviceoutput,nagios_state):
if escape_newlines == True: if escape_newlines == True:
lines = message.split('\n') lines = message.split('\n')
message = '\\n'.join(lines) message = '\\n'.join(lines)
if nagios_server is not None: debug( "do_phone_home = %s" %(do_phone_home) )
if do_phone_home == True:
try: try:
if nagios_myhostname == None: nagios_myhostname = hostname
phone_home(nagios_server,nagios_port, status=nagios_state, message=message, hostname=nagios_myhostname, servicename=mode) phone_home(nagios_server,nagios_port, status=nagios_state, message=message, hostname=nagios_myhostname, servicename=mode)
except: except:
pass pass
@ -312,6 +326,7 @@ def end(summary,perfdata,longserviceoutput,nagios_state):
''' phone_home: Sends results to remote nagios server via python xml-rpc ''' ''' phone_home: Sends results to remote nagios server via python xml-rpc '''
def phone_home(nagios_server,nagios_port, status, message, hostname=None, servicename=None): def phone_home(nagios_server,nagios_port, status, message, hostname=None, servicename=None):
debug("phoning home: %s" % (servicename) )
uri = "http://%s:%s" % (nagios_server,nagios_port) uri = "http://%s:%s" % (nagios_server,nagios_port)
s = xmlrpclib.ServerProxy( uri ) s = xmlrpclib.ServerProxy( uri )
s.nagiosupdate(hostname, servicename, status, message) s.nagiosupdate(hostname, servicename, status, message)
@ -461,6 +476,8 @@ def check_multiple_objects(object, name):
if name == 'fans' or name == 'sensors': 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' )
num_items = len(object[name]) num_items = len(object[name])
for item in object[name]: for item in object[name]:
stat = check_operationalstate( item,print_failed_objects=True, namefield=namefield, valid_states=valid_states,detailfield=detailfield) stat = check_operationalstate( item,print_failed_objects=True, namefield=namefield, valid_states=valid_states,detailfield=detailfield)
@ -579,11 +596,11 @@ def set_path():
current_path = getenv('PATH') current_path = getenv('PATH')
if 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" path = ";C:\\Program Files\\Hewlett-Packard\\Sanworks\\Element Manager for StorageWorks HSV"
else: else:
path = "/usr/local/bin" path = ":/usr/local/bin"
current_path = "%s:%s" % (current_path,path) current_path = "%s%s" % (current_path,path)
putenv('PATH', current_path) environ['PATH'] = current_path
set_path() set_path()