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)
Beispiel #2
0
    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)
Beispiel #3
0
 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
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
 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)
Beispiel #7
0
    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)
Beispiel #8
0
 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)
Beispiel #9
0
 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
Beispiel #10
0
 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)
Beispiel #11
0
 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)
Beispiel #12
0
    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)
Beispiel #13
0
 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