Code

http2nagios is now able to write to command pipe
[nagixsc.git] / nagixsc_conf2http.py
index c87959bde20de2e135e1eff24b6dea8e5b3ad25b..c738b7acfe7eaceae00e175dd8f2887e377b941a 100755 (executable)
@@ -43,13 +43,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 +58,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 +66,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 +78,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 +141,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)