Code

FIX: write_xml_or_die always set Auth to None...
[nagixsc.git] / nagixsc_read_xml.py
1 #!/usr/bin/python
3 #import base64
4 import datetime
5 import libxml2
6 import optparse
7 import sys
9 parser = optparse.OptionParser()
11 parser.add_option('-u', '', dest='url', help='URL of status file (xml)')
12 parser.add_option('-l', '', dest='httpuser', help='HTTP user name')
13 parser.add_option('-a', '', dest='httppasswd', help='HTTP password')
14 parser.add_option('-f', '', dest='file', help='(Path and) file name of status file')
15 parser.add_option('-s', '', dest='seconds', type='int', help='Maximum age in seconds of xml timestamp')
16 parser.add_option('-m', '', action='store_true', dest='markold', help='Mark (Set state) of too old checks as UNKNOWN')
17 parser.add_option('-P', '', action='store_true', dest='pprint', help='Output with Python\'s pprint')
18 parser.add_option('-v', '', action='count', dest='verb', help='Verbose output')
20 parser.set_defaults(url=None)
21 parser.set_defaults(httpuser=None)
22 parser.set_defaults(httppasswd=None)
23 parser.set_defaults(file='-')
24 parser.set_defaults(seconds=14400)
25 parser.set_defaults(markold=False)
26 parser.set_defaults(pprint=False)
27 parser.set_defaults(verb=0)
29 (options, args) = parser.parse_args()
31 ##############################################################################
33 from nagixsc import *
35 ##############################################################################
37 now = int(datetime.datetime.now().strftime('%s'))
39 # Get URL or file
40 doc = read_xml(options)
43 # Check XML file basics
44 (status, string) = xml_check_version(doc)
45 debug(1, options.verb, string)
46 if not status:
47         print string
48         sys.exit(127)
51 # Get timestamp and check it
52 filetimestamp = xml_get_timestamp(doc)
53 if not filetimestamp:
54         print 'No timestamp found in XML file, exiting because of invalid XML data...'
55         sys.exit(127)
57 timedelta = int(now) - int(filetimestamp)
58 debug(1, options.verb, 'Age of XML file: %s seconds, max allowed: %s seconds' % (timedelta, options.seconds))
61 # Put XML to Python dict
62 checks = xml_to_dict(doc)
65 if options.pprint:
66         # Print 'em all in one
67         import pprint
68         pprint.pprint(checks)
69 else:
70         # Loop over check results and output them
71         for check in checks:
72                 check = check_mark_outdated(check, now, options.seconds, options.markold)
73                 print 'Host:      %s\nService:   %s\nRetCode:   %s\nOutput:    %r\nTimestamp: %s\n' % (check['host_name'], check['service_description'], check['returncode'], check['output'], check['timestamp'])