def get_or_create_upgrade_record(self, tenant_id, group_id, group_key, upgrade_group_id, is_from_cloud, market_name): """获取或创建升级记录""" recode_kwargs = { "tenant_id": tenant_id, "group_id": group_id, "group_key": group_key, "create_time": datetime.now(), "is_from_cloud": is_from_cloud, "market_name": market_name, "upgrade_group_id": upgrade_group_id, } try: return upgrade_repo.get_app_not_upgrade_record(status__lt=UpgradeStatus.UPGRADED.value, **recode_kwargs) except AppUpgradeRecord.DoesNotExist: from console.services.group_service import group_service tenant = Tenants.objects.get(tenant_id=tenant_id) service_group_keys = group_service.get_group_service_sources(group_id).values_list('group_key', flat=True) if group_key in set(service_group_keys or []): if not is_from_cloud: app = rainbond_app_repo.get_rainbond_app_qs_by_key(tenant.enterprise_id, group_key) if not app: raise ServiceHandleException( msg="the rainbond app is not in the group", msg_show="该应用中没有这个云市组件", status_code=404) app_name = app.app_name else: market = app_market_service.get_app_market_by_name(tenant.enterprise_id, market_name, raise_exception=True) app = app_market_service.get_market_app_model(market, group_key) app_name = app.app_name app_record = upgrade_repo.create_app_upgrade_record(group_name=app_name, **recode_kwargs) return app_record else: raise AbortRequest(msg="the app model is not in the group", msg_show="该应用中没有这个应用模型", status_code=404)
def get_or_create_upgrade_record(self, tenant_id, group_id, group_key): """获取或创建升级记录""" recode_kwargs = { "tenant_id": tenant_id, "group_id": group_id, "group_key": group_key, "create_time": datetime.now(), } try: app_record = upgrade_repo.get_app_not_upgrade_record( status__lt=UpgradeStatus.UPGRADED.value, **recode_kwargs) except AppUpgradeRecord.DoesNotExist: from console.services.group_service import group_service service_group_keys = group_service.get_group_service_sources( group_id).values_list('group_key', flat=True) if group_key not in set(service_group_keys or []): raise AbortRequest(msg="the rainbond app is not in the group", msg_show="该组中没有这个云市组件", status_code=404) tenant = Tenants.objects.get(tenant_id=tenant_id) app = rainbond_app_repo.get_rainbond_app_qs_by_key( tenant.enterprise_id, group_key).first() if not app: raise AbortRequest(msg="No rainbond app found", msg_show="没有找到此云市组件", status_code=404) app_record = upgrade_repo.create_app_upgrade_record( group_name=app.group_name, **recode_kwargs) return app_record
def get_app_upgrade_versions(self, tenant, group_id, group_key): """获取云市组件可升级版本列表""" from console.services.group_service import group_service from console.services.market_app_service import market_app_service # 查询某一个云市组件下的所有组件 services = group_service.get_rainbond_services(group_id, group_key) versions = set() # 查询可升级的组件 for service in services: service_version = market_app_service.list_upgradeable_versions( tenant, service) versions |= set(service_version or []) # 查询新增组件的版本 service_keys = services.values_list('service_key', flat=True) service_keys = set(service_keys) if service_keys else set() app_qs = rainbond_app_repo.get_rainbond_app_qs_by_key( tenant.enterprise_id, group_key=group_key) add_versions = self.query_the_version_of_the_add_service( app_qs, service_keys) versions |= add_versions return versions
def get_or_create_upgrade_record(self, tenant_id, group_id, group_key): """获取或创建升级记录""" recode_kwargs = { "tenant_id": tenant_id, "group_id": group_id, "group_key": group_key, "create_time": datetime.now(), } try: app_record = upgrade_repo.get_app_not_upgrade_record(status__lt=UpgradeStatus.UPGRADED.value, **recode_kwargs) except AppUpgradeRecord.DoesNotExist: from console.services.group_service import group_service tenant = Tenants.objects.get(tenant_id=tenant_id) service_group_keys = group_service.get_group_service_sources(group_id).values_list('group_key', flat=True) if group_key in set(service_group_keys or []): app_name = None app = rainbond_app_repo.get_rainbond_app_qs_by_key(tenant.enterprise_id, group_key).first() if app: app_name = app.app_name else: is_cloud_app = False markets = self.get_cloud_markets(enterprise_id=tenant.enterprise_id) if markets: for market in markets: cloud_app = self.get_cloud_app(tenant.enterprise_id, market.market_id, group_key) if cloud_app: app_name = cloud_app.name is_cloud_app = True if not is_cloud_app: raise AbortRequest(msg="the rainbond app is not in the group", msg_show="该应用中没有这个云市组件", status_code=404) app_record = upgrade_repo.create_app_upgrade_record(group_name=app_name, **recode_kwargs) return app_record else: raise AbortRequest(msg="the rainbond app is not in the group", msg_show="该应用中没有这个云市组件", status_code=404)
def yield_app_info(): for group_key in set(service_group_keys): app_qs = rainbond_app_repo.get_rainbond_app_qs_by_key( group_key=group_key) app = app_qs.first() if not app: continue upgrade_versions = upgrade_service.get_app_upgrade_versions( self.tenant, group_id, group_key) not_upgrade_record = upgrade_service.get_app_not_upgrade_record( self.tenant.tenant_id, group_id, group_key) services = group_service.get_rainbond_services( int(group_id), group_key) yield { 'current_version': upgrade_service.get_old_version( group_key, services.values_list('service_id', flat=True)), 'can_upgrade': bool(upgrade_versions), 'upgrade_versions': list(upgrade_versions), 'not_upgrade_record_id': not_upgrade_record.ID, 'not_upgrade_record_status': not_upgrade_record.status, 'group_key': app.group_key, 'group_name': app.group_name, 'share_user': app.share_user, 'share_team': app.share_team, 'tenant_service_group_id': app.tenant_service_group_id, 'pic': app.pic, 'source': app.source, 'describe': app.describe, 'enterprise_id': app.enterprise_id, 'is_official': app.is_official, 'details': app.details, 'min_memory': group_service.get_service_group_memory(app.app_template), }