Пример #1
0
class ApplicationService(object):
    """
    应用服务接口,提供应用生命周期的所有操作
    """
    def get_service_by_id(self, service_id):
        try:
            return TenantServiceInfo.objects.get(service_id=service_id)
        except TenantServiceInfo.DoesNotExist:
            return None

    def get_service_status(self, tenant, service):
        try:
            body = region_api.check_service_status(service.service_region,
                                                   tenant.tenant_name,
                                                   service.service_alias,
                                                   tenant.enterprise_id)
            status = body["bean"]['cur_status']

        except Exception, e:
            logger.debug(service.service_region + "-" + service.service_id +
                         " check_service_status is error")
            logger.exception(e)
            status = 'failure'

        return get_status_info_map(status)
Пример #2
0
 def status_service(self, service):
     result = {}
     try:
         if service.deploy_version is None or service.deploy_version == "":
             result["totalMemory"] = 0
             result["status"] = "undeploy"
             return 200, True, result
         else:
             tenant = Tenants.objects.get(tenant_id=service.tenant_id)
             body = region_api.check_service_status(service.service_region,
                                                    tenant.tenant_name,
                                                    service.service_alias,
                                                    tenant.enterprise_id)
             bean = body["bean"]
             status = bean["cur_status"]
             if status == "running":
                 result[
                     "totalMemory"] = service.min_node * service.min_memory
             else:
                 result["totalMemory"] = 0
             status_cn = bean["status_cn"]
             from www.utils.status_translate import get_status_info_map
             status_info_map = get_status_info_map(status)
             result.update(status_info_map)
             if status_cn:
                 result["status_cn"] = status_cn
             result["status"] = status
         return 200, True, result
     except Exception as e:
         logger.exception("openapi.services", e)
         # logger.debug(service.service_region + "-" + service.service_id + " check_service_status is error")
         result["totalMemory"] = 0
         result['status'] = "failure"
         result["status_cn"] = "未知"
         return 409, False, result
Пример #3
0
    def get_group_service_by_group_id(self, group_id, region_name, team_id, team_name, enterprise_id, query=""):
        group_services_list = base_service.get_group_services_list(team_id, region_name, group_id, query)
        if not group_services_list:
            return []
        service_ids = [service.service_id for service in group_services_list]
        status_list = base_service.status_multi_service(region_name, team_name, service_ids, enterprise_id)
        status_cache = {}
        statuscn_cache = {}
        for status in status_list:
            status_cache[status["service_id"]] = status["status"]
            statuscn_cache[status["service_id"]] = status["status_cn"]
        result = []
        for service in group_services_list:
            service_obj = TenantServiceInfo.objects.filter(service_id=service["service_id"]).first()
            if service_obj:
                service["service_source"] = service_obj.service_source
            service["status_cn"] = statuscn_cache.get(service["service_id"], "未知")
            status = status_cache.get(service["service_id"], "unknow")

            if status == "unknow" and service["create_status"] != "complete":
                service["status"] = "creating"
                service["status_cn"] = "创建中"
            else:
                service["status"] = status_cache.get(service["service_id"], "unknow")
            if service["status"] == "closed" or service["status"] == "undeploy":
                service["min_memory"] = 0
            status_map = get_status_info_map(service["status"])
            service.update(status_map)
            result.append(service)
        return result
Пример #4
0
    def get_no_group_service_status_by_group_id(self, team_name, team_id, region_name, enterprise_id):
        no_services = base_service.get_no_group_services_list(team_id=team_id, region_name=region_name)
        if no_services:
            service_ids = [service.service_id for service in no_services]
            status_list = base_service.status_multi_service(
                region=region_name, tenant_name=team_name, service_ids=service_ids, enterprise_id=enterprise_id)
            status_cache = {}
            statuscn_cache = {}
            for status in status_list:
                status_cache[status["service_id"]] = status["status"]
                statuscn_cache[status["service_id"]] = status["status_cn"]
            result = []
            for service in no_services:
                if service["group_name"] is None:
                    service["group_name"] = "未分组"
                service["status_cn"] = statuscn_cache.get(service["service_id"], "未知")
                status = status_cache.get(service["service_id"], "unknow")

                if status == "unknow" and service["create_status"] != "complete":
                    service["status"] = "creating"
                    service["status_cn"] = "创建中"
                else:
                    service["status"] = status_cache.get(service["service_id"], "unknow")
                if service["status"] == "closed" or service["status"] == "undeploy":
                    service["min_memory"] = 0
                status_map = get_status_info_map(service["status"])
                service.update(status_map)
                result.append(service)

            return result
        else:
            return []
Пример #5
0
    def get_service_status(self, tenant, service):
        """获取应用状态"""
        try:
            body = region_api.check_service_status(service.service_region, tenant.tenant_name,
                                                   service.service_alias, tenant.enterprise_id)

            bean = body["bean"]
            status = bean["cur_status"]
        except Exception as e:
            logger.exception(e)
            status = "unKnow"
        status_info_map = get_status_info_map(status)
        return status_info_map
Пример #6
0
    def __get_tenant_service_status(self, tenant, service):
        try:
            body = region_api.check_service_status(service.service_region,
                                                   tenant.tenant_name,
                                                   service.service_alias,
                                                   tenant.enterprise_id)
            status = body["bean"]['cur_status']

        except region_api.CallApiError as e:
            if e.status == 404:
                status = 'undeploy'
            else:
                logger.debug(service.service_region + "-" +
                             service.service_id +
                             " check_service_status is error")
                logger.exception(e)
                status = 'failure'

        return get_status_info_map(status)['status']
Пример #7
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: order
           description: 排序规则 desc(从大到小)或者asc(从小到大) 默认desc
           required: false
           type: string
           paramType: query
         - name: fields
           description: 排序字段 默认 update_time 可用(update_time, min_memory)
           required: false
           type: string
           paramType: query
         - name: query_key
           description: 模糊应用名 默认为空,查到所有应用
           required: false
           type: string
           paramType: query
         - name: service_status
           description: 应用状态 默认all 可用(running, closed, all)
           required: true
           type: string
           paramType: query
     """
     try:
         code = 200
         page = request.GET.get("page", 1)
         page_size = request.GET.get("page_size", 10)
         order = request.GET.get('order_type', 'desc')
         fields = request.GET.get('fields', 'update_time')
         query_key = request.GET.get("query_key", '')
         service_status = request.GET.get("service_status", 'all')
         if not self.team:
             result = general_message(400, "failed", "该团队不存在")
             return Response(result, status=400)
         services_list = base_service.get_fuzzy_services_list(
             team_id=self.team.tenant_id,
             region_name=self.response_region,
             query_key=query_key,
             fields=fields,
             order=order)
         if services_list:
             try:
                 service_ids = [
                     service["service_id"] for service in services_list
                 ]
                 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)
                 status_cache = {}
                 statuscn_cache = {}
                 for status in status_list:
                     status_cache[status["service_id"]] = status["status"]
                     statuscn_cache[
                         status["service_id"]] = status["status_cn"]
                 result = []
                 for service in services_list:
                     if service["group_id"] is None:
                         service["group_name"] = "未分组"
                         service["group_id"] = "-1"
                     if service_status == "all":
                         service["status_cn"] = statuscn_cache.get(
                             service["service_id"], "未知")
                         status = status_cache.get(service["service_id"],
                                                   "unknow")
                         if status == "unknow" and service[
                                 "create_status"] != "complete":
                             service["status"] = "creating"
                             service["status_cn"] = "创建中"
                         else:
                             service["status"] = status_cache.get(
                                 service["service_id"], "unknow")
                             service["status_cn"] = get_status_info_map(
                                 service["status"]).get("status_cn")
                         if service["status"] == "closed" or service[
                                 "status"] == "undeploy":
                             service["min_memory"] = 0
                         result.append(service)
                     else:
                         if status_cache.get(
                                 service.service_id) == service_status:
                             service["status"] = status_cache.get(
                                 service.service_id, "unknow")
                             service["status_cn"] = get_status_info_map(
                                 service["status"]).get("status_cn")
                             if service["status"] == "closed" or service[
                                     "status"] == "undeploy":
                                 service["min_memory"] = 0
                             result.append(service)
                 paginator = Paginator(result, page_size)
                 try:
                     result = paginator.page(page).object_list
                 except PageNotAnInteger:
                     result = paginator.page(1).object_list
                 except EmptyPage:
                     result = paginator.page(
                         paginator.num_pages).object_list
                 result = general_message(200,
                                          "query user success",
                                          "查询用户成功",
                                          list=result,
                                          total=paginator.count)
             except Exception as e:
                 logger.exception(e)
                 return Response(services_list, status=200)
             return Response(result, status=code)
         else:
             result = general_message(200, "success", "当前团队没有创建应用")
             return Response(result, status=200)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)