Esempio n. 1
0
def run_wf(wf_name=''):
    """
    TODO:
        1. make wf_name meaningful
        2. refact it so as to reduce redundant code
        3. how to response gracefully if error/exception occurs
        4. the response should be contained the state of the workflow triggered
    :http param async:
    :return:
    """
    is_async = request.args.get('async', False)

    event, req = None, request.args
    if request.method == 'POST':
        event = Event.from_json(request.data)
        event.save()
        stat_driver.add_event(event)
        async_results = reactor.dispatch_event(event=event,
                                               wf_name=wf_name,
                                               req=req)
    else:
        async_results = reactor.dispatch_req(wf_name, req, event=event)

    if not is_async:
        for ar in async_results:
            ar.wait()
    return json.dumps([ar.wf_id for ar in async_results])
Esempio n. 2
0
 def on_message(self, headers, message):
     # TODO: should we validate the message format and field type here?
     try:
         event = Event.from_json(message)
         self.stat_driver.add_event(event)
         self.reactor.dispatch_event(event)
     except:
         self.logger.exception('failed to process message: ' + message)
     else:
         msg_id = headers['message-id']
         self.conn.ack(msg_id, self.subscription_id)