Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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))
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
    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)