Code

Added livestatus as data source
[nagixsc.git] / nagixsc_live2xml.py
1 #!/usr/bin/python
3 import optparse
4 import sys
6 ##############################################################################
8 from nagixsc import *
10 ##############################################################################
12 parser = optparse.OptionParser()
14 parser.add_option('-s', '', dest='socket', help='Livestatus socket to connect')
15 parser.add_option('-o', '', dest='outfile', help='Output file name, "-" for STDOUT or HTTP POST URL')
16 parser.add_option('-e', '', dest='encoding', help='Encoding ("%s")' % '", "'.join(available_encodings()) )
17 parser.add_option('-H', '', dest='host', help='Hostname/section to search for in config file')
18 parser.add_option('-D', '', dest='service', help='Service description to search for in config file (needs -H)')
19 parser.add_option('-l', '', dest='httpuser', help='HTTP user name, if outfile is HTTP(S) URL')
20 parser.add_option('-a', '', dest='httppasswd', help='HTTP password, if outfile is HTTP(S) URL')
21 parser.add_option('-v', '', action='count', dest='verb', help='Verbose output')
23 parser.set_defaults(socket=None)
24 parser.set_defaults(outfile='-')
25 parser.set_defaults(encoding='base64')
26 parser.set_defaults(host=None)
27 parser.set_defaults(service=None)
28 parser.set_defaults(verb=0)
30 (options, args) = parser.parse_args()
32 ##############################################################################
34 if not options.socket:
35         print 'No socket specified!\n'
36         parser.print_help()
37         sys.exit(1)
39 if not check_encoding(options.encoding):
40         print 'Wrong encoding method "%s"!' % options.encoding
41         print 'Could be one of: "%s"' % '", "'.join(available_encodings())
42         sys.exit(1)
44 ##############################################################################
46 # Prepare socket
47 s_opts = prepare_socket(options.socket)
49 # Read informations from livestatus
50 checks = livestatus2dict(s_opts, options.host, options.service)
52 # Convert to XML
53 xmldoc = xml_from_dict(checks, options.encoding)
55 # Output
56 if options.outfile.startswith('http'):
57         (headers, body) = encode_multipart(xmldoc, options.httpuser, options.httppasswd)
59         try:
60                 response = urllib2.urlopen(urllib2.Request(options.outfile, body, headers)).read()
61         except urllib2.HTTPError, error:
62                 print error
63                 sys.exit(6)
64         except urllib2.URLError, error:
65                 print error.reason[1]
66                 sys.exit(7)
68         print response
70 elif options.outfile == '-':
71         xmldoc.saveFormatFile('-', format=1)
73 else:
74         xmldoc.saveFile(options.outfile)