def get(self, request, enterprise_id, app_id, *args, **kwargs): page = int(request.GET.get("page", 1)) page_size = int(request.GET.get("page_size", 10)) data = [] count = 0 app = group_repo.get_group_by_id(app_id) if app: try: tenant = team_services.get_team_by_team_id(app.tenant_id) tenant_name = tenant.tenant_name except Exception: tenant_name = None services, count = enterprise_repo.get_enterprise_app_component_list(app_id, page, page_size) if services: for service in services: data.append({ "service_alias": service.service_alias, "service_id": service.service_id, "tenant_id": app.tenant_id, "tenant_name": tenant_name, "region_name": service.service_region, "service_cname": service.service_cname, "service_key": service.service_key, }) result = general_message(200, "success", "获取成功", list=data, total_count=count, page=page, page_size=page_size) return Response(result, status=status.HTTP_200_OK)
def post(self, req, team_id, user_id): serializer = CreateTeamUserReqSerializer(data=req.data) serializer.is_valid(raise_exception=True) try: team = team_services.get_team_by_team_id(team_id) except Tenants.DoesNotExist: raise exceptions.NotFound() role_ids = req.data["role_ids"].replace(" ", "").split(",") roleids = team_services.get_all_team_role_id(tenant_name=team_id, allow_owner=True) for role_id in role_ids: if int(role_id) not in roleids: raise serializers.ValidationError("角色{}不存在".format(role_id), status.HTTP_404_NOT_FOUND) flag = team_services.user_is_exist_in_team(user_list=[user_id], tenant_name=team_id) if flag: user_obj = user_services.get_user_by_user_id(user_id=user_id) raise serializers.ValidationError( "用户{}已经存在".format(user_obj.nick_name), status.HTTP_400_BAD_REQUEST) team_services.add_user_role_to_team(tenant=team, user_ids=[user_id], role_ids=role_ids) return Response(None, status.HTTP_201_CREATED)
def get(self, request, team_id): try: queryset = team_services.get_team_by_team_id(team_id.strip()) serializer = TeamInfoSerializer(queryset) return Response(serializer.data, status.HTTP_200_OK) except Tenants.DoesNotExist: raise ErrTeamNotFound
def get(self, request, enterprise_id, *args, **kwargs): data = [] page = int(request.GET.get("page", 1)) page_size = int(request.GET.get("page_size", 10)) enterprise_apps, apps_count = enterprise_repo.get_enterprise_app_list( enterprise_id, self.user, page, page_size) if enterprise_apps: for app in enterprise_apps: try: tenant = team_services.get_team_by_team_id(app.tenant_id) tenant_name = tenant.tenant_name except TenantNotExistError: tenant_name = None data.append({ "ID": app.ID, "group_name": app.group_name, "tenant_id": app.tenant_id, "tenant_name": tenant_name, "region_name": app.region_name }) result = general_message(200, "success", "获取成功", list=data, total_count=apps_count, page=page, page_size=page_size) return Response(result, status=status.HTTP_200_OK)
def get(self, req, app_id, *args, **kwargs): app = group_service.get_app_by_id(app_id) if not app: return Response(None, status.HTTP_404_NOT_FOUND) tenant = team_services.get_team_by_team_id(app.tenant_id) if not tenant: return Response({"msg": "该应用所属团队已被删除"}, status=status.HTTP_404_NOT_FOUND) appstatus, services = app_service.get_app_status(app) used_cpu, used_momory = app_service.get_app_memory_and_cpu_used( services) appInfo = model_to_dict(app) appInfo["service_count"] = app_service.get_app_service_count(app_id) appInfo["enterprise_id"] = tenant.enterprise_id appInfo[ "running_service_count"] = app_service.get_app_running_service_count( tenant, services) appInfo["service_list"] = ServiceBaseInfoSerializer(services, many=True).data appInfo["status"] = appstatus appInfo["team_name"] = tenant.tenant_name appInfo["used_cpu"] = used_cpu appInfo["used_momory"] = used_momory appInfo["app_id"] = app_id reapp = AppInfoSerializer(data=appInfo) reapp.is_valid() return Response(reapp.data, status=status.HTTP_200_OK)
def initial(self, request, *args, **kwargs): super(TeamAPIView, self).initial(request, *args, **kwargs) team_id = kwargs.get("team_id") region_name = kwargs.get("region_name") if team_id: self.team = team_services.get_team_by_team_id(team_id) self.region_name = region_name self.team_regions = region_services.get_team_usable_regions( self.team.tenant_name)
def post(self, request, team_id): serializer = TeamRegionReqSerializer(data=request.data) serializer.is_valid(raise_exception=True) team_data = serializer.data region = None if team_data.get("region", None): region = region_services.get_region_by_region_name(team_data.get("region")) if not region: raise ErrRegionNotFound team = team_services.get_team_by_team_id(team_id) region_services.create_tenant_on_region(self.enterprise.enterprise_id, team.tenant_name, region.region_name) re = TeamBaseInfoSerializer(team) return Response(re.data, status=status.HTTP_201_CREATED)
def get(self, req, app_id, *args, **kwargs): app = group_service.get_app_by_id(app_id) if not app: return Response(None, status.HTTP_404_NOT_FOUND) tenant = team_services.get_team_by_team_id(app.tenant_id) if not tenant: raise serializers.ValidationError("指定租户不存在") appstatus, services = app_service.get_app_status(app) appInfo = model_to_dict(app) appInfo["enterprise_id"] = tenant.enterprise_id appInfo["service_list"] = ServiceBaseInfoSerializer(services, many=True).data appInfo["status"] = appstatus reapp = AppInfoSerializer(data=appInfo) reapp.is_valid() return Response(reapp.data, status=status.HTTP_200_OK)
def get_app_status(self, app): services = group_service.get_group_services(app.ID) service_ids = [service.service_id for service in services] team = team_services.get_team_by_team_id(app.tenant_id) status_list = base_service.status_multi_service( region=app.region_name, tenant_name=team.tenant_name, service_ids=service_ids, enterprise_id=team.enterprise_id) # As long as there is a service running, the application thinks it is running app_status = "closed" for status in status_list: if status["status"] == "running": app_status = "running" if not service_ids: app_status = "notinstall" return app_status, services
def post(self, request, *args, **kwargs): resources = [] serializer = TenantRegionListSerializer(data=request.data, many=True) serializer.is_valid(raise_exception=True) for tenant in serializer.data: team = None region_name = tenant.get("region_name") tenant_id = tenant.get("tenant_id") team_region = TenantRegionInfo.objects.filter( tenant_id=tenant_id, enterprise_id=self.enterprise.enterprise_id, region_name=region_name).first() if team_region: team = team_services.get_team_by_team_id(tenant_id) data = team_services.get_tenant_resource(team, region_name) if data: resources.append(data) serializer = TeamAppsResourceSerializer(data=resources, many=True) serializer.is_valid(raise_exception=True) return Response(serializer.data, status=200)
def post(self, request, *args, **kwargs): serializer = MarketInstallSerializer(data=request.data) serializer.is_valid(raise_exception=True) data = serializer.data logger.info(data) app = group_service.get_app_by_id(data["app_id"]) if not app: return Response(FailSerializer( {"msg": "install target app not found"}), status=status.HTTP_400_BAD_REQUEST) tenant = team_services.get_team_by_team_id(app.tenant_id) # TODO: get app info by order id token = market_sycn_service.get_enterprise_access_token( tenant.enterprise_id, "market") if token: market_client = get_market_client(token.access_id, token.access_token, token.access_url) app_version = market_client.download_app_by_order( order_id=data["order_id"]) if not app_version: return Response(FailSerializer( {"msg": "download app metadata failure"}), status=status.HTTP_400_BAD_REQUEST) rainbond_app, rainbond_app_version = market_app_service.conversion_cloud_version_to_app( app_version) market_app_service.install_service(tenant, app.region_name, request.user, app.ID, rainbond_app, rainbond_app_version, True, True) services = group_service.get_group_services(data["app_id"]) appInfo = model_to_dict(app) appInfo["enterprise_id"] = tenant.enterprise_id appInfo["service_list"] = ServiceBaseInfoSerializer(services, many=True).data reapp = AppInfoSerializer(data=appInfo) reapp.is_valid() return Response(reapp.data, status=status.HTTP_200_OK) else: return Response(FailSerializer( {"msg": "not support install from market, not bound"}), status=status.HTTP_400_BAD_REQUEST)
def post(self, request, team_id): serializer = TeamRegionReqSerializer(data=request.data) serializer.is_valid(raise_exception=True) team_data = serializer.data region = None if team_data.get("region", None): region = region_services.get_region_by_region_name(team_data.get("region")) if not region: raise serializers.ValidationError("指定数据中心不存在") team = team_services.get_team_by_team_id(team_id) code, message, bean = region_services.create_tenant_on_region(team.tenant_name, region.region_name) if code != 200: raise serializers.ValidationError("数据中心创建团队时发生错误") if code == 200: re = TeamBaseInfoSerializer(team) return Response(re.data, status=status.HTTP_201_CREATED) else: return Response(None, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get_app_services_and_status(self, app): services = group_service.get_group_services(app.ID) service_ids = [service.service_id for service in services] team = team_services.get_team_by_team_id(app.tenant_id) status_list = base_service.status_multi_service( region=app.region_name, tenant_name=team.tenant_name, service_ids=service_ids, enterprise_id=team.enterprise_id) status_map = {} if status_list: for status in status_list: status_map[status["service_id"]] = status["status"] re_services = [] for service in services: s = model_to_dict(service) s["status"] = status_map.get(service.service_id) re_services.append(s) return re_services