def signal_handler(*args): logger.info('Received SIGTERM, shutting down.') logger.info("Stopping threads, please wait...") # teardown() if self.raw_report_processor.isAlive(): self.raw_report_processor.stop() self.ping_home_thread.stop()
def __init__(self, enable_ssl=False): logger.info('Starting web server at {}://{}:{}/'.format( 'https' if enable_ssl else 'http', faraday.server.config.faraday_server.bind_address, faraday.server.config.faraday_server.port)) self.__ssl_enabled = enable_ssl self.__config_server() self.__build_server_tree()
def __init__(self): self.__ssl_enabled = faraday.server.config.ssl.enabled logger.info( 'Starting web server at %s://%s:%s/', 'https' if self.__ssl_enabled else 'http', faraday.server.config.faraday_server.bind_address, faraday.server.config.ssl.port if self.__ssl_enabled else faraday.server.config.faraday_server.port) self.__websocket_ssl_enabled = faraday.server.config.websocket_ssl.enabled self.__websocket_port = faraday.server.config.faraday_server.websocket_port or 9000 self.__config_server() self.__build_server_tree()
def run(self): print self.WEB_UI_LOCAL_PATH def signal_handler(*args): logger.info('Received SIGTERM, shutting down.') logger.info("Stopping threads, please wait...") # teardown() self.raw_report_processor.stop() site = twisted.web.server.Site(self.__root_resource) site.displayTracebacks = False if self.__ssl_enabled: ssl_context = self.__load_ssl_certs() self.__listen_func = functools.partial(reactor.listenSSL, contextFactory=ssl_context) else: self.__listen_func = reactor.listenTCP try: self.install_signal() # start threads and processes self.raw_report_processor = RawReportProcessor() self.raw_report_processor.start() # web and static content self.__listen_func(self.__listen_port, site, interface=self.__bind_address) # websockets try: listenWS(self.__build_websockets_resource(), interface=self.__bind_address) except: logger.warn( 'Could not start websockets, address already open. This is ok is you wan to run multiple instances.' ) logger.info('Faraday Server is ready') reactor.addSystemEventTrigger('before', 'shutdown', signal_handler) reactor.run() except error.CannotListenError as e: logger.error(str(e)) sys.exit(1) except Exception as e: logger.error( 'Something went wrong when trying to setup the Web UI') logger.exception(e) sys.exit(1)
def __build_websockets_resource(self): websocket_port = int( faraday.server.config.faraday_server.websocket_port) url = f'{self.__bind_address}:{websocket_port}/websockets' if self.__websocket_ssl_enabled: url = 'wss://' + url else: url = 'ws://' + url # logger.info(u"Websocket listening at {url}".format(url=url)) logger.info( 'Starting websocket server at port {0} with bind address {1}. ' 'SSL {2}'.format(self.__websocket_port, self.__bind_address, self.__ssl_enabled)) factory = WorkspaceServerFactory(url=url) factory.protocol = BroadcastServerProtocol return factory
def restart_server(args_port): devnull = open('/dev/null', 'w') if args_port: ports = [args_port] else: ports = daemonize.get_ports_running() if not ports: logger.error('Faraday Server is not running') sys.exit(1) for port in ports: stop_server(port) params = ['/usr/bin/env', 'python2.7',\ os.path.join(faraday.server.config.FARADAY_BASE, __file__), '--no-setup', '--port', str(port)] logger.info('Restarting Faraday Server...') subprocess.Popen(params, stdout=devnull, stderr=devnull) logger.info('Faraday Server is running as a daemon in port {}'.format(port))
def setup_environment(check_deps=False): # Configuration files generation faraday.server.config.copy_default_config_to_local() if check_deps: # Check dependencies installed_deps, missing_deps, conflict_deps = dependencies.check_dependencies( requirements_file=faraday.server.config.REQUIREMENTS_FILE) logger.info("Checking dependencies...") if conflict_deps: logger.info( "Some dependencies are old. Update them with \"pip install -r requirements_server.txt -U\"" ) logger.info("Dependencies met") # Web configuration file generation faraday.server.config.gen_web_config()
def signal_handler(*args): logger.info('Received SIGTERM, shutting down.') logger.info("Stopping threads, please wait...") self.__stop_all_threads()
def run(self): def signal_handler(*args): logger.info('Received SIGTERM, shutting down.') logger.info("Stopping threads, please wait...") self.__stop_all_threads() log_path = CONST_FARADAY_HOME_PATH / 'logs' / 'access-logging.log' site = twisted.web.server.Site(self.__root_resource, logPath=log_path, logFormatter=proxiedLogFormatter) site.displayTracebacks = False if self.__ssl_enabled: ssl_context = self.__load_ssl_certs() self.__listen_func = functools.partial(reactor.listenSSL, contextFactory=ssl_context) else: self.__listen_func = reactor.listenTCP try: self.install_signal() # start threads and processes self.raw_report_processor = ReportsManager( REPORTS_QUEUE, name="ReportsManager-Thread", daemon=True) self.raw_report_processor.start() self.ping_home_thread = PingHomeThread() self.ping_home_thread.start() # web and static content self.__listen_func(self.__listen_port, site, interface=self.__bind_address) # websockets if faraday.server.config.websocket_ssl.enabled: try: contextFactory = ssl.DefaultOpenSSLContextFactory( faraday.server.config.websocket_ssl.keyfile.strip( '\''), faraday.server.config.websocket_ssl.certificate.strip( '\'')) listenWS(self.__build_websockets_resource(), interface=self.__bind_address, contextFactory=contextFactory) except SSLError as e: logger.error( 'Could not start websockets due to a SSL Config error. Some web functionality will not be available' ) except error.CannotListenError: logger.warn( 'Could not start websockets, address already open. This is ok is you wan to run multiple instances.' ) except Exception as ex: logger.warn(f'Could not start websocket, error: {ex}') else: try: listenWS(self.__build_websockets_resource(), interface=self.__bind_address) except error.CannotListenError: logger.warn( 'Could not start websockets, address already open. This is ok is you wan to run multiple instances.' ) except Exception as ex: logger.warn(f'Could not start websocket, error: {ex}') logger.info('Faraday Server is ready') reactor.addSystemEventTrigger('before', 'shutdown', signal_handler) reactor.run() except error.CannotListenError as e: logger.error(e) self.__stop_all_threads() sys.exit(1) except Exception as e: logger.exception( 'Something went wrong when trying to setup the Web UI') logger.exception(e) self.__stop_all_threads() sys.exit(1)
def main(): os.chdir(FARADAY_BASE) check_alembic_version() check_postgresql() parser = argparse.ArgumentParser() parser.add_argument('--ssl', action='store_true', help='enable HTTPS') parser.add_argument('--debug', action='store_true', help='run Faraday Server in debug mode') parser.add_argument('--start', action='store_true', help='run Faraday Server in background') parser.add_argument('--stop', action='store_true', help='stop Faraday Server') parser.add_argument('--restart', action='store_true', help='Restart Faraday Server') parser.add_argument('--nodeps', action='store_true', help='Skip dependency check') parser.add_argument('--no-setup', action='store_true', help=argparse.SUPPRESS) parser.add_argument('--port', help='Overides server.ini port configuration') parser.add_argument( '--websocket_port', help='Overides server.ini websocket port configuration') parser.add_argument('--bind_address', help='Overides server.ini bind_address configuration') f_version = faraday.__version__ parser.add_argument('-v', '--version', action='version', version='Faraday v{version}'.format(version=f_version)) args = parser.parse_args() if args.debug or faraday.server.config.faraday_server.debug: faraday.server.utils.logger.set_logging_level( faraday.server.config.DEBUG) if args.restart: restart_server(args.port) sys.exit() if args.stop: if args.port: sys.exit(0 if stop_server(args.port) else 1) else: ports = daemonize.get_ports_running() if not ports: logger.info('Faraday Server is not running') exit_code = 0 for port in ports: exit_code += 0 if stop_server(port) else 1 sys.exit(exit_code) else: if not args.port: args.port = '5985' sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex( (args.bind_address or faraday.server.config.faraday_server.bind_address, int(args.port or faraday.server.config.faraday_server.port))) if is_server_running(args.port) and result == 0: sys.exit(1) if result == 0: logger.error( "Faraday Server port in use. Check your processes and run the server again..." ) sys.exit(1) # Overwrites config option if SSL is set by argument if args.ssl: faraday.server.config.ssl.enabled = 'true' if not args.no_setup: setup_environment(not args.nodeps) if args.port: faraday.server.config.faraday_server.port = args.port if args.bind_address: faraday.server.config.faraday_server.bind_address = args.bind_address if args.websocket_port: faraday.server.config.faraday_server.websocket_port = args.websocket_port if args.start: # Starts a new process on background with --ignore-setup # and without --start nor --stop devnull = open('/dev/null', 'w') params = [ '/usr/bin/env', 'python3', os.path.join(faraday.server.config.FARADAY_BASE, __file__), '--no-setup' ] arg_dict = vars(args) for arg in arg_dict: if arg not in ["start", "stop"] and arg_dict[arg]: params.append('--' + arg) if not arg_dict[arg]: params.append(arg_dict[arg]) logger.info('Faraday Server is running as a daemon') subprocess.Popen(params, stdout=devnull, stderr=devnull) elif not args.start: run_server(args)
def run(self): def signal_handler(*args): logger.info('Received SIGTERM, shutting down.') logger.info("Stopping threads, please wait...") # teardown() self.raw_report_processor.stop() self.timer.stop() log_path = os.path.join(CONST_FARADAY_HOME_PATH, 'logs', 'access-logging.log') site = twisted.web.server.Site(self.__root_resource, logPath=log_path, logFormatter=proxiedLogFormatter) site.displayTracebacks = False if self.__ssl_enabled: ssl_context = self.__load_ssl_certs() self.__listen_func = functools.partial(reactor.listenSSL, contextFactory=ssl_context) else: self.__listen_func = reactor.listenTCP try: self.install_signal() # start threads and processes self.raw_report_processor = RawReportProcessor() self.raw_report_processor.start() self.timer = TimerClass() self.timer.start() # web and static content self.__listen_func(self.__listen_port, site, interface=self.__bind_address) # websockets if faraday.server.config.websocket_ssl.enabled: contextFactory = ssl.DefaultOpenSSLContextFactory( faraday.server.config.websocket_ssl.keyfile.strip('\''), faraday.server.config.websocket_ssl.certificate.strip( '\'')) try: listenWS(self.__build_websockets_resource(), interface=self.__bind_address, contextFactory=contextFactory) except error.CannotListenError: logger.warn( 'Could not start websockets, address already open. This is ok is you wan to run multiple instances.' ) except Exception as ex: logger.warn( 'Could not start websocket, error: {}'.format(ex)) else: try: listenWS(self.__build_websockets_resource(), interface=self.__bind_address) except error.CannotListenError: logger.warn( 'Could not start websockets, address already open. This is ok is you wan to run multiple instances.' ) except Exception as ex: logger.warn( 'Could not start websocket, error: {}'.format(ex)) logger.info('Faraday Server is ready') reactor.addSystemEventTrigger('before', 'shutdown', signal_handler) reactor.run() except error.CannotListenError as e: logger.error(str(e)) sys.exit(1) except Exception as e: logger.error( 'Something went wrong when trying to setup the Web UI') logger.exception(e) sys.exit(1)