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)
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
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
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 []
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
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']
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)