Exemple #1
0
 def post(self, request, team_name, group_id, *args, **kwargs):
     """
     生成分享订单,会验证是否能够分享
     ---
     parameter:
         - name: team_name
           description: 团队名
           required: true
           type: string
           paramType: path
         - name: group_id
           description: 应用id
           required: true
           type: string
           paramType: path
     """
     scope = request.data.get("scope")
     market_name = None
     if scope == "goodrain":
         target = request.data.get("target")
         market_name = target.get("store_id")
         if market_name is None:
             result = general_message(400, "fail", "参数不全")
             return Response(result, status=result.get("code", 200))
     try:
         if group_id == "-1":
             code = 400
             result = general_message(400, "group id error", "未分组应用不可分享")
             return Response(result, status=code)
         team_id = self.team.tenant_id
         group_count = group_repo.get_group_count_by_team_id_and_group_id(team_id=team_id, group_id=group_id)
         if group_count == 0:
             code = 202
             result = general_message(code, "group is not yours!", "当前组已删除或您无权限查看!", bean={})
             return Response(result, status=200)
         # 判断是否满足分享条件
         data = share_service.check_service_source(
             team=self.team, team_name=team_name, group_id=group_id, region_name=self.response_region)
         if data and data["code"] == 400:
             return Response(data, status=data["code"])
         fields_dict = {
             "group_share_id": make_uuid(),
             "group_id": group_id,
             "team_name": team_name,
             "is_success": False,
             "step": 1,
             "share_app_market_name": market_name,
             "scope": scope,
             "create_time": datetime.datetime.now(),
             "update_time": datetime.datetime.now(),
         }
         service_share_record = share_service.create_service_share_record(**fields_dict)
         result = general_message(200, "create success", "创建成功", bean=service_share_record.to_dict())
         return Response(result, status=200)
     except ServiceHandleException as e:
         raise e
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)
 def get(self, request, team_name, group_id, *args, **kwargs):
     """
     拓扑图中Internet详情
     ---
     parameters:
         - name: team_name
           description: 团队名
           required: true
           type: string
           paramType: path
         - name: group_id
           description: 应用组id
           required: true
           type: string
           paramType: path
     """
     logger.debug("query topological graph from:{0}".format(group_id))
     try:
         if group_id == "-1":
             code = 200
             no_service_list = service_repo.get_no_group_service_status_by_group_id(
                 team_name=self.team_name, region_name=self.response_region)
             result = general_message(200,
                                      "query success",
                                      "应用组获取成功",
                                      list=no_service_list)
         else:
             code = 200
             if group_id is None or not group_id.isdigit():
                 code = 400
                 result = general_message(
                     code, "group_id is missing or not digit!",
                     "group_id缺失或非数字")
                 return Response(result, status=code)
             team_id = self.team.tenant_id
             group_count = group_repo.get_group_count_by_team_id_and_group_id(
                 team_id=team_id, group_id=group_id)
             if group_count == 0:
                 code = 202
                 result = general_message(code,
                                          "group is not yours!",
                                          "当前组已删除或您无权限查看!",
                                          bean={
                                              "json_svg": {},
                                              "json_data": {}
                                          })
                 return Response(result, status=200)
             else:
                 data = topological_service.get_internet_topological_graph(
                     group_id=group_id, team_name=team_name)
                 result = general_message(
                     code,
                     "Obtain topology internet success.",
                     "获取拓扑图Internet成功",
                     bean=data)
         return Response(result, status=code)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)
 def post(self, request, team_name, group_id, *args, **kwargs):
     """
     生成分享订单,会验证是否能够分享
     ---
     parameter:
         - name: team_name
           description: 团队名
           required: true
           type: string
           paramType: path
         - name: group_id
           description: 应用组id
           required: true
           type: string
           paramType: path
     """
     try:
         if group_id == "-1":
             code = 400
             result = general_message(400, "group id error", "未分组应用不可分享")
             return Response(result, status=code)
         team_id = self.team.tenant_id
         group_count = group_repo.get_group_count_by_team_id_and_group_id(team_id=team_id, group_id=group_id)
         if group_count == 0:
             code = 400
             result = general_message(code, "group is not yours!", "这个应用组不是你的!")
             return Response(result, status=code)
         # 判断是否满足分享条件
         data = share_service.check_service_source(
             team=self.team,
             team_name=team_name,
             group_id=group_id,
             region_name=self.response_region)
         if data and data["code"] == 400:
             return Response(data, status=data["code"])
         # 判断是否有未完成订单
         share_record = share_service.get_service_share_record_by_group_id(group_id)
         if share_record:
             if not share_record.is_success and share_record.step < 3:
                 result = general_message(20021, "share record not complete", "之前有分享流程未完成",
                                          bean=share_record.to_dict())
                 return Response(result, status=200)
         fields_dict = {
             "group_share_id": make_uuid(),
             "group_id": group_id,
             "team_name": team_name,
             "is_success": False,
             "step": 1,
             "create_time": datetime.datetime.now(),
             "update_time": datetime.datetime.now()
         }
         service_share_record = share_service.create_service_share_record(**fields_dict)
         result = general_message(200, "create success", "创建成功", bean=service_share_record.to_dict())
         return Response(result, status=200)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)
 def get(self, request, *args, **kwargs):
     """
     应用组拓扑图(未分组应用无拓扑图, 直接返回列表展示)
     ---
     parameters:
         - name: team_name
           description: 团队名
           required: true
           type: string
           paramType: path
         - name: group_id
           description: 应用组id
           required: true
           type: string
           paramType: query
     """
     try:
         group_id = request.GET.get("group_id", None)
         code = 200
         if group_id == "-1":
             code = 200
             no_service_list = service_repo.get_no_group_service_status_by_group_id(
                 team_name=self.team_name, region_name=self.response_region)
             result = general_message(200,
                                      "query success",
                                      "应用组查询成功",
                                      list=no_service_list)
         else:
             if group_id is None or not group_id.isdigit():
                 code = 400
                 result = general_message(
                     code, "group_id is missing or not digit!",
                     "group_id缺失或非数字")
                 return Response(result, status=code)
             team_id = self.team.tenant_id
             group_count = group_repo.get_group_count_by_team_id_and_group_id(
                 team_id=team_id, group_id=group_id)
             if group_count == 0:
                 code = 202
                 result = general_message(code,
                                          "group is not yours!",
                                          "当前组已删除或您无权限查看!",
                                          bean={})
                 return Response(result, status=200)
             topological_info = topological_service.get_group_topological_graph(
                 group_id=group_id,
                 region=self.response_region,
                 team_name=self.team_name,
                 enterprise_id=self.team.enterprise_id)
             result = general_message(code,
                                      "Obtain topology success.",
                                      "获取拓扑图成功",
                                      bean=topological_info)
         return Response(result, status=code)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)
Exemple #5
0
 def get(self, request, *args, **kwargs):
     """
     应用组应用列表、状态展示
     ---
     parameters:
         - name: team_name
           description: 团队名
           required: true
           type: string
           paramType: path
         - name: page
           description: 页数(默认第一页)
           required: false
           type: string
           paramType: query
         - name: page_size
           description: 每页展示个数(默认10个)
           required: false
           type: string
           paramType: query
         - name: group_id
           description: 应用组id
           required: true
           type: string
           paramType: query
     """
     try:
         code = 200
         page = request.GET.get("page", 1)
         page_size = request.GET.get("page_size", 10)
         group_id = request.GET.get("group_id", None)
         tenant_actions = list(self.user.actions.tenant_actions)
         service_actions = list(self.user.actions.service_actions)
         if group_id != "-1":
             if group_id is None or not group_id.isdigit():
                 code = 400
                 result = general_message(
                     code, "group_id is missing or not digit!",
                     "group_id缺失或非数字")
                 return Response(result, status=code)
             team_id = self.team.tenant_id
             group_count = group_repo.get_group_count_by_team_id_and_group_id(
                 team_id=team_id, group_id=group_id)
             if group_count == 0:
                 code = 202
                 result = general_message(code,
                                          "group is not yours!",
                                          "当前组已删除或您无权限查看!",
                                          bean={})
                 return Response(result, status=200)
             group_service_list = service_repo.get_group_service_by_group_id(
                 group_id=group_id,
                 region_name=self.response_region,
                 team_id=self.team.tenant_id,
                 team_name=self.team_name,
                 enterprise_id=self.team.enterprise_id)
             paginator = Paginator(group_service_list, page_size)
             try:
                 group_service_list = paginator.page(page).object_list
             except PageNotAnInteger:
                 group_service_list = paginator.page(1).object_list
             except EmptyPage:
                 group_service_list = paginator.page(
                     paginator.num_pages).object_list
             result = general_message(code,
                                      "query success",
                                      "应用组查询成功",
                                      list=group_service_list,
                                      total=paginator.count)
         else:
             no_group_service_list = service_repo.get_no_group_service_status_by_group_id(
                 team_name=self.team_name,
                 team_id=self.team.tenant_id,
                 region_name=self.response_region,
                 enterprise_id=self.team.enterprise_id)
             paginator = Paginator(no_group_service_list, page_size)
             try:
                 no_group_service_list = paginator.page(page).object_list
             except PageNotAnInteger:
                 no_group_service_list = paginator.page(1).object_list
             except EmptyPage:
                 no_group_service_list = paginator.page(
                     paginator.num_pages).object_list
             result = general_message(code,
                                      "query success",
                                      "应用组查询成功",
                                      list=no_group_service_list,
                                      total=paginator.count)
         result["data"]["bean"] = {
             "tenant_actions": tenant_actions,
             "service_actions": service_actions
         }
         return Response(result, status=code)
     except GroupNotExistError as e:
         logger.exception(e)
         result = general_message(400, "query success", "该应用组不存在")
         return Response(result, status=400)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)
    def get(self, request, *args, **kwargs):
        """
        应用组件列表、状态展示
        ---
        parameters:
            - name: team_name
              description: 团队名
              required: true
              type: string
              paramType: path
            - name: page
              description: 页数(默认第一页)
              required: false
              type: string
              paramType: query
            - name: page_size
              description: 每页展示个数(默认10个)
              required: false
              type: string
              paramType: query
            - name: group_id
              description: 应用id
              required: true
              type: string
              paramType: query
        """
        try:
            code = 200
            page = request.GET.get("page", 1)
            page_size = request.GET.get("page_size", 10)
            group_id = request.GET.get("group_id", None)
            if group_id is None or not group_id.isdigit():
                code = 400
                result = general_message(code, "group_id is missing or not digit!", "group_id缺失或非数字")
                return Response(result, status=code)

            query = request.GET.get("query", "")

            if group_id == "-1":
                # query service which not belong to any app
                no_group_service_list = service_repo.get_no_group_service_status_by_group_id(
                    team_name=self.team_name,
                    team_id=self.team.tenant_id,
                    region_name=self.response_region,
                    enterprise_id=self.team.enterprise_id)
                if page_size == "-1" or page_size == "" or page_size == "0":
                    page_size = len(no_group_service_list) if len(no_group_service_list) > 0 else 10
                paginator = Paginator(no_group_service_list, page_size)
                try:
                    no_group_service_list = paginator.page(page).object_list
                except PageNotAnInteger:
                    no_group_service_list = paginator.page(1).object_list
                except EmptyPage:
                    no_group_service_list = paginator.page(paginator.num_pages).object_list
                result = general_message(code, "query success", "应用查询成功", list=no_group_service_list, total=paginator.count)
                return Response(result, status=code)

            team_id = self.team.tenant_id
            group_count = group_repo.get_group_count_by_team_id_and_group_id(team_id=team_id, group_id=group_id)
            if group_count == 0:
                result = general_message(202, "group is not yours!", "当前组已删除或您无权限查看!", bean={})
                return Response(result, status=200)

            group_service_list = service_repo.get_group_service_by_group_id(
                group_id=group_id,
                region_name=self.response_region,
                team_id=self.team.tenant_id,
                team_name=self.team_name,
                enterprise_id=self.team.enterprise_id,
                query=query)
            if page_size == "-1" or page_size == "" or page_size == "0":
                page_size = len(group_service_list) if len(group_service_list) > 0 else 10
            paginator = Paginator(group_service_list, page_size)
            try:
                group_service_list = paginator.page(page).object_list
            except PageNotAnInteger:
                group_service_list = paginator.page(1).object_list
            except EmptyPage:
                group_service_list = paginator.page(paginator.num_pages).object_list
            result = general_message(code, "query success", "应用查询成功", list=group_service_list, total=paginator.count)
            return Response(result, status=code)
        except GroupNotExistError as e:
            logger.exception(e)
            result = general_message(400, "query success", "该应用不存在")
            return Response(result, status=400)
Exemple #7
0
    def get(self, request, group_id, *args, **kwargs):
        """
        查询数据中心分享完成情况,修改状态
        ---
        parameter:
            - name: team_name
              description: 团队名
              required: true
              type: string
              paramType: path
            - name: group_id
              description: 应用组id
              required: true
              type: string
              paramType: path
            - name: app_id
              description: 应用包id
              required: true
              type: string
              paramType: query
        """
        app_id = request.GET.get("app_id", None)
        try:
            if group_id == "-1":
                code = 400
                result = general_message(200, "query success", "未分组应用不可分享")
                return Response(result, status=code)
            else:
                if group_id is None or not group_id.isdigit():
                    code = 400
                    result = general_message(
                        code, "group_id is missing or not digit!",
                        "group_id缺失或非数字")
                    return Response(result, status=code)
                team_id = self.team.tenant_id
                group_count = group_repo.get_group_count_by_team_id_and_group_id(
                    team_id=team_id, group_id=group_id)
                if group_count == 0:
                    code = 400
                    result = general_message(code, "group is not yours!",
                                             "这个应用组不是你的!")
                    return Response(result, status=code)
                else:
                    all_success = True
                    code, msg_show, app = share_service.get_app_by_app_id(
                        app_id=app_id)
                    if app:
                        try:
                            service_list = list()
                            app_template = json_load(app.app_template)
                            for service in app_template:
                                data = dict()
                                res, body = region_api.get_service_publish_status(
                                    self.response_region, self.team_name,
                                    service.get("service_key", None),
                                    service.get("version", None))
                                logger.debug(res, body)

                                bean = body["bean"]
                                status = bean["Status"]
                                success_data = {}
                                if status == "failure" or status == "pushing":
                                    all_success = False
                                    success_data["all_success"] = False
                                    success_data["all_success_cn"] = "应用分享失败"
                                elif status == "success":
                                    success_data["all_success"] = True
                                    success_data["all_success_cn"] = "应用分享成功"
                                    # 应用组发布成功更新数据
                                    share_service.upate_app_complete_by_app_id(
                                        app_id=app_id, data=data)
                                data["id"] = str(
                                    service["service_key"]) + "_" + str(
                                        service["version"])
                                data["service_cname"] = service[
                                    "service_cname"]
                                data["service_key"] = service["service_key"]
                                data["version"] = service["version"]
                                data["status"] = status
                                service_list.append(data)
                                if all_success == 1:
                                    code = 200
                                else:
                                    code = 400
                                result = general_message(
                                    code,
                                    "all_success={0}".format(all_success),
                                    "{0}".format(
                                        success_data.get(
                                            "all_success_cn", None)),
                                    list=service_list)
                                return Response(result, status=200)
                        except Exception as e:
                            logger.exception(e)
                            result = error_message(e.message)
                            return Response(result, status=500)
                    else:
                        result = general_message(400, "failed", "没有此应用包")
                        return Response(result, status=400)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, status=500)
Exemple #8
0
    def post(self, request, group_id, *args, **kwargs):
        """
        生成分享应用实体,向数据中心发送分享任务
        ---
        parameter:
            - name: team_name
              description: 团队名
              required: true
              type: string
              paramType: path
            - name: group_id
              description: 应用组id
              required: true
              type: string
              paramType: path
            - name: group_name
              description: 应用包名字
              required: true
              type: string
              paramType: body
            - name: version
              description: 应用包版本
              required: true
              type: string
              paramType: body
            - name: scope
              description: 分享应用包可用范围("team", u"团队"), ("enterprise", u"公司"), ("goodrain", u"好雨云市场")
              required: true
              type: string
              paramType: body
            - name: pic
              description: 应用包头像
              required: true
              type: string
              paramType: body
            - name: app_template_incomplete
              description: 不完整的App模版
              required: true
              type: string
              paramType: body
        """
        group_name = request.data.get("group_name", None)
        version = request.data.get("version", "v1.0")
        describe = request.data.get("describe",
                                    "This is a default description.")
        scope = request.data.get("scope", "team")
        pic = request.data.get("pic", None)
        app_template_incomplete = request.data.get("app_template_incomplete",
                                                   None)
        source = request.data.get('source', 'local')
        # is_random = request.data.get("is_random", False)
        # 插件
        try:
            group_id = str(group_id)
            if group_id == "-1":
                code = 400
                result = general_message(code, "query success", "未分组应用不可分享")
                return Response(result, status=code)
            else:
                if group_id is None or not group_id.isdigit():
                    code = 400
                    result = general_message(
                        code, "group_id is missing or not digit!",
                        "group_id缺失或非数字")
                    return Response(result, status=code)
                team_id = self.team.tenant_id
                group_count = group_repo.get_group_count_by_team_id_and_group_id(
                    team_id=team_id, group_id=group_id)
                if group_count == 0:
                    code = 400
                    result = general_message(code, "group is not yours!",
                                             "这个应用组不是你的!")
                    return Response(result, status=code)
                else:
                    if RainbondCenterApp.objects.filter(
                            group_name=group_name, version=version).exists():
                        result = general_message(400, "failed", "此应用包该版本已经存在")
                        return Response(result, status=400)
                    else:
                        step = 0
                        for service_incomplete in app_template_incomplete:
                            service_env_map_list = service_incomplete.get(
                                "service_env_map_list", None)
                            if service_env_map_list:
                                for service_env in service_env_map_list:
                                    is_change = service_env.get(
                                        "is_change", None)
                                    is_change_p = request.data.get(
                                        "is_change", False)
                                    is_change = is_change_p

                            is_slug, data = app_store.judge_service_type(
                                scope=scope,
                                team_name=self.team_name,
                                service=service_incomplete)

                            if is_slug:
                                service_incomplete["service_slug"] = data
                            else:
                                service_incomplete["service_image"] = data

                        app_template = app_template_incomplete

                        app = share_service.create_basic_app_info(
                            group_key=make_uuid(),
                            group_name=group_name,
                            version=version,
                            describe=describe,
                            scope=scope,
                            pic=pic,
                            source=source,
                            share_team=self.team.tenant_id,
                            share_user=request.user.user_id,
                            tenant_service_group_id=group_id,
                            app_template=json_dump(app_template))
                        fields_dict = {
                            "group_share_id": app.ID,
                            "group_id": group_id,
                            "team_id": team_id,
                            "is_success": False,
                            "step": step
                        }
                        service_share_record = share_service.create_service_share_record(
                            **fields_dict)
                        for service in app_template:
                            if service.get("service_slug", None):
                                logger.debug("group.publish",
                                             "service group publish slug.")
                                code, msg, event_id = share_service.upload_slug(
                                    request,
                                    team=self.team,
                                    scope=scope,
                                    region_name=self.response_region,
                                    app=app,
                                    service=service)
                                step += 1
                                fields_dict.update({
                                    "step": step,
                                    "is_success": False
                                })
                                service_share_record = share_service.create_service_share_record(
                                    **fields_dict)
                                result = general_message(200,
                                                         'share running……',
                                                         '应用包正在分享……',
                                                         bean={
                                                             "event_id":
                                                             event_id,
                                                             "app_id": app.ID,
                                                             "group_id":
                                                             group_id
                                                         })
                            else:
                                logger.debug("group.publish",
                                             "service group publish image.")
                                code, msg, event_id = share_service.upload_image(
                                    request,
                                    team=self.team,
                                    scope=scope,
                                    region_name=self.response_region,
                                    app=app,
                                    service=service)
                                result = general_message(200,
                                                         'share running……',
                                                         '应用包正在分享……',
                                                         bean={
                                                             "event_id":
                                                             event_id,
                                                             "app_id": app.ID,
                                                             "group_id":
                                                             group_id
                                                         })
                            return Response(result, status=200)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, status=500)