Exemple #1
0
    def get_groups_and_services(self, tenant, region, query=""):
        groups = group_repo.get_tenant_region_groups(tenant.tenant_id, region,
                                                     query)
        services = service_repo.get_tenant_region_services(
            region, tenant.tenant_id).values("service_id", "service_cname",
                                             "service_alias")
        service_id_map = {s["service_id"]: s for s in services}
        service_group_relations = group_service_relation_repo.get_service_group_relation_by_groups(
            [g.ID for g in groups])
        service_group_map = {
            sgr.service_id: sgr.group_id
            for sgr in service_group_relations
        }
        group_services_map = dict()
        for k, v in service_group_map.iteritems():
            service_list = group_services_map.get(v, None)
            service_info = service_id_map.get(k, None)
            if service_info:
                if not service_list:
                    group_services_map[v] = [service_info]
                else:
                    service_list.append(service_info)
                service_id_map.pop(k)

        result = []
        for g in groups:
            bean = dict()
            bean["group_id"] = g.ID
            bean["group_name"] = g.group_name
            bean["service_list"] = group_services_map.get(g.ID)
            result.insert(0, bean)

        return result
Exemple #2
0
 def get(self, request, *args, **kwargs):
     """
     总览 团队应用信息
     """
     query = request.GET.get("query", "")
     page = int(request.GET.get("page", 1))
     page_size = int(request.GET.get("page_size", 10))
     groups = group_repo.get_tenant_region_groups(self.team.tenant_id,
                                                  self.response_region,
                                                  query)
     total = len(groups)
     app_num_dict = {"total": total}
     start = (page - 1) * page_size
     end = page * page_size
     apps = []
     if groups:
         group_ids = [group.ID for group in groups]
         apps = group_service.get_multi_apps_all_info(
             group_ids, self.response_region, self.team_name,
             self.team.enterprise_id)
         apps = apps[start:end]
     return Response(general_message(200,
                                     "success",
                                     "查询成功",
                                     list=apps,
                                     bean=app_num_dict),
                     status=200)
Exemple #3
0
    def get(self, request, *args, **kwargs):
        """
        总览 团队信息
        ---
        parameters:
            - name: team_name
              description: 团队名
              required: true
              type: string
              paramType: path
        """
        try:
            overview_detail = dict()
            users = team_services.get_team_users(self.team)
            if users:
                user_nums = len(users)
                overview_detail["user_nums"] = user_nums
                team_service_num = service_repo.get_team_service_num_by_team_id(
                    team_id=self.team.tenant_id,
                    region_name=self.response_region)
                source = common_services.get_current_region_used_resource(
                    self.team, self.response_region)
                # 获取tcp和http策略数量
                region = region_repo.get_region_by_region_name(
                    self.response_region)
                total_tcp_domain = tcp_domain.get_all_domain_count_by_tenant_and_region(
                    self.team.tenant_id, region.region_id)
                overview_detail["total_tcp_domain"] = total_tcp_domain

                total_http_domain = domain_repo.get_all_domain_count_by_tenant_and_region_id(
                    self.team.tenant_id, region.region_id)
                overview_detail["total_http_domain"] = total_http_domain

                # 获取分享应用数量
                groups = group_repo.get_tenant_region_groups(
                    self.team.tenant_id, region.region_name)
                share_app_num = 0
                if groups:
                    for group in groups:
                        share_record = share_repo.get_service_share_record_by_groupid(
                            group_id=group.ID)
                        if share_record:
                            share_app_num += 1
                overview_detail["share_app_num"] = share_app_num

                if source:
                    team_app_num = group_repo.get_tenant_region_groups_count(
                        self.team.tenant_id, self.response_region)
                    overview_detail["team_app_num"] = team_app_num
                    overview_detail["team_service_num"] = team_service_num
                    overview_detail["team_service_memory_count"] = int(
                        source["memory"])
                    overview_detail["team_service_total_disk"] = int(
                        source["disk"])
                    overview_detail["team_service_total_cpu"] = int(
                        source["limit_cpu"])
                    overview_detail["team_service_total_memory"] = int(
                        source["limit_memory"])
                    overview_detail["team_service_use_cpu"] = int(
                        source["cpu"])
                    cpu_usage = 0
                    memory_usage = 0
                    if int(source["limit_cpu"]) != 0:
                        cpu_usage = float(int(source["cpu"])) / float(
                            int(source["limit_cpu"])) * 100
                    if int(source["limit_memory"]) != 0:
                        memory_usage = float(int(source["memory"])) / float(
                            int(source["limit_memory"])) * 100
                    overview_detail["cpu_usage"] = round(cpu_usage, 2)
                    overview_detail["memory_usage"] = round(memory_usage, 2)

                return Response(
                    general_message(200,
                                    "success",
                                    "查询成功",
                                    bean=overview_detail))
            else:
                data = {
                    "user_nums": 1,
                    "team_service_num": 0,
                    "total_memory": 0
                }
                result = general_message(200,
                                         "success",
                                         "团队信息总览获取成功",
                                         bean=data)
                return Response(result, status=200)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, status=500)
Exemple #4
0
    def get(self, request, *args, **kwargs):
        """
        总览 团队应用信息
        """
        try:
            page = int(request.GET.get("page", 1))
            page_size = int(request.GET.get("page_size", 10))
            groups = group_repo.get_tenant_region_groups(
                self.team.tenant_id, self.response_region)
            total = len(groups)
            app_num_dict = {"total": total}
            start = (page - 1) * page_size
            end = page * page_size
            app_list = []
            if groups:
                for group in groups:
                    app_dict = dict()
                    app_dict["group_name"] = group.group_name
                    app_dict["group_id"] = group.ID
                    # 分享记录和备份记录
                    share_record_num = share_repo.get_app_share_record_count_by_groupid(
                        group_id=group.ID)
                    app_dict["share_record_num"] = share_record_num
                    backup_records = backup_record_repo.get_group_backup_records(
                        self.team.tenant_id, self.response_region, group.ID)
                    backup_record_num = len(backup_records)
                    app_dict["backup_record_num"] = backup_record_num
                    # 服务数量记录
                    services = group_service_relation_repo.get_services_by_group(
                        group.ID)
                    services_num = len(services)
                    app_dict["services_num"] = services_num

                    run_service_num = 0
                    if services:
                        service_ids = []
                        for service in services:
                            service_ids.append(service.service_id)

                        status_list = base_service.status_multi_service(
                            region=self.response_region,
                            tenant_name=self.team_name,
                            service_ids=service_ids,
                            enterprise_id=self.team.enterprise_id)
                        for status in status_list:
                            if status["status"] in [
                                    "running", "upgrade", "starting",
                                    "some_abnormal"
                            ]:
                                run_service_num += 1

                    app_dict["run_service_num"] = run_service_num
                    app_list.append(app_dict)

                # 排序
                app_list.sort(key=lambda x: x['run_service_num'], reverse=True)

            apps_list = app_list[start:end]
            result = general_message(200,
                                     "success",
                                     "查询成功",
                                     list=apps_list,
                                     bean=app_num_dict)
            return Response(result, status=200)
        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
        """
        overview_detail = dict()
        users = team_services.get_team_users(self.team)
        if users:
            user_nums = len(users)
            overview_detail["user_nums"] = user_nums
            team_service_num = service_repo.get_team_service_num_by_team_id(
                team_id=self.team.tenant_id, region_name=self.response_region)
            source = common_services.get_current_region_used_resource(self.team, self.response_region)
            # 获取tcp和http策略数量
            region = region_repo.get_region_by_region_name(self.response_region)
            if not region:
                overview_detail["region_health"] = False
                return Response(general_message(200, "success", "查询成功", bean=overview_detail))
            total_tcp_domain = tcp_domain.get_all_domain_count_by_tenant_and_region(self.team.tenant_id, region.region_id)
            overview_detail["total_tcp_domain"] = total_tcp_domain

            total_http_domain = domain_repo.get_all_domain_count_by_tenant_and_region_id(self.team.tenant_id, region.region_id)
            overview_detail["total_http_domain"] = total_http_domain

            # 获取分享应用数量
            groups = group_repo.get_tenant_region_groups(self.team.tenant_id, region.region_name)
            share_app_num = 0

            batch_create_app_body = []
            if groups:
                for group in groups:
                    share_record = share_repo.get_service_share_record_by_groupid(group_id=group.ID)
                    if share_record and share_record.step == 3:
                        share_app_num += 1

                    try:
                        region_app_repo.get_region_app_id(region.region_name, group.ID)
                    except RegionApp.DoesNotExist:
                        create_app_body = dict()
                        group_services = base_service.get_group_services_list(self.team.tenant_id, region.region_name, group.ID)
                        service_ids = []
                        if group_services:
                            service_ids = [service["service_id"] for service in group_services]
                        create_app_body["app_name"] = group.group_name
                        create_app_body["console_app_id"] = group.ID
                        create_app_body["service_ids"] = service_ids
                        batch_create_app_body.append(create_app_body)

            if len(batch_create_app_body) > 0:
                try:
                    body = {"apps_info": batch_create_app_body}
                    applist = region_api.batch_create_application(region.region_name, self.tenant_name, body)
                    app_list = []
                    if applist:
                        for app in applist:
                            data = RegionApp(
                                app_id=app["app_id"], region_app_id=app["region_app_id"], region_name=region.region_name)
                            app_list.append(data)
                    RegionApp.objects.bulk_create(app_list)
                except Exception as e:
                    logger.exception(e)

            team_app_num = group_repo.get_tenant_region_groups_count(self.team.tenant_id, self.response_region)
            overview_detail["share_app_num"] = share_app_num
            overview_detail["team_app_num"] = team_app_num
            overview_detail["team_service_num"] = team_service_num
            overview_detail["eid"] = self.team.enterprise_id
            overview_detail["team_service_memory_count"] = 0
            overview_detail["team_service_total_disk"] = 0
            overview_detail["team_service_total_cpu"] = 0
            overview_detail["team_service_total_memory"] = 0
            overview_detail["team_service_use_cpu"] = 0
            overview_detail["cpu_usage"] = 0
            overview_detail["memory_usage"] = 0
            if source:
                try:
                    overview_detail["region_health"] = True
                    overview_detail["team_service_memory_count"] = int(source["memory"])
                    overview_detail["team_service_total_disk"] = int(source["disk"])
                    overview_detail["team_service_total_cpu"] = int(source["limit_cpu"])
                    overview_detail["team_service_total_memory"] = int(source["limit_memory"])
                    overview_detail["team_service_use_cpu"] = int(source["cpu"])
                    cpu_usage = 0
                    memory_usage = 0
                    if int(source["limit_cpu"]) != 0:
                        cpu_usage = float(int(source["cpu"])) / float(int(source["limit_cpu"])) * 100
                    if int(source["limit_memory"]) != 0:
                        memory_usage = float(int(source["memory"])) / float(int(source["limit_memory"])) * 100
                    overview_detail["cpu_usage"] = round(cpu_usage, 2)
                    overview_detail["memory_usage"] = round(memory_usage, 2)
                except Exception as e:
                    logger.debug(source)
                    logger.exception(e)
            else:
                overview_detail["region_health"] = False
            return Response(general_message(200, "success", "查询成功", bean=overview_detail))
        else:
            data = {"user_nums": 1, "team_service_num": 0, "total_memory": 0, "eid": self.team.enterprise_id}
            result = general_message(200, "success", "团队信息总览获取成功", bean=data)
            return Response(result, status=200)