Exemplo n.º 1
0
def main():
    sys.stdout = CustomIO(sys.stdout)
    sys.stderr = CustomIO(sys.stderr)

    # log to stdout for capturing
    root_logger = logging.getLogger()
    root_logger.setLevel(logging.DEBUG)
    handler = logging.StreamHandler(sys.stdout)
    root_logger.addHandler(handler)

    if 0 != runtime.init():
        print('runtime init failed')
        return
    runtime.log('init succ')

    clean_env()

    http_handler, event_handler = None, None
    while True:
        invoke_info = runtime.wait_for_invoke()
        mode, sockfd, event, context = invoke_info.cmd, invoke_info.sockfd, invoke_info.event, invoke_info.context
        if mode == 'RELOAD':
            runtime.log('get reload request: %s' % context)
            http_handler, event_handler = init_handler(
                *(context.split(":")[-2:]))
            runtime.log('handlers reloaded')
            continue

        if event or context:
            try:
                event = eval(event)
                context = eval(context)
            except Exception as ex:
                runtime.report_running()
                runtime.report_fail(
                    'eval event[%s] or context[%s] failed\n%s' %
                    (event, context, str(ex)), 0, 1)
                continue

        for env in context['environ'].split(';'):
            if not env:
                continue
            k, v = env.split('=', 1)
            os.environ[k] = v

        runtime.log('request[%s] invoked' % context.get('request_id'))

        if not http_handler and not event_handler:
            runtime.report_running()
            runtime.report_fail(init_handler_fault, 0, 2)
            continue

        if mode == 'HTTP':
            http_handler.handle(sockfd)
        elif mode == 'EVENT':
            event_handler.handle(event, context)
        else:
            runtime.log('recv unknown task type: %s' % mode)

        runtime.log('process finished')
Exemplo n.º 2
0
def wait_for_start():
    (invokeid, mode, handler, suppress_init,
     credentials) = lambda_runtime.receive_start()
    force_path_importer_cache_update()
    set_environ(credentials)
    lambda_runtime.report_running(invokeid)

    return (invokeid, mode, handler, suppress_init, credentials)
Exemplo n.º 3
0
 def handle(self, event, context):
     try:
         runtime.report_running()
         ret = self.real_handler(event, context)
         if type(ret) == Decimal:
             ret = str(ret)
         ret = json.dumps(ret)
         if len(ret) > max_ret_msg_len:
             runtime.report_fail(max_ret_msg_len_exceed_error, 0, 1)
         else:
             runtime.report_done(ret, 0)
     except Exception as ex:
         stack_trace = traceback.format_exc().splitlines()
         # erase current frame
         del stack_trace[1]
         del stack_trace[1]
         runtime.report_fail('\n'.join(stack_trace), 0, 2)