Ejemplo n.º 1
0
def requeue_worker(worker_id):
    sq = SharQ('./sharq.conf')
    while STOP_THREADS is False:
        try:
            with sq.redis_client().lock('sharq-requeue-lock-key', timeout=15):
                try:
                    sq.requeue()
                except Exception as e:
                    traceback.print_exc()
        except LockError:
            # the lock wasn't acquired within specified time
            pass
        finally:
            sleep(REQUEUE_INTERVAL)
    print("thread-{}: exiting".format(worker_id))
Ejemplo n.º 2
0
class SharQServer(object):
    """Defines a HTTP based API on top of SharQ and
    exposed the app to run the server.
    """
    def __init__(self, config_path):
        """Load the SharQ config and define the routes."""
        # read the configs required by sharq-server.
        self.config = ConfigParser.SafeConfigParser()
        self.config.read(config_path)
        # pass the config file to configure the SharQ core.
        self.sq = SharQ(config_path)

        self.app = Flask(__name__)
        # set the routes
        self.app.add_url_rule('/', view_func=self._view_index, methods=['GET'])
        self.app.add_url_rule('/enqueue/<queue_type>/<queue_id>/',
                              view_func=self._view_enqueue,
                              methods=['POST'])
        self.app.add_url_rule('/dequeue/',
                              defaults={'queue_type': 'default'},
                              view_func=self._view_dequeue,
                              methods=['GET'])
        self.app.add_url_rule('/dequeue/<queue_type>/',
                              view_func=self._view_dequeue,
                              methods=['GET'])
        self.app.add_url_rule('/finish/<queue_type>/<queue_id>/<job_id>/',
                              view_func=self._view_finish,
                              methods=['POST'])
        self.app.add_url_rule('/interval/<queue_type>/<queue_id>/',
                              view_func=self._view_interval,
                              methods=['POST'])
        self.app.add_url_rule('/metrics/',
                              defaults={
                                  'queue_type': None,
                                  'queue_id': None
                              },
                              view_func=self._view_metrics,
                              methods=['GET'])
        self.app.add_url_rule('/metrics/<queue_type>/',
                              defaults={'queue_id': None},
                              view_func=self._view_metrics,
                              methods=['GET'])
        self.app.add_url_rule('/metrics/<queue_type>/<queue_id>/',
                              view_func=self._view_metrics,
                              methods=['GET'])
        self.app.add_url_rule('/deletequeue/<queue_type>/<queue_id>/',
                              view_func=self._view_clear_queue,
                              methods=['DELETE'])
        self.app.add_url_rule('/deepstatus/',
                              view_func=self._view_deep_status,
                              methods=['GET'])

    def requeue(self):
        """Loop endlessly and requeue expired jobs."""
        job_requeue_interval = float(
            self.config.get('sharq', 'job_requeue_interval'))
        while True:
            self.sq.requeue()
            gevent.sleep(job_requeue_interval / 1000.00)  # in seconds

    def _view_index(self):
        """Greetings at the index."""
        return jsonify(**{'message': 'Hello, SharQ!'})

    def _view_enqueue(self, queue_type, queue_id):
        """Enqueues a job into SharQ."""
        response = {'status': 'failure'}
        try:
            request_data = json.loads(request.data)
        except Exception, e:
            response['message'] = e.message
            return jsonify(**response), 400

        request_data.update({'queue_type': queue_type, 'queue_id': queue_id})

        try:
            response = self.sq.enqueue(**request_data)
        except Exception, e:
            response['message'] = e.message
            return jsonify(**response), 400