diff --git a/nagixsc.py b/nagixsc.py
index bf204c042c5ce0cf0e4e9082aefba679eed710df..d65aa09591406e85d9fbde3c1e79206433e5859b 100644 (file)
--- a/nagixsc.py
+++ b/nagixsc.py
import base64
import datetime
import libxml2
+import shlex
+import subprocess
+import sys
def debug(level, verb, string):
if level <= verb:
return base64.b64encode(data)
+##############################################################################
+
+def exec_check(host_name, service_descr, cmdline):
+ try:
+ cmd = subprocess.Popen(shlex.split(cmdline), stdout=subprocess.PIPE)
+ output = cmd.communicate()[0].rstrip()
+ retcode = cmd.returncode
+ except OSError:
+ output = 'Could not execute "%s"' % cmdline
+ retcode = 127
+
+ return {'host_name':host_name, 'service_description':service_descr, 'returncode':retcode, 'output':output, 'timestamp':datetime.datetime.now().strftime('%s')}
+
+
+##############################################################################
+
+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):
def xml_to_dict(xmldoc, verb=0, hostfilter=None, servicefilter=None):
checks = []
- filetimestamp = xml_get_timestamp(xmldoc)
+ now = int(datetime.datetime.now().strftime('%s'))
+ filetimestamp = reset_future_timestamp(xml_get_timestamp(xmldoc), now)
if hostfilter:
hosts = xmldoc.xpathNewContext().xpathEval('/nagixsc/host[name="%s"] | /nagixsc/host[name="%s"]' % (hostfilter, encode(hostfilter)))
output = None
if host.xpathEval('timestamp'):
- timestamp = int(host.xpathEval('timestamp')[0].get_content())
+ timestamp = reset_future_timestamp(int(host.xpathEval('timestamp')[0].get_content()), now)
else:
timestamp = filetimestamp
output = decode(xmloutput.get_content(), xmloutput.prop('encoding')).rstrip()
try:
- timestamp = int(service.xpathEval('timestamp')[0].get_content())
+ timestamp = reset_future_timestamp(int(service.xpathEval('timestamp')[0].get_content()), now)
except:
timestamp = filetimestamp
check['returncode'] = 3
return check
+
+def reset_future_timestamp(timestamp, now):
+ if timestamp <= now:
+ return timestamp
+ else:
+ return now
+