Show how to read from the nagios datafile
#!/usr/bin/python
import os.path, datetime, sys
import termcolor
datfile = "/opt/local/var/nagios/status.dat"
def main(infile):
if os.path.exists(datfile) == False:
print termcolor.colored("Nagios status file not found. Check file path.", 'red', attrs=['bold'])
return
errfound = False
while 1:
line = infile.readline()
if line == "":
break
if line[:4] == "host":
x = host(infile)
if(x):
errfound = True
print x
if line[:7] == "service":
x = service(infile)
if(x):
errfound = True
print x
return errfound
def info(infile):
while 1:
line = infile.readline()
line = line.strip()
if line == "}":
break
param = line.split("=")[0]
if param == "created":
t = long(line[8:])
created = datetime.datetime.fromtimestamp(t)
return created
def host(infile):
while 1:
host_name = ''
current_state = '0'
plugin_output = ''
last_state_change = ''
line = infile.readline()
line = line.strip()
if line == "}":
break
param = line.split("=")[0]
if param == "host_name":
host_name = line[10:]
if param == "current_state":
current_state = line[14:]
if param == "plugin_output":
plugin_output = line[14:]
if param == "last_state_change":
t = long(line[18:])
last_state_change = datetime.datetime.fromtimestamp(t).strftime("%m/%d/%Y %I:%M %p")
if current_state != "0":
return '[%(date)s] [%(host)s] %(output)s' % dict(
date = termcolor.colored(last_state_change, 'yellow'),
host = host_name,
output = termcolor.colored('HOST DOWN: %s' % plugin_output, 'red'),
)
return None
def service(infile):
current_state = '0'
last_state_change = ''
plugin_output = ''
while 1:
line = infile.readline()
line = line.strip()
if line == "}":
break
param = line.split("=")[0]
if param == "host_name":
host_name = line[10:]
if param == "service_description":
service_description = line[20:]
if param == "current_state":
current_state = line[14:]
if param == "plugin_output":
plugin_output = line[14:]
if param == "last_state_change":
t = long(line[18:])
last_state_change = datetime.datetime.fromtimestamp(t).strftime("%m/%d/%Y %I:%M %p")
if current_state != "0":
return '[%(date)s] [%(host)s] %(output)s' % dict(
date = termcolor.colored(last_state_change, 'yellow'),
host = host_name,
output = termcolor.colored('%s: %s' % (service_description, plugin_output), 'red'),
)
return None
if(__name__ == '__main__'):
infile = open(datfile, "r")
if(main(infile)):
sys.exit(1)
else:
print termcolor.colored('\n\nno nagios alerts at this time\n\n', 'green')
gistfile1.py hosted by GitHub