예제 #1
0
    def process(self, q_item):
        if q_item.method == 'post':
            json_resp = self.post(url=q_item.url,
                                  data=json.loads(q_item.payload))
        else:
            json_resp = self.get(url=q_item.url)

        if 'error' in session:
            q_item.status = "error"
            error = session.pop('error')
            q_item.response = json.dumps(error)
            if q_item.retry_count is None:
                q_item.retry_count = 0
            else:
                q_item.retry_count += 1
            Queue.update(q_item)
            return error
        else:
            if q_item.cache_name:
                Cache.set_data(q_item.cache_name,
                               json_resp,
                               is_unique=q_item.cache_is_unique)

            q_item.status = "ok"
            q_item.response = json.dumps(json_resp)

        Queue.update(q_item)
        return json_resp
예제 #2
0
    def reserve_place(self, name, email, eventdate_id):
        data = {'name': name, 'email': email, 'eventdate_id': eventdate_id}

        Queue.add(f'reserve place for {name}',
                  url='event/reserve',
                  method='post',
                  payload=data)
        return json.dumps({'message': 'Your place will be reserved'})
예제 #3
0
    def add_subscription_email(self, name, email, marketing_id):
        data = {'name': name, 'email': email, 'marketing_id': marketing_id}

        Queue.add(f'subscribe {name}',
                  url='member/subscribe',
                  method='post',
                  payload=data)
        return json.dumps({'message': 'Your subscription will be processed'})
예제 #4
0
 def get_users(self):
     Queue.add(f'get users',
               url='users',
               method='get',
               backoff_duration=30,
               cache_name="get_users",
               cache_is_unique=True)
     return Cache.get_data('get_users', default=[])
예제 #5
0
def queue():
    form = QueueForm()
    form.setup_status_filter()
    if form.validate_on_submit():
        queue = Queue.list_queue(form.status_filter.data)
    else:
        queue = Queue.list_queue("new")
    return render_template('views/admin/queue.html', queue=queue, form=form)
예제 #6
0
 def update_user_access_area(self, user_id, access_area):
     data = {'access_area': access_area}
     resp = self.post(url='user/{}'.format(user_id), data=data)
     Queue.add(f'get users',
               url='users',
               method='get',
               backoff_duration=30,
               cache_name="get_users",
               cache_is_unique=True,
               replace=True)
     return resp
예제 #7
0
    def send_message(self, name, email, reason, message):
        data = {
            'name': name,
            'email': email,
            'reason': reason,
            'message': message,
        }

        Queue.add('send message from web form',
                  url='send_message',
                  method='post',
                  payload=data)
        return json.dumps({'message': 'Your message will be sent'})
예제 #8
0
 def create_user(self, profile):
     data = {
         'email': profile['email'],
         'name': profile['name'],
     }
     resp = self.post(url='user', data=data)
     Queue.add(f'get users',
               url='users',
               method='get',
               backoff_duration=30,
               cache_name="get_users",
               cache_is_unique=True,
               replace=True)
     return resp
예제 #9
0
def show_queue(_type=None, status="new"):
    queue = Queue.list_queue(status)
    if not _type:
        queue['type'] = "show"
    else:
        queue['type'] = _type
    return jsonify(queue)
예제 #10
0
def process_queue():
    ok = 0
    error = 0
    for q in Queue.list_queue(["new", "error"], return_as_string=False):
        api_client.process(q)
        if q.status == "ok":
            ok += 1
        else:
            error += 1

    return jsonify({"ok": ok, "error": error})
예제 #11
0
def process(action, hash_item):
    if action == 'delete':
        Queue.delete(hash_item)

        return 'deleted'
    elif action == 'play':
        q_item = Queue.get(hash_item)
        response = api_client.process(q_item)

        return jsonify(response)

    elif action == 'suspend':
        q_item = Queue.get(hash_item)
        q_item.status = 'suspend'
        Queue.update(q_item)

    return f"{q_item.hash_item} {action}ed"
예제 #12
0
import fastapi_jsonrpc as jsonrpc
from fastapi.middleware.cors import CORSMiddleware
from loguru import logger
from app.errors import *
from app.queue import Queue
# JSON-RPC entrypoint
api_v1 = jsonrpc.Entrypoint("/v1")

# Server singletons: database, queue and library handler
queue = Queue('redis')
# RPC Methods


@api_v1.method(errors=[])
def allocation() -> dict:
    """Get assigned a start for your brick of TMs to compute and submit"""

    logger.info("allocation requested ")


@api_v1.method(errors=[])
def submission(client: str, start_tm: int, result_map: dict) -> dict:
    """Submit your TM results for an allocated compute task"""

    logger.info("submission made for {} ", start_tm)


@api_v1.method()
def network() -> dict:
    """Gets the latest volunteer network information"""
    pass
예제 #13
0
def update_queue():
    q = Queue.get("27f1daa58b456bb0702bae8575a9ec1e")
    q.status = "error"
    Queue.update(q)
    return show_queue("update")
예제 #14
0
def delete_from_queue(hash_item):
    Queue.delete(hash_item)

    return show_queue("delete")
예제 #15
0
def add_queue2():
    Queue.add("test2", "test/api2", "POST", {"test": "test2"})
    return show_queue("add2")
예제 #16
0
def add_queue():
    Queue.add("test", "test/api", "POST", {"test": "test"})
    return show_queue(("add"))
예제 #17
0
def suspend_error_items():
    return jsonify({"suspended": Queue.suspend_error_items()})
예제 #18
0
def purge_queue():
    current_app.logger.info('Purging queue')
    return jsonify({"deleted": Queue.purge_expired_items()})
예제 #19
0
class Subscriber:
    def __init__(self, q: Queue, client: APIClient):
        self.queue = q
        self.client = client

    def subscribe(self):
        while True:
            try:
                for key in self.queue.peek_all_keys():
                    value = self.queue.get(key)
                    span_ctx = tracer.extract(Format.TEXT_MAP, value)
                    with tracer.start_active_span('subscribe', child_of=span_ctx) as scope:
                        scope.span.set_tag('env', ENV)
                        print(f'subscriber: value = {value}')
                        tracer.inject(scope.span, Format.HTTP_HEADERS, value)
                        self.client.save(key, value)
            except Exception as e:
                print(e)
            finally:
                time.sleep(LOOP_INTERVAL)


if __name__ == '__main__':
    queue = Queue.create()
    api_client = APIClient(host=API_HOST, port=API_PORT)

    print(' === start subscriber === ')
    subscriber = Subscriber(queue, api_client)
    subscriber.subscribe()