示例#1
0
    def start(self):
        # logging
        if conf.getLogging():
            logfile = conf.getLogfile()
            pathToLog = logfile.rsplit('/', 1)[0]
            if not os.path.exists(pathToLog):
                os.makedirs(pathToLog)
            file_handler = RotatingFileHandler(logfile,
                                               maxBytes=conf.getMaxLogSize(),
                                               backupCount=conf.getBacklog())
            file_handler.setLevel(logging.ERROR)
            formatter = logging.Formatter(
                "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
            file_handler.setFormatter(formatter)
            self.app.logger.addHandler(file_handler)

        #for route in web.Routes.get_routes(self): self.addRoute(route)

        if conf.getDebug():
            # start debug flask server
            self.app.run(host=conf.getHost(), port=conf.getPort(), debug=True)
        else:
            # start asynchronous server using tornado wrapper for flask
            # ssl connection
            print("Server starting...")
            if conf.useSSL():
                ssl_options = {
                    "certfile": os.path.join(_runPath, "../",
                                             conf.getSSLCert()),
                    "keyfile": os.path.join(_runPath, "../", conf.getSSLKey())
                }
            else:
                ssl_options = None
            signal.signal(signal.SIGTERM, self.sig_handler)
            signal.signal(signal.SIGINT, self.sig_handler)

            self.http_server = HTTPServer(WSGIContainer(self.app),
                                          ssl_options=ssl_options)
            self.http_server.bind(conf.getPort(), address=conf.getHost())
            self.http_server.start(0)  # Forks multiple sub-processes
            IOLoop.instance().start()