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
def post(self, request, team_id, region_name, *args, **kwargs): serializers = TeamAppsCloseSerializers(data=request.data) serializers.is_valid(raise_exception=True) service_id_list = serializers.data.get("service_ids", None) services = service_repo.get_tenant_region_services(self.region_name, self.team.tenant_id) if not services: return Response(None, status=200) service_ids = services.values_list("service_id", flat=True) if service_id_list: service_ids = list(set(service_ids) & set(service_id_list)) code, msg = app_manage_service.batch_action(self.region_name, self.team, self.user, "stop", service_ids, None, self.oauth_instance) if code != 200: raise ServiceHandleException(status_code=code, msg="batch manage error", msg_show=msg) return Response(None, status=200)
def get_undependencies(self, tenant, service): # 打开对内端口才能被依赖 services = service_repo.get_tenant_region_services(service.service_region, tenant.tenant_id).exclude(service_id=service.service_id) not_dependencies = [] dep_services = dep_relation_repo.get_service_dependencies(tenant.tenant_id, service.service_id) dep_service_ids = [dep.dep_service_id for dep in dep_services] for s in services: # 查找打开内部访问的组件 open_inner_services = port_repo.get_service_ports(tenant.tenant_id, s.service_id).filter(is_inner_service=True) if open_inner_services: if s.service_id not in dep_service_ids: not_dependencies.append(s) return not_dependencies