diff --git a/nagixsc.py b/nagixsc.py
index 4903509bff8a15528c3e3a1c0527a276c9f0695b..4f834869f236ff6ba35bc2299ffe413cecf9fd0f 100644 (file)
--- a/nagixsc.py
+++ b/nagixsc.py
import base64
import datetime
import libxml2
+import sys
def debug(level, verb, string):
if level <= verb:
return base64.b64encode(data)
+##############################################################################
+
+def read_xml(options):
+ if options.url != None:
+ import urllib2
+
+ if options.httpuser and options.httppasswd:
+ passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
+ passman.add_password(None, options.url, options.httpuser, options.httppasswd)
+ authhandler = urllib2.HTTPBasicAuthHandler(passman)
+ opener = urllib2.build_opener(authhandler)
+ urllib2.install_opener(opener)
+
+ try:
+ response = urllib2.urlopen(options.url)
+ except urllib2.HTTPError, error:
+ print error
+ sys.exit(0)
+ except urllib2.URLError, error:
+ print error.reason[1]
+ sys.exit(0)
+
+ doc = libxml2.parseDoc(response.read())
+ response.close()
+
+ else:
+ doc = libxml2.parseFile(options.file)
+
+ return doc
+
+
##############################################################################
def xml_check_version(xmldoc):
hostname = decode(xmlhostname.get_content(), xmlhostname.prop('encoding'))
debug(2, verb, 'Found host "%s"' % hostname)
+ # Look for Host check result
+ if host.xpathEval('returncode'):
+ retcode = host.xpathEval('returncode')[0].get_content()
+ else:
+ retcode = None
+
+ if host.xpathEval('output'):
+ xmloutput = host.xpathEval('output')[0]
+ output = decode(xmloutput.get_content(), xmloutput.prop('encoding')).rstrip()
+ else:
+ output = None
+
+ if host.xpathEval('timestamp'):
+ timestamp = int(host.xpathEval('timestamp')[0].get_content())
+ else:
+ timestamp = filetimestamp
+
+ if retcode and output:
+ checks.append({'host_name':hostname, 'service_description':None, 'returncode':retcode, 'output':output, 'timestamp':timestamp})
+
+
+ # Look for service filter
if servicefilter:
services = host.xpathEval('service[description="%s"] | service[description="%s"]' % (servicefilter, encode(servicefilter)))
else:
services = host.xpathEval('service')
+ # Loop over services in host
for service in services:
service_dict = {}
srvdescr = decode(xmldescr.get_content(), xmldescr.prop('encoding'))
retcode = service.xpathEval('returncode')[0].get_content()
- output = decode(xmloutput.get_content(), xmldescr.prop('encoding')).rstrip()
+ output = decode(xmloutput.get_content(), xmloutput.prop('encoding')).rstrip()
try:
timestamp = int(service.xpathEval('timestamp')[0].get_content())
xmlhostname = xmlhost.newChild(None, 'name', encode(check['host_name'], encoding))
lasthost = check['host_name']
- xmlservice = xmlhost.newChild(None, 'service', None)
- xmlname = xmlservice.newChild(None, 'description', encode(check['service_description'], encoding))
- xmlname.setProp('encoding', encoding)
- xmlreturncode = xmlservice.newChild(None, 'returncode', str(check['returncode']))
- xmloutput = xmlservice.newChild(None, 'output', encode(check['output'], encoding))
- xmloutput.setProp('encoding', encoding)
- if check.has_key('timestamp'):
- xmltimestamp = xmlservice.newChild(None, 'timestamp', str(check['timestamp']))
+ if check['service_description'] == '' or check['service_description'] == None:
+ # Host check result
+ xmlreturncode = xmlhost.newChild(None, 'returncode', str(check['returncode']))
+ xmloutput = xmlhost.newChild(None, 'output', encode(check['output'], encoding))
+ xmloutput.setProp('encoding', encoding)
+ if check.has_key('timestamp'):
+ xmltimestamp = xmlhost.newChild(None, 'timestamp', str(check['timestamp']))
+ else:
+ # Service check result
+ xmlservice = xmlhost.newChild(None, 'service', None)
+ xmlname = xmlservice.newChild(None, 'description', encode(check['service_description'], encoding))
+ xmlname.setProp('encoding', encoding)
+ xmlreturncode = xmlservice.newChild(None, 'returncode', str(check['returncode']))
+ xmloutput = xmlservice.newChild(None, 'output', encode(check['output'], encoding))
+ xmloutput.setProp('encoding', encoding)
+ if check.has_key('timestamp'):
+ xmltimestamp = xmlservice.newChild(None, 'timestamp', str(check['timestamp']))
return xmldoc