Code

Add function to merge multiple XML files
[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('-v', '', action='count', dest='verb', help='Verbose output')
19 parser.set_defaults(url=None)
20 parser.set_defaults(httpuser=None)
21 parser.set_defaults(httppasswd=None)
22 parser.set_defaults(file='nagixsc.xml')
23 parser.set_defaults(seconds=14400)
24 parser.set_defaults(markold=False)
25 parser.set_defaults(verb=0)
27 (options, args) = parser.parse_args()
29 ##############################################################################
31 from nagixsc import *
33 ##############################################################################
35 now = int(datetime.datetime.now().strftime('%s'))
37 # Get URL or file
38 doc = read_xml(options)
41 # Check XML file basics
42 (status, string) = xml_check_version(doc)
43 debug(1, options.verb, string)
44 if not status:
45         print string
46         sys.exit(127)
49 # Get timestamp and check it
50 filetimestamp = xml_get_timestamp(doc)
51 if not filetimestamp:
52         print 'No timestamp found in XML file, exiting because of invalid XML data...'
53         sys.exit(127)
55 timedelta = int(now) - int(filetimestamp)
56 debug(1, options.verb, 'Age of XML file: %s seconds, max allowed: %s seconds' % (timedelta, options.seconds))
59 # Put XML to Python dict
60 checks = xml_to_dict(doc)
63 # Loop over check results and output them
64 for check in checks:
65         check = check_mark_outdated(check, now, options.seconds, options.markold)
66         print 'Host:      %s\nService:   %s\nRetCode:   %s\nOutput:    %r\nTimestamp: %s\n' % (check['host_name'], check['service_description'], check['returncode'], check['output'], check['timestamp'])
68 import pprint
69 pprint.pprint(checks)