flawless/server/server.py
def serve(conf_path, storage_factory=None):
    """This method starts the server. There are two processes, one is an HTTP server that shows
    and admin interface and the second is a Thrift server that the client code calls.

    Arguments:
        `conf_path` - The path to your flawless.cfg file
        `storage_factory` - You can pass in your own storage class that implements StorageInterface. You must implement
                            storage_cls if you want Flawless to be horizontally scalable, since by default it will just
                            store everything on the local disk.
    """

    flawless.lib.config.init_config(conf_path)
    # Try and create datadir if it doesn't exist. For instance it might be in /tmp
    if not os.path.exists(config.data_dir_path):
        os.makedirs(config.data_dir_path)

    storage_factory = storage_factory or (lambda partition: DiskStorage(partition=partition))

    # Setup root logger
    root_logger = logging.getLogger()
    root_handler = logging.handlers.TimedRotatingFileHandler(
        filename=config.log_file, when='d', interval=1, backupCount=config.log_days_to_keep)
    root_logger.setLevel(getattr(logging, config.log_level))
    root_logger.addHandler(root_handler)

    child_pid = os.fork()
    if child_pid == 0:
        # Setup HTTP server
        handler = FlawlessWebServiceHandler(storage_factory=storage_factory)
        server = SimpleThreadedHTTPServer(('', config.http_port), SimpleRequestHTTPHandler)
        server.attach_service(handler)
        server.request_queue_size = 50

        try:
            server.serve_forever()
        except (KeyboardInterrupt, SystemExit):
            server.server_close()
    else:
        # Setup Thrift server
        handler = FlawlessThriftServiceHandler(storage_factory=storage_factory)
        processor = Flawless.Processor(handler)
        transport = TSocket.TServerSocket(port=config.port)
        tfactory = TTransport.TFramedTransportFactory()
        pfactory = TBinaryProtocol.TBinaryProtocolFactory()
        server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
        try:
            server.serve()
        except (KeyboardInterrupt, SystemExit):
            handler.errors_seen.sync()
            transport.close()
            os.kill(child_pid, signal.SIGINT)
def serve(conf_path, storage_factory=None):
    flawless.lib.config.init_config(conf_path)
    # Try and create datadir if it doesn't exist. For instance it might be in /tmp
    if not os.path.exists(config.data_dir_path):
        os.makedirs(config.data_dir_path)

    storage_factory = storage_factory or (lambda partition: DiskStorage(partition=partition))

    # Setup root logger
    root_logger = logging.getLogger()
    root_handler = logging.handlers.TimedRotatingFileHandler(
        filename=config.log_file, when='d', interval=1, backupCount=config.log_days_to_keep)
    root_logger.setLevel(getattr(logging, config.log_level))
    root_logger.addHandler(root_handler)

    child_pid = os.fork()
    if child_pid == 0:
        # Setup HTTP server
        handler = FlawlessWebServiceHandler(storage_factory=storage_factory)
        server = SimpleThreadedHTTPServer(('', config.http_port), SimpleRequestHTTPHandler)
        server.attach_service(handler)
        server.request_queue_size = 50

        try:
            server.serve_forever()
        except (KeyboardInterrupt, SystemExit):
            server.server_close()
    else:
        # Setup Thrift server
        handler = FlawlessThriftServiceHandler(storage_factory=storage_factory)
        processor = Flawless.Processor(handler)
        transport = TSocket.TServerSocket(port=config.port)
        tfactory = TTransport.TFramedTransportFactory()
        pfactory = TBinaryProtocol.TBinaryProtocolFactory()
        server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
        try:
            server.serve()
        except (KeyboardInterrupt, SystemExit):
            handler.errors_seen.sync()
            transport.close()
            os.kill(child_pid, signal.SIGINT)
def serve ( conf_path , storage_factory = None ) : flawless . lib . config . init_config ( conf_path ) # Try and create datadir if it doesn't exist. For instance it might be in /tmp if not os . path . exists ( config . data_dir_path ) : os . makedirs ( config . data_dir_path ) storage_factory = storage_factory or ( lambda partition : DiskStorage ( partition = partition ) ) # Setup root logger root_logger = logging . getLogger ( ) root_handler = logging . handlers . TimedRotatingFileHandler ( filename = config . log_file , when = 'd' , interval = 1 , backupCount = config . log_days_to_keep ) root_logger . setLevel ( getattr ( logging , config . log_level ) ) root_logger . addHandler ( root_handler ) child_pid = os . fork ( ) if child_pid == 0 : # Setup HTTP server handler = FlawlessWebServiceHandler ( storage_factory = storage_factory ) server = SimpleThreadedHTTPServer ( ( '' , config . http_port ) , SimpleRequestHTTPHandler ) server . attach_service ( handler ) server . request_queue_size = 50 try : server . serve_forever ( ) except ( KeyboardInterrupt , SystemExit ) : server . server_close ( ) else : # Setup Thrift server handler = FlawlessThriftServiceHandler ( storage_factory = storage_factory ) processor = Flawless . Processor ( handler ) transport = TSocket . TServerSocket ( port = config . port ) tfactory = TTransport . TFramedTransportFactory ( ) pfactory = TBinaryProtocol . TBinaryProtocolFactory ( ) server = TServer . TThreadedServer ( processor , transport , tfactory , pfactory ) try : server . serve ( ) except ( KeyboardInterrupt , SystemExit ) : handler . errors_seen . sync ( ) transport . close ( ) os . kill ( child_pid , signal . SIGINT )
This method starts the server. There are two processes, one is an HTTP server that shows
    and admin interface and the second is a Thrift server that the client code calls.

    Arguments:
        `conf_path` - The path to your flawless.cfg file
        `storage_factory` - You can pass in your own storage class that implements StorageInterface. You must implement
                            storage_cls if you want Flawless to be horizontally scalable, since by default it will just
                            store everything on the local disk.
This method starts the server . There are two processes one is an HTTP server that shows and admin interface and the second is a Thrift server that the client code calls .