예제 #1
0
def run():
    def error():
        response = flask.jsonify({
            'error':
            'The action did not receive a dictionary as an argument.'
        })
        response.status_code = 404
        return complete(response)

    message = flask.request.get_json(force=True, silent=True)
    if message and not isinstance(message, dict):
        return error()

    act_id = str(uuid.uuid4()).replace('-', '')[:12]
    os.environ['__LITHOPS_ACTIVATION_ID'] = act_id

    setup_logger(message['log_level'])

    if 'remote_invoker' in message:
        logger.info(
            "Lithops v{} - Starting Knative invoker".format(__version__))
        function_invoker(message)
    else:
        logger.info(
            "Lithops v{} - Starting Knative execution".format(__version__))
        function_handler(message)

    response = flask.jsonify({"activationId": act_id})
    response.status_code = 202

    return complete(response)
예제 #2
0
def main(event, context):
    # pub/sub event data is b64 encoded
    args = json.loads(base64.b64decode(event['data']).decode('utf-8'))

    setup_lithops_logger(args.get('log_level', 'INFO'))

    os.environ['__LITHOPS_ACTIVATION_ID'] = uuid.uuid4().hex
    os.environ['__LITHOPS_BACKEND'] = 'Google Cloud Functions'

    if 'get_preinstalls' in args:
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        internal_storage = InternalStorage(
            args['get_preinstalls']['storage_config'])
        object_key = '/'.join(
            [JOBS_PREFIX, args['get_preinstalls']['runtime_name'] + '.meta'])
        logger.info("Runtime metadata key {}".format(object_key))
        runtime_meta = get_runtime_preinstalls()
        runtime_meta_json = json.dumps(runtime_meta)
        internal_storage.put_data(object_key, runtime_meta_json)
    elif 'remote_invoker' in args:
        logger.info(
            "Lithops v{} - Starting Google Cloud Functions invoker".format(
                __version__))
        function_invoker(args)
    else:
        logger.info(
            "Lithops v{} - Starting Google Cloud Functions execution".format(
                __version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #3
0
def main(args):
    os.environ['__LITHOPS_ACTIVATION_ID'] = os.environ['__OW_ACTIVATION_ID']
    if 'remote_invoker' in args:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(args)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #4
0
def main(event, context):
    args = json.loads(event)
    os.environ['__PW_ACTIVATION_ID'] = context.request_id
    if 'remote_invoker' in args:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(args)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #5
0
def main(event, context):
    logger.info("Starting GCP Functions function execution")
    args = json.loads(base64.b64decode(event['data']).decode('utf-8'))
    os.environ['__PW_ACTIVATION_ID'] = uuid.uuid4().hex
    if 'remote_invoker' in args:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(args)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #6
0
def lambda_handler(event, context):
    os.environ['__PW_ACTIVATION_ID'] = context.aws_request_id
    os.environ['__OW_ACTIVATION_ID'] = context.aws_request_id

    if 'remote_invoker' in event:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(event)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(event)

    return {"Execution": "Finished"}
예제 #7
0
def main(args):
    os.environ['__LITHOPS_ACTIVATION_ID'] = os.environ['__OW_ACTIVATION_ID']

    setup_logger(args['log_level'], sys.stdout, LOGGER_FORMAT_SHORT)

    if 'remote_invoker' in args:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(args)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #8
0
def main(msgIn: func.QueueMessage):
    try:
        args = json.loads(msgIn.get_body())
    except:        
        args = msgIn.get_json()

    os.environ['__PW_ACTIVATION_ID'] = str(msgIn.id)
    if 'remote_invoker' in args:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(args)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #9
0
def lambda_handler(event, context):
    os.environ['__LITHOPS_ACTIVATION_ID'] = context.aws_request_id

    setup_lithops_logger(event.get('log_level', logging.INFO))

    if 'get_preinstalls' in event:
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        return get_runtime_preinstalls()
    elif 'remote_invoker' in event:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(event)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(event)

    return {"Execution": "Finished"}
예제 #10
0
def main(args):
    os.environ['__LITHOPS_ACTIVATION_ID'] = os.environ['__OW_ACTIVATION_ID']

    setup_logger(args['log_level'], sys.stdout, LOGGER_FORMAT_SHORT)

    if 'get_preinstalls' in args:
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        return get_runtime_preinstalls()
    elif 'remote_invoker' in args:
        logger.info("Lithops v{} - Starting IBM CF invoker".format(__version__))
        function_invoker(args)
    else:
        logger.info("Lithops v{} - Starting IBM CF execution".format(__version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #11
0
def main(args):
    os.environ['__LITHOPS_ACTIVATION_ID'] = os.environ['__OW_ACTIVATION_ID']

    log_level = args['log_level']
    ow_logging_config(log_level)

    if 'remote_invoker' in args:
        logger.info(
            "Lithops v{} - Starting OpenWhisk Functions invoker".format(
                __version__))
        function_invoker(args)
    else:
        logger.info(
            "Lithops v{} - Starting OpenWhisk Functions execution".format(
                __version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #12
0
def main(msgIn: func.QueueMessage, msgOut: func.Out[func.QueueMessage]):
    try:
        args = json.loads(msgIn.get_body())
    except Exception:
        args = msgIn.get_json()

    os.environ['__LITHOPS_ACTIVATION_ID'] = str(msgIn.id)
    setup_lithops_logger(args['log_level'])

    if 'get_preinstalls' in args:
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        runtime_meta = get_runtime_preinstalls()
        msgOut.set(json.dumps(runtime_meta))
    elif 'remote_invoker' in args:
        logger.info("Lithops v{} - Starting invoker".format(__version__))
        function_invoker(args)
    else:
        logger.info("Lithops v{} - Starting execution".format(__version__))
        function_handler(args)
예제 #13
0
def main_http(req: func.HttpRequest, context: func.Context) -> str:
    payload = req.get_json()

    setup_lithops_logger(payload['log_level'])

    os.environ['__LITHOPS_ACTIVATION_ID'] = context.invocation_id
    os.environ['__LITHOPS_BACKEND'] = 'Azure Functions (http)'

    if 'get_preinstalls' in payload:
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        runtime_meta = get_runtime_preinstalls()
        return json.dumps(runtime_meta)
    elif 'remote_invoker' in payload:
        logger.info("Lithops v{} - Starting Azure Functions (http) invoker".format(__version__))
        function_invoker(payload)
    else:
        logger.info("Lithops v{} - Starting Azure Functions (http) execution".format(__version__))
        function_handler(payload)

    return context.invocation_id
예제 #14
0
def main_queue(msgIn: func.QueueMessage, msgOut: func.Out[func.QueueMessage]):
    try:
        payload = json.loads(msgIn.get_body())
    except Exception:
        payload = msgIn.get_json()

    setup_lithops_logger(payload['log_level'])

    os.environ['__LITHOPS_ACTIVATION_ID'] = str(msgIn.id)
    os.environ['__LITHOPS_BACKEND'] = 'Azure Functions (event)'

    if 'get_preinstalls' in payload:
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        runtime_meta = get_runtime_preinstalls()
        msgOut.set(json.dumps(runtime_meta))
    elif 'remote_invoker' in payload:
        logger.info("Lithops v{} - Starting Azure Functions (event) invoker".format(__version__))
        function_invoker(payload)
    else:
        logger.info("Lithops v{} - Starting Azure Functions (event) execution".format(__version__))
        function_handler(payload)
예제 #15
0
def main(event, context):
    args = json.loads(event)
    os.environ['__LITHOPS_ACTIVATION_ID'] = context.request_id
    os.environ['__LITHOPS_BACKEND'] = 'Alibaba Function Compute'

    setup_lithops_logger(args['log_level'])

    if 'get_preinstalls' in event:
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        return get_runtime_preinstalls()
    elif 'remote_invoker' in args:
        logger.info(
            "Lithops v{} - Starting Alibaba Function Compute invoker".format(
                __version__))
        function_invoker(args)
    else:
        logger.info(
            "Lithops v{} - Starting Alibaba Function Compute execution".format(
                __version__))
        function_handler(args)

    return {"Execution": "Finished"}
예제 #16
0
def run():
    def error():
        response = flask.jsonify({
            'error':
            'The action did not receive a dictionary as an argument.'
        })
        response.status_code = 404
        return complete(response)

    sys.stdout = open(log_file, 'w')

    global last_usage_time
    global keeper
    global last_job

    message = flask.request.get_json(force=True, silent=True)
    if message and not isinstance(message, dict):
        return error()

    act_id = str(uuid.uuid4()).replace('-', '')[:12]
    os.environ['__PW_ACTIVATION_ID'] = act_id

    last_usage_time = time.time()
    last_job = message['job_description']

    if 'remote_invoker' in message:
        try:
            # init keeper only when remote_client configuration provided
            if 'remote_client' in message['config']['lithops'] and not keeper:
                _init_keeper(message['config'])

            # remove 'remote_client' configuration
            message['config']['lithops'].pop('remote_client', None)

            logger.info(
                "Lithops v{} - Starting Docker invoker".format(__version__))
            message['config']['lithops']['remote_invoker'] = False
            message['config']['lithops']['compute_backend'] = 'localhost'

            if 'localhost' not in message['config']:
                message['config']['localhost'] = {}

            if message['config']['lithops']['workers'] is None:
                total_cpus = multiprocessing.cpu_count()
                message['config']['lithops']['workers'] = total_cpus
                message['config']['localhost']['workers'] = total_cpus
            else:
                message['config']['localhost']['workers'] = message['config'][
                    'lithops']['workers']

            message['invokers'] = 0
            message['log_level'] = None

            function_invoker(message)
        except Exception as e:
            logger.info(e)

    response = flask.jsonify({"activationId": act_id})
    response.status_code = 202

    return complete(response)
예제 #17
0
        lithops_conf_json = os.environ['__LITHOPS_PAYLOAD']
        lithops_conf = json.loads(lithops_conf_json)
        setup_lithops_logger(lithops_conf.get('log_level', logging.INFO))
        logger.info("Lithops v{} - Generating metadata".format(__version__))
        runtime_meta = get_runtime_preinstalls()
        internal_storage = InternalStorage(lithops_conf)
        status_key = lithops_conf['runtime_name'] + '.meta'
        logger.info("Runtime metadata key {}".format(status_key))
        runtime_meta_json = json.dumps(runtime_meta)
        internal_storage.put_data(status_key, runtime_meta_json)
    elif action == 'remote_invoker':
        lithops_payload_json = os.environ['__LITHOPS_PAYLOAD']
        lithops_payload = json.loads(lithops_payload_json)
        logger.info(
            "Lithops v{} - Starting AWS Lambda invoker".format(__version__))
        function_invoker(lithops_payload)
    elif action == 'job':
        lithops_payload_json = os.environ['__LITHOPS_PAYLOAD']
        lithops_payload = json.loads(lithops_payload_json)
        setup_lithops_logger(lithops_payload.get('log_level', logging.INFO))

        logger.info(
            "Lithops v{} - Starting AWS Batch execution".format(__version__))

        job_index = int(os.environ.get('AWS_BATCH_JOB_ARRAY_INDEX', 0))
        lithops_payload['JOB_INDEX'] = job_index
        logger.info('Job index {}'.format(job_index))

        act_id = str(uuid.uuid4()).replace('-', '')[:12]
        os.environ['__LITHOPS_ACTIVATION_ID'] = act_id