Esempio n. 1
0
class QueueServer(object):
    # TODO: make args list
    def __init__(self, leader, replica_factor=constants.DEFAULT_REPLICA_FACTOR, 
        replica_offset=constants.DEFAULT_REPLICA_SECS_OFFSET, interface=None, 
        frontend_port=constants.DEFAULT_FRONTEND_PORT, 
        backend_port=constants.DEFAULT_BACKEND_PORT, 
        cluster_port=constants.DEFAULT_CLUSTER_PORT):
        if interface is None:
            interface = socket.gethostbyname(socket.gethostname())
        self.queue = gevent.queue.Queue()
        self.frontend = gevent.pywsgi.WSGIServer((interface, frontend_port), self._frontend_app, log=None)
        self.scheduler = DistributedScheduler(self.queue, leader, replica_factor=replica_factor, 
            replica_offset=replica_offset, interface=interface, port=backend_port, cluster_port=cluster_port)
        self._ready_event = None
    
    def start(self, block=True):
        self.frontend.start()
        self.scheduler.start()
        
        while not self.frontend.started:
            gevent.sleep(1)
        
        self._ready_event.set()
        
        while block:
            gevent.sleep(1)
    
    def _frontend_app(self, env, start_response):
        try:
            queue_name = env['PATH_INFO']
            content_type = env['CONTENT_TYPE']
            body = env['wsgi.input'].read()
            task = Task(queue_name, content_type, body)
            
            self.scheduler.schedule(task) # TODO: needs queue on the other end
            
            start_response('200 OK', [('Content-Type', 'application/json')])
            return ['{"status": "scheduled", "id": "%s"}\n' % task.id]
        except NotImplemented, e:
            start_response('500 Error', [('Content-Type', 'application/json')])
            return [json.dumps({"status": "error", "reason": repr(e)})]
Esempio n. 2
0
 def __init__(self, leader, replica_factor=constants.DEFAULT_REPLICA_FACTOR, 
     replica_offset=constants.DEFAULT_REPLICA_SECS_OFFSET, interface=None, 
     frontend_port=constants.DEFAULT_FRONTEND_PORT, 
     backend_port=constants.DEFAULT_BACKEND_PORT, 
     cluster_port=constants.DEFAULT_CLUSTER_PORT):
     if interface is None:
         interface = socket.gethostbyname(socket.gethostname())
     self.queue = gevent.queue.Queue()
     self.frontend = gevent.pywsgi.WSGIServer((interface, frontend_port), self._frontend_app, log=None)
     self.scheduler = DistributedScheduler(self.queue, leader, replica_factor=replica_factor, 
         replica_offset=replica_offset, interface=interface, port=backend_port, cluster_port=cluster_port)
     self._ready_event = None