Code

Changed license to GPL-2+ (from GPL-2only).
[nagixsc.git] / nagixsc_conf2http.py
index c87959bde20de2e135e1eff24b6dea8e5b3ad25b..6b063d6d4b15dc58b12e3f8525efe95f29860e37 100755 (executable)
@@ -1,4 +1,22 @@
 #!/usr/bin/python
+#
+# Nag(ix)SC -- nagixsc_conf2http.py
+#
+# Copyright (C) 2009-2010 Sven Velt <sv@teamix.net>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
 import ConfigParser
 import base64
@@ -43,13 +61,14 @@ config = {
                        'ssl': False,
                        'sslcert': None,
                        'conf_dir': '',
-                       'pidfile': '/var/run/nagixsc_conf2http.pid'
+                       'pidfile': '/var/run/nagixsc_conf2http.pid',
+                       'livestatus_socket' : None,
                }
 
-if 'ip' in cfgread.items('server'):
+if 'ip' in cfgread.options('server'):
        config['ip'] = cfgread.get('server', 'ip')
 
-if 'port' in cfgread.items('server'):
+if 'port' in cfgread.options('server'):
        config['port'] = cfgread.get('server', 'port')
 try:
        config['port'] = int(config['port'])
@@ -57,7 +76,7 @@ except ValueError:
        print 'Port "%s" not an integer!' % config['port']
        sys.exit(127)
 
-if 'ssl' in cfgread.items('server'):
+if 'ssl' in cfgread.options('server'):
        try:
                config['ssl'] = cfgread.getboolean('server', 'ssl')
        except ValueError:
@@ -65,7 +84,7 @@ if 'ssl' in cfgread.items('server'):
                sys.exit(127)
 
 if config['ssl']:
-       if 'sslcert' in cfgread.items('server'):
+       if 'sslcert' in cfgread.options('server'):
                config['sslcert'] = cfgread.get('server', 'sslcert')
        else:
                print 'SSL but no certificate file specified!'
@@ -77,9 +96,12 @@ except ConfigParser.NoOptionError:
        print 'No "conf_dir" specified!'
        sys.exit(127)
 
-if 'pidfile' in cfgread.items('server'):
+if 'pidfile' in cfgread.options('server'):
        config['pidfile'] = cfgread.get('server', 'pidfile')
 
+if 'livestatus_socket' in cfgread.options('server'):
+       config['livestatus_socket'] = prepare_socket(cfgread.get('server', 'livestatus_socket'))
+
 
 users = {}
 for u in cfgread.options('users'):
@@ -137,14 +159,26 @@ class Conf2HTTPHandler(MyHTTPRequestHandler):
                        self.http_error(500, 'Config file name contains invalid characters')
                        return
 
-               check_config = read_inifile(os.path.join(config['conf_dir'], configfile))
-               if not check_config:
-                       self.http_error(500, 'Could not read config file "%s"' % configfile)
-                       return
+               # Just be sure it exists
+               checks = None
+
+               # If config file name starts with "_" it's something special
+               if not configfile.startswith('_'):
+                       # Try to read config file, execute checks
+                       check_config = read_inifile(os.path.join(config['conf_dir'], configfile))
+                       if not check_config:
+                               self.http_error(500, 'Could not read config file "%s"' % configfile)
+                               return
+                       checks = conf2dict(check_config, host, service)
+
+               elif configfile=='_livestatus.conf' and config['livestatus_socket']:
+                       # Read mk-livestatus and translate into XML
+                       checks = livestatus2dict(config['livestatus_socket'], host, service)
+
 
-               checks = conf2dict(check_config, host, service)
+               # No check results? No (good) answer...
                if not checks:
-                       self.http_error(500, 'No checks executed')
+                       self.http_error(500, 'No check results')
                        return
 
                self.send_response(200)