Example #1
0
def prepare():
    import zmq

    from cc_server.commons.configuration import Config
    from cc_server.commons.helper import close_sockets
    from cc_server.services.web.request_handler import RequestHandler

    config = Config()

    context = zmq.Context()
    logger_socket = context.socket(zmq.PUSH)
    logger_socket.connect(config.server_log['external_url'])
    tee = logger_socket.send_string

    master_socket = context.socket(zmq.PUSH)
    master_socket.connect(config.server_master['external_url'])

    atexit.register(close_sockets, [logger_socket, master_socket])

    global request_handler
    request_handler = RequestHandler(
        config=config,
        tee=tee,
        master=master_socket
    )

    tee('Started service web with pid {}'.format(os.getpid()))

    return config
Example #2
0
def main():
    config = Config()

    # start zmq server
    context = zmq.Context()
    logger_socket = context.socket(zmq.PULL)
    logger_socket.bind('tcp://{}:{}'.format(config.server_log['bind_host'],
                                            config.server_log['bind_port']))

    # create folder if not existent
    log_path = None
    if config.server_log.get('log_dir'):
        log_dir = os.path.expanduser(config.server_log['log_dir'])
        if not os.path.exists(log_dir):
            os.makedirs(log_dir)
        log_path = os.path.join(log_dir, FILE_NAME)

    # define possible functions for tee
    def stdout_func(message):
        print(message)

    def file_func(message):
        with open(log_path, 'a') as f:
            print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S |"),
                  message,
                  file=f)

    def both_func(message):
        print(message)
        file_func(message)

    def neither_func(_):
        pass

    # choose function for tee
    suppress_stdout = config.server_log.get('suppress_stdout')
    tee = stdout_func
    if suppress_stdout:
        tee = neither_func
        if log_path:
            tee = file_func
    elif log_path:
        tee = both_func

    # inform at exit
    def at_exit():
        tee('Stopped service logs with pid {}'.format(os.getpid()))

    atexit.register(at_exit)

    # log status
    tee('Started service logs with pid {}'.format(os.getpid()))
    tee('Loaded TOML config from {}'.format(config.config_file_path))

    # start endless loop
    while True:
        m = logger_socket.recv_string()
        tee(m)
Example #3
0
def main():
    config = Config()

    options = {
        'bind': '{}:{}'.format(
            config.server_files['bind_host'],
            config.server_files['bind_port']
        ),
        'workers': config.server_files.get('num_workers', cpu_count()),
        'worker_class': 'gevent'
    }

    WebApp(app_module='cc_server.services.files.wsgi', options=options).run()
Example #4
0
def main():
    from cc_server.commons.configuration import Config
    from cc_server.commons.gunicorn_integration import WebApp

    config = Config()

    options = {
        'bind': '{}:{}'.format(
            config.server_web['bind_host'],
            config.server_web['bind_port']
        ),
        'workers': config.server_web.get('num_workers', cpu_count()),
        'worker_class': 'gevent'
    }

    WebApp(app_module='cc_server.services.web.wsgi', options=options).run()
Example #5
0
def main():
    config = Config()

    log = Process(target=log_main)
    log.daemon = True
    log.start()

    master = Process(target=master_main)
    master.daemon = True
    master.start()

    if config.server_files:
        files = Process(target=files_main)
        files.daemon = True
        files.start()

    web_main()
Example #6
0
def prepare():
    config = Config()

    global tee
    global input_files_dir
    global result_files_dir

    context = zmq.Context()
    logger_socket = context.socket(zmq.PUSH)
    logger_socket.connect(config.server_log['external_url'])
    tee = logger_socket.send_string

    atexit.register(close_sockets, [logger_socket])

    input_files_dir = os.path.expanduser(config.server_files['input_files_dir'])
    result_files_dir = os.path.expanduser(config.server_files['result_files_dir'])

    tee('Started service files with pid {}'.format(os.getpid()))

    return config
Example #7
0
def main():
    config = Config()

    # start zmq server
    context = zmq.Context()
    master_socket = context.socket(zmq.PULL)
    master_socket.bind('tcp://{}:{}'.format(config.server_master['bind_host'],
                                            config.server_master['bind_port']))

    # connect to logger
    logger_socket = context.socket(zmq.PUSH)
    logger_socket.connect(config.server_log['external_url'])
    tee = logger_socket.send_string

    # initialize singletons
    mongo = Mongo(config=config)
    state_handler = StateHandler(config=config, tee=tee, mongo=mongo)
    cluster_provider = DockerProvider(config=config, tee=tee, mongo=mongo)
    cluster = Cluster(config=config,
                      tee=tee,
                      mongo=mongo,
                      state_handler=state_handler,
                      cluster_provider=cluster_provider)
    scheduler = Scheduler(config=config,
                          tee=tee,
                          mongo=mongo,
                          state_handler=state_handler,
                          cluster=cluster)
    worker = Worker(config=config,
                    tee=tee,
                    mongo=mongo,
                    state_handler=state_handler,
                    cluster=cluster,
                    scheduler=scheduler)

    # inform at exit
    def at_exit():
        tee('Stopped service master with pid {}'.format(os.getpid()))

    atexit.register(at_exit)

    # log status
    tee('Started service master with pid {}'.format(os.getpid()))

    # start endless loop
    while True:
        d = master_socket.recv_json()
        action = d.get('action')
        if action == 'schedule':
            pass
            worker.schedule()
        elif action == 'container_callback':
            pass
            worker.container_callback()
        elif action == 'data_container_callback':
            pass
            worker.data_container_callback()
        elif action == 'update_node_status':
            node_name = d.get('data', {}).get('node_name')
            if node_name:
                pass