示例#1
0
def create_schedule(
        project: str,
        schedule: schemas.ScheduleInput,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.singletons.project_member.get_project_member(
    ).ensure_project(db_session, project, auth_info=auth_verifier.auth_info)
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        schedule.name,
        mlrun.api.schemas.AuthorizationAction.create,
        auth_verifier.auth_info,
    )
    get_scheduler().create_schedule(
        db_session,
        auth_verifier.auth_info,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
        concurrency_limit=schedule.concurrency_limit,
    )
    return Response(status_code=HTTPStatus.CREATED.value)
示例#2
0
def create_schedule(
        project: str,
        schedule: schemas.ScheduleInput,
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.singletons.project_member.get_project_member(
    ).ensure_project(db_session, project, auth_info=auth_info)
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        schedule.name,
        mlrun.api.schemas.AuthorizationAction.create,
        auth_info,
    )
    if not auth_info.access_key:
        auth_info.access_key = schedule.credentials.access_key
    get_scheduler().create_schedule(
        db_session,
        auth_info,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        schedule.labels,
        schedule.concurrency_limit,
    )
    return Response(status_code=HTTPStatus.CREATED.value)
示例#3
0
def update_schedule(
        project: str,
        name: str,
        schedule: schemas.ScheduleUpdate,
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.update,
        auth_info,
    )
    if not auth_info.access_key:
        auth_info.access_key = schedule.credentials.access_key
    get_scheduler().update_schedule(
        db_session,
        auth_info,
        project,
        name,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
    )
    return Response(status_code=HTTPStatus.OK.value)
示例#4
0
def delete_schedule(
        project: str,
        name: str,
        db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().delete_schedule(db_session, project, name)
    return Response(status_code=HTTPStatus.NO_CONTENT.value)
示例#5
0
def _submit_run(db_session: Session, auth_info: mlrun.api.schemas.AuthInfo,
                data) -> typing.Tuple[str, str, str, typing.Dict]:
    """
    :return: Tuple with:
        1. str of the project of the run
        2. str of the kind of the function of the run
        3. str of the uid of the run that started execution (None when it was scheduled)
        4. dict of the response info
    """
    run_uid = None
    project = None
    try:
        fn, task = _parse_submit_run_body(db_session, auth_info, data)
        run_db = get_run_db_instance(db_session, auth_info.session)
        fn.set_db_connection(run_db, True)
        logger.info("Submitting run", function=fn.to_dict(), task=task)
        # fn.spec.rundb = "http://mlrun-api:8080"
        schedule = data.get("schedule")
        if schedule:
            cron_trigger = schedule
            if isinstance(cron_trigger, dict):
                cron_trigger = schemas.ScheduleCronTrigger(**cron_trigger)
            schedule_labels = task["metadata"].get("labels")
            get_scheduler().create_schedule(
                db_session,
                auth_info,
                task["metadata"]["project"],
                task["metadata"]["name"],
                schemas.ScheduleKinds.job,
                data,
                cron_trigger,
                schedule_labels,
            )
            project = task["metadata"]["project"]

            response = {
                "schedule": schedule,
                "project": task["metadata"]["project"],
                "name": task["metadata"]["name"],
            }
        else:
            run = fn.run(task, watch=False)
            run_uid = run.metadata.uid
            project = run.metadata.project
            if run:
                response = run.to_dict()

    except HTTPException:
        logger.error(traceback.format_exc())
        raise
    except mlrun.errors.MLRunHTTPStatusError:
        raise
    except Exception as err:
        logger.error(traceback.format_exc())
        log_and_raise(HTTPStatus.BAD_REQUEST.value,
                      reason=f"runtime error: {err}")

    logger.info("Run submission succeeded", response=response)
    return project, fn.kind, run_uid, {"data": response}
示例#6
0
def update_schedule(
        project: str,
        name: str,
        schedule: schemas.ScheduleUpdate,
        db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().update_schedule(
        db_session,
        project,
        name,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
    )
    return Response(status_code=HTTPStatus.OK.value)
示例#7
0
def delete_schedule(
        project: str,
        name: str,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.delete,
        auth_verifier.auth_info,
    )
    get_scheduler().delete_schedule(db_session, project, name)
    return Response(status_code=HTTPStatus.NO_CONTENT.value)
示例#8
0
def create_schedule(
    project: str,
    schedule: schemas.ScheduleInput,
    db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().create_schedule(
        db_session,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels={label.name: label.value for label in schedule.labels},
    )
    return Response(status_code=HTTPStatus.CREATED.value)
示例#9
0
def list_schedules(
        project: str,
        name: str = None,
        labels: str = None,
        kind: schemas.ScheduleKinds = None,
        include_last_run: bool = False,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.clients.opa.Client().query_project_permissions(
        project,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_verifier.auth_info,
    )
    schedules = get_scheduler().list_schedules(
        db_session,
        project,
        name,
        kind,
        labels,
        include_last_run=include_last_run,
    )
    filtered_schedules = mlrun.api.utils.clients.opa.Client(
    ).filter_project_resources_by_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        schedules.schedules,
        lambda schedule: (
            schedule.project,
            schedule.name,
        ),
        auth_verifier.auth_info,
    )
    schedules.schedules = filtered_schedules
    return schedules
示例#10
0
def list_schedules(
        project: str,
        name: str = None,
        labels: str = None,
        kind: schemas.ScheduleKinds = None,
        include_last_run: bool = False,
        include_credentials: bool = fastapi.Query(False,
                                                  alias="include-credentials"),
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
        project,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_info,
    )
    schedules = get_scheduler().list_schedules(db_session, project, name, kind,
                                               labels, include_last_run,
                                               include_credentials)
    filtered_schedules = mlrun.api.utils.auth.verifier.AuthVerifier(
    ).filter_project_resources_by_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        schedules.schedules,
        lambda schedule: (
            schedule.project,
            schedule.name,
        ),
        auth_info,
    )
    schedules.schedules = filtered_schedules
    return schedules
示例#11
0
def get_schedule(
    project: str,
    name: str,
    include_last_run: bool = False,
    db_session: Session = Depends(deps.get_db_session),
):
    return get_scheduler().get_schedule(
        db_session, project, name, include_last_run=include_last_run
    )
示例#12
0
文件: schedules.py 项目: mlrun/mlrun
def create_schedule(
    project: str,
    schedule: schemas.ScheduleInput,
    auth_verifier: deps.AuthVerifier = Depends(deps.AuthVerifier),
    db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().create_schedule(
        db_session,
        auth_verifier.auth_info,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
        concurrency_limit=schedule.concurrency_limit,
    )
    return Response(status_code=HTTPStatus.CREATED.value)
示例#13
0
def list_schedules(
    project: str,
    name: str = None,
    labels: str = None,
    kind: schemas.ScheduleKinds = None,
    include_last_run: bool = False,
    db_session: Session = Depends(deps.get_db_session),
):
    return get_scheduler().list_schedules(
        db_session, project, name, labels, kind, include_last_run=include_last_run
    )
示例#14
0
def delete_schedules(
        project: str,
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    schedules = get_scheduler().list_schedules(
        db_session,
        project,
    )
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resources_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        schedules.schedules,
        lambda schedule: (schedule.project, schedule.name),
        mlrun.api.schemas.AuthorizationAction.delete,
        auth_info,
    )
    get_scheduler().delete_schedules(db_session, project)
    return Response(status_code=HTTPStatus.NO_CONTENT.value)
示例#15
0
def update_schedule(
        project: str,
        name: str,
        schedule: schemas.ScheduleUpdate,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.update,
        auth_verifier.auth_info,
    )
    get_scheduler().update_schedule(
        db_session,
        auth_verifier.auth_info,
        project,
        name,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
    )
    return Response(status_code=HTTPStatus.OK.value)
示例#16
0
def get_schedule(
        project: str,
        name: str,
        include_last_run: bool = False,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    schedule = get_scheduler().get_schedule(
        db_session,
        project,
        name,
        include_last_run=include_last_run,
    )
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_verifier.auth_info,
    )
    return schedule
示例#17
0
def get_schedule(
        project: str,
        name: str,
        include_last_run: bool = False,
        include_credentials: bool = fastapi.Query(False,
                                                  alias="include-credentials"),
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    schedule = get_scheduler().get_schedule(db_session, project, name,
                                            include_last_run,
                                            include_credentials)
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_info,
    )
    return schedule
示例#18
0
async def shutdown_event():
    if get_project_member():
        get_project_member().shutdown()
    cancel_all_periodic_functions()
    if get_scheduler():
        await get_scheduler().stop()