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)
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)
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)
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)