Beispiel #1
0
def save_deployment(task, namespace, is_public):
    save_task_step_progress(task.uuid, '模型部署', '执行', 92, '开始保存模型部署对象...')
    try:
        k8s_status = g.k8s_client.core_api.read_namespaced_service_status(
            "service-" + task.uuid, namespace)
    except:
        save_task_step_progress(task.uuid, '模型部署', '失败', 100,
                                '获取Kubernetes服务访问端口失败。')
        return False

    res = umm_client.get_solutions(task.targetUuid)
    if res['status'] != 'ok':
        save_task_step_progress(task.uuid, '模型部署', '失败', 100, '从umm获取模型对象失败。')
        return False
    solution = Solution()
    solution.__dict__ = res['value']['results'][0]
    deployment = Deployment()
    deployment.uuid = task.uuid
    deployment.deployer = task.userLogin
    deployment.solutionUuid = task.targetUuid
    deployment.solutionName = task.taskName
    deployment.solutionAuthor = solution.authorLogin
    deployment.pictureUrl = solution.pictureUrl
    deployment.k8sPort = k8s_status.spec.ports[0].node_port
    deployment.isPublic = is_public
    deployment.status = '运行'

    res = umm_client.create_deployment(deployment,
                                       jwt=g.oauth_client.get_jwt())
    if res['status'] != 'ok':
        save_task_step_progress(task.uuid, '模型部署', '失败', 100, '保存模型部署对象失败。')

    save_task_step_progress(task.uuid, '模型部署', '执行', 98, '保存模型部署对象完成。')
    save_task_step_progress(task.uuid, '模型部署', '成功', 100, '模型部署成功。')
    return True
def onboarding_thread(task, base_path):
    save_task_progress(task, '正在执行', 5, '启动模型导入...')

    res = uaa_client.find_user(task.userLogin, jwt=g.oauth_client.get_jwt())
    if res['status'] != 'ok':
        save_task_progress(task, '失败', 100, '获取用户信息失败。', mytime.now())
        save_task_step_progress(task.uuid, '提取模型文件', '失败', 100, '获取用户信息失败。')
        return

    user = res['value']
    solution = Solution()
    solution.uuid = task.targetUuid
    solution.authorLogin = task.userLogin
    solution.authorName = user.get('fullName')

    if do_onboarding(task, solution, base_path):
        message_service.send_message(
            solution.authorLogin, '模型 ' + solution.name + ' 导入完成',
            '你的模型 ' + solution.name + ' 已导入系统!\n\n请点击下方[目标页面]按钮进入模型页面...',
            '/pmodelhub/#/solution/' + solution.uuid, False)
    else:
        revertback_onboarding(task.uuid, base_path)
        message_service.send_message(
            solution.authorLogin, '模型 ' + task.taskName + ' 导入失败',
            '你的模型 ' + task.taskName + ' 导入失败!\n\n请点击下方[目标页面]按钮查看任务执行情况...',
            '/pmodelhub/#/task-onboarding/' + task.uuid + '/' + task.taskName,
            False)
Beispiel #3
0
def update_solution_comment_count(**args):
    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))
    solution.commentCount = comment_db.get_comment_count(solution.uuid)

    solution_db.update_solution_comment_count(solution)
    return 0
Beispiel #4
0
def update_solution_active(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin and not has_role:
        raise Exception('403 Forbidden')

    if solution.active and not args.get('active'):
        credit = Credit()
        credit.__dict__ = credit_service.find_user_credit(user_login)
        if credit.credit < 20:
            raise Exception('400 Bad request')
        else:
            solution.active = args.get('active')
            solution_db.update_solution_active(solution)
            credit_service.do_update_credit(
                credit, -20, '将AI模型<{}>设为私有'.format(solution.name))
            return 0
    else:
        solution.active = args.get('active')
        solution_db.update_solution_active(solution)
        return 0
Beispiel #5
0
def update_solution_star_count(**args):
    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))
    solution.starCount = star_db.get_stared_count(solution.uuid)

    solution_db.update_solution_star_count(solution)
    return 0
def upload_document(**args):
    http_request = args.get('http_request')
    token = token_service.get_token(http_request)
    if not token.is_valid:
        raise Exception('403 Forbidden')
    user_login = token.username

    file_body = args.get('stream')
    solution_uuid = args.get('path_arg')
    res = umm_client.get_solutions(solution_uuid, token.jwt)
    if res['status'] != 'ok' or res['value']['total'] < 1:
        raise Exception('文档模型不存在')

    solution = Solution()
    solution.__dict__ = res['value']['results'][0]

    if solution.authorLogin != user_login:
        raise Exception('403 Forbidden')

    filename = http_request.files.get('upload_document')[0].filename
    short_url = solution.authorLogin + '/' + solution_uuid + '/document/' + filename
    long_url = nexus_client.upload_artifact_data(short_url, file_body)

    if long_url is None:
        raise Exception('向Nexus上传文件出错!')

    document = Document()
    document.solutionUuid = solution.uuid
    document.name = filename
    document.url = long_url
    document.fileSize = len(file_body)
    umm_client.create_document(document, token.jwt)

    return 0
Beispiel #7
0
def update_solution_download_count(**args):
    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    solution.downloadCount += 1

    solution_db.update_solution_download_count(solution)
    return 0
Beispiel #8
0
def update_solution_name(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin:
        raise Exception('403 Forbidden')

    solution.name = args.get('name')
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_name(solution)
    return 0
Beispiel #9
0
def get_solution_by_id(id):
    sql = 'SELECT * FROM solution WHERE id = "{}" limit 1'.format(id)

    conn = g.db.pool.connection()
    with conn.cursor() as cursor:
        cursor.execute(sql)
        records = cursor.fetchall()
    conn.close()

    solution_list = []
    for record in records:
        solution = Solution()
        solution.from_record(record)
        solution_list.append(solution.__dict__)

    return solution_list[0]
Beispiel #10
0
def update_solution_picture_url(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin and not has_role:
        raise Exception('403 Forbidden')

    solution.pictureUrl = args.get('pictureUrl')
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_picture_url(solution)
    return 0
Beispiel #11
0
def get_solutions(where, pageable):
    pageable = gen_pageable(pageable)
    sql = 'SELECT * FROM solution {} {}'.format(where, pageable)
    sql_total_count = 'SELECT COUNT(*) FROM solution {}'.format(where)

    conn = g.db.pool.connection()
    with conn.cursor() as cursor:
        cursor.execute(sql)
        records = cursor.fetchall()
        solution_list = []
        for record in records:
            solution = Solution()
            solution.from_record(record)
            solution_list.append(solution.__dict__)

        cursor.execute(sql_total_count)
        total_count = cursor.fetchone()
    conn.close()

    return total_count[0], solution_list
Beispiel #12
0
def delete_solution(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin and user_login != 'internal' and not has_role:
        raise Exception('403 Forbidden')

    where = 'WHERE solution_uuid = "{}"'.format(solution.uuid)
    document_list = document_db.get_documents(where)
    for document in document_list:
        nexus_client.delete_artifact(document.get('url'))
        document_db.delete_document(document.get('id'))

    artifact_list = artifact_db.get_artifacts(where)
    for artifact in artifact_list:
        if artifact.get('type') == 'DOCKER镜像':
            nexus_client.delete_docker_image(artifact.get('url'))
        else:
            nexus_client.delete_artifact(artifact.get('url'))

        artifact_db.delete_artifact(artifact.get('id'))

    description = description_db.get_descriptions(solution.uuid)[0]
    description_db.delete_description(description.get('id'))

    where = 'WHERE target_uuid = "{}"'.format(solution.uuid)
    _, star_list = star_db.get_stars(where, None)
    for star in star_list:
        star_db.delete_star(star.get('id'))

    solution_db.delete_solution(solution.id)
    return 0
Beispiel #13
0
def update_solution_admininfo(**args):
    token = token_service.get_token(args.get('http_request'))
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if not has_role:
        raise Exception('403 Forbidden')

    solution.subject1 = args.get('subject1') if args.get('subject1') else ''
    solution.subject2 = args.get('subject2') if args.get('subject2') else ''
    solution.subject3 = args.get('subject3') if args.get('subject3') else ''
    solution.displayOrder = args.get('displayOrder') if args.get(
        'displayOrder') else 0
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_admininfo(solution)
    return 0
Beispiel #14
0
def create_solution(**args):
    token = token_service.get_token(args.get('http_request'))
    if not token.is_valid:
        raise Exception('403 Forbidden')
    user_login = token.username

    solution = Solution()
    solution.__dict__ = args.get('solution')
    if user_login != solution.authorLogin and user_login != 'internal':
        raise Exception('403 Forbidden')

    solution.active = True
    solution.company = ''
    solution.starCount = 0
    solution.viewCount = 0
    solution.downloadCount = 0
    solution.commentCount = 0
    solution.displayOrder = 0
    solution.createdDate = mytime.now()
    solution.modifiedDate = mytime.now()

    solution_id = solution_db.create_solution(solution)

    # 为solution创建描述,其uuid设为与solution的uuid一致。 ----huolongshe
    # description表只能在这里创建
    description = Description()
    description.solutionUuid = solution.uuid
    description.authorLogin = solution.authorLogin
    description.content = r'<p>无内容</p>'
    description_db.create_description(description)

    credit = Credit()
    credit.__dict__ = credit_service.find_user_credit(solution.authorLogin)
    credit_service.do_update_credit(credit, 3,
                                    '创建新模型<{}>'.format(solution.name))

    return solution_id
Beispiel #15
0
def update_solution_baseinfo(**args):
    token = token_service.get_token(args.get('http_request'))
    user_login = token.username
    has_role = token.has_role('ROLE_MANAGER')

    solution = Solution()
    solution.__dict__ = solution_db.get_solution_by_id(args.get('solutionId'))

    if user_login != solution.authorLogin and not has_role:
        raise Exception('403 Forbidden')

    solution.name = args.get('name') if args.get('name') else ''
    solution.company = args.get('company') if args.get('company') else ''
    solution.version = args.get('version') if args.get('version') else ''
    solution.summary = args.get('summary') if args.get('summary') else ''
    solution.tag1 = args.get('tag1') if args.get('tag1') else ''
    solution.tag2 = args.get('tag2') if args.get('tag2') else ''
    solution.tag3 = args.get('tag3') if args.get('tag3') else ''
    solution.modelType = args.get('modelType') if args.get('modelType') else ''
    solution.toolkitType = args.get('toolkitType') if args.get(
        'toolkitType') else ''
    solution.modifiedDate = mytime.now()

    solution_db.update_solution_baseinfo(solution)
    return 0