def main(): os.chdir(faraday.server.config.FARADAY_BASE) # check_if_db_up() check_alembic_version() # TODO RETURN TO prev CWD check_postgresql() parser = argparse.ArgumentParser() parser.add_argument('--debug', action='store_true', help='run Faraday Server in debug mode') 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', type=int, 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=f'Faraday v{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) args.port = faraday.server.config.faraday_server.port = args.port or \ faraday.server.config.faraday_server.port or 5985 if args.bind_address: faraday.server.config.faraday_server.bind_address = args.bind_address 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) if not args.no_setup: setup_environment(not args.nodeps) if args.websocket_port: faraday.server.config.faraday_server.websocket_port = args.websocket_port run_server(args)
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 check_postgresql(): with app.app_context(): try: if not db.session.query(Workspace).count(): logger.warn( 'No workspaces found. Remember to execute CouchDB importer' ) except sqlalchemy.exc.ArgumentError: logger.error( '\n\b{RED}Please check your PostgreSQL connection string in the file ~/.faraday/config/server.ini on your home directory.{WHITE} \n' .format(RED=Fore.RED, WHITE=Fore.WHITE)) sys.exit(1) except sqlalchemy.exc.OperationalError: logger.error( '\n\n{RED}Could not connect to PostgreSQL.\n{WHITE}Please check: \n{YELLOW} * if database is running \n * configuration settings are correct. \n\n{WHITE}For first time installations execute{WHITE}: \n\n {GREEN} faraday-manage initdb\n\n' .format(GREEN=Fore.GREEN, YELLOW=Fore.YELLOW, WHITE=Fore.WHITE, RED=Fore.RED)) sys.exit(1)
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 check_postgresql(): with get_app().app_context(): try: if not db.session.query(Workspace).count(): logger.warning('No workspaces found') except sqlalchemy.exc.ArgumentError: logger.error( f'\n{Fore.RED}Please check your PostgreSQL connection string in the file ~/.faraday/config/server.ini on your home directory.{Fore.WHITE} \n' ) sys.exit(1) except sqlalchemy.exc.OperationalError: logger.error( '\n\n{RED}Could not connect to PostgreSQL.\n{WHITE}Please check: \n{YELLOW} * if database is running \n * configuration settings are correct. \n\n{WHITE}For first time installations execute{WHITE}: \n\n {GREEN} faraday-manage initdb\n\n'.format(GREEN=Fore.GREEN, YELLOW=Fore.YELLOW, WHITE=Fore.WHITE, RED=Fore.RED)) sys.exit(1) except sqlalchemy.exc.ProgrammingError: logger.error( f'\n\nn{Fore.WHITE}Missing migrations, please execute: \n\nfaraday-manage migrate') sys.exit(1)
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)