Ejemplo n.º 1
0
def run_server(log_level=logging.INFO, config_file=''):
    log = make_log(debug=log_level == logging.DEBUG, log_level=log_level)

    # For the debugging purposes
    log.info('Netcontrol %s' % version())

    # We need this early
    netcontrol.utils.logger = log

    # Read config
    config = Config()
    if config_file:
        log.info('Using config file %s' % config_file)
        config.load(config_file)
    else:
        log.info('Using default settings')

    # Handle first-launch reconfiguration
    deployed.reconfigure(config)

    # Add log handler to config, so all plugins could access it
    config.set('log_facility', log)

    # Start recording log for the bug reports
    log.blackbox.start()

    platform = netcontrol.utils.detect_platform()
    log.info('Detected platform: %s' % platform)

    # Load external plugins
    PluginLoader.initialize(log, config.get('netcontrol', 'plugins'), platform)
    PluginLoader.load_plugins()

    # Start components
    app = Application(config)
    PluginLoader.register_mgr(app)  # Register permanent app
    ComponentManager.create(app)

    # Start server
    host = config.get('netcontrol', 'bind_host')
    port = config.getint('netcontrol', 'bind_port')
    log.info('Listening on %s:%d' % (host, port))

    # SSL params
    ssl = {}
    if config.getint('netcontrol', 'ssl') == 1:
        ssl = {
            'keyfile': config.get('netcontrol', 'cert_key'),
            'certfile': config.get('netcontrol', 'cert_file'),
        }

    server = gevent.pywsgi.WSGIServer(
        (host, port), application=AppDispatcher(config).dispatcher, **ssl)

    config.set('server', server)

    log.info('Starting server')

    server.serve_forever()

    ComponentManager.get().stop()

    if hasattr(server, 'restart_marker'):
        log.info('Restarting by request')

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                log.debug('Closed descriptor #%i' % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        log.info('Stopped by request')
Ejemplo n.º 2
0
def run_server(log_level=logging.INFO, config_file=""):
    log = make_log(debug=log_level == logging.DEBUG, log_level=log_level)

    # For the debugging purposes
    log.info("Netcontrol %s" % version())

    # We need this early
    netcontrol.utils.logger = log

    # Read config
    config = Config()
    if config_file:
        log.info("Using config file %s" % config_file)
        config.load(config_file)
    else:
        log.info("Using default settings")

    # Handle first-launch reconfiguration
    deployed.reconfigure(config)

    # Add log handler to config, so all plugins could access it
    config.set("log_facility", log)

    # Start recording log for the bug reports
    log.blackbox.start()

    platform = netcontrol.utils.detect_platform()
    log.info("Detected platform: %s" % platform)

    # Load external plugins
    PluginLoader.initialize(log, config.get("netcontrol", "plugins"), platform)
    PluginLoader.load_plugins()

    # Start components
    app = Application(config)
    PluginLoader.register_mgr(app)  # Register permanent app
    ComponentManager.create(app)

    # Start server
    host = config.get("netcontrol", "bind_host")
    port = config.getint("netcontrol", "bind_port")
    log.info("Listening on %s:%d" % (host, port))

    # SSL params
    ssl = {}
    if config.getint("netcontrol", "ssl") == 1:
        ssl = {"keyfile": config.get("netcontrol", "cert_key"), "certfile": config.get("netcontrol", "cert_file")}

    server = gevent.pywsgi.WSGIServer((host, port), application=AppDispatcher(config).dispatcher, **ssl)

    config.set("server", server)

    log.info("Starting server")

    server.serve_forever()

    ComponentManager.get().stop()

    if hasattr(server, "restart_marker"):
        log.info("Restarting by request")

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                log.debug("Closed descriptor #%i" % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        log.info("Stopped by request")