X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=nagixsc.py;h=4f834869f236ff6ba35bc2299ffe413cecf9fd0f;hb=710adf53785970d1db875b0662fdabfd376bc53e;hp=4903509bff8a15528c3e3a1c0527a276c9f0695b;hpb=a86601d7389f2a4e3ed7f6099756471800f414b1;p=nagixsc.git diff --git a/nagixsc.py b/nagixsc.py index 4903509..4f83486 100644 --- a/nagixsc.py +++ b/nagixsc.py @@ -1,6 +1,7 @@ import base64 import datetime import libxml2 +import sys def debug(level, verb, string): if level <= verb: @@ -27,6 +28,37 @@ def encode(data, encoding=None): 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): @@ -68,11 +100,34 @@ def xml_to_dict(xmldoc, verb=0, hostfilter=None, servicefilter=None): 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 = {} @@ -81,7 +136,7 @@ def xml_to_dict(xmldoc, verb=0, hostfilter=None, servicefilter=None): 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()) @@ -117,14 +172,23 @@ def xml_from_dict(checks, encoding='base64'): 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