diff --git a/config/src/main/java/com/alibaba/nacos/config/server/Config.java b/config/src/main/java/com/alibaba/nacos/config/server/Config.java index 74882c0f438..c0e656edfde 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/Config.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/Config.java @@ -26,7 +26,9 @@ * @author Nacos */ @EnableScheduling -@SpringBootApplication(scanBasePackages = {"com.alibaba.nacos.config.server", "com.alibaba.nacos.core"}) +@SpringBootApplication(scanBasePackages = { + "com.alibaba.nacos.config.server", + "com.alibaba.nacos.core"}) public class Config { public static void main(String[] args) { diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/HistoryController.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/HistoryController.java index ec1b0eb02fb..db34d0bb572 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/HistoryController.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/HistoryController.java @@ -19,12 +19,15 @@ import com.alibaba.nacos.auth.annotation.Secured; import com.alibaba.nacos.auth.common.ActionTypes; import com.alibaba.nacos.auth.exception.AccessException; +import com.alibaba.nacos.common.utils.NamespaceUtil; import com.alibaba.nacos.config.server.auth.ConfigResourceParser; import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.model.ConfigHistoryInfo; +import com.alibaba.nacos.config.server.model.ConfigInfoWrapper; import com.alibaba.nacos.config.server.model.Page; import com.alibaba.nacos.config.server.service.repository.PersistService; import com.alibaba.nacos.common.utils.StringUtils; +import com.alibaba.nacos.config.server.utils.ParamUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; @@ -32,6 +35,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Objects; /** @@ -143,5 +147,20 @@ public ConfigHistoryInfo getPreviousConfigHistoryInfo(@RequestParam("dataId") St checkHistoryInfoPermission(configHistoryInfo, dataId, group, tenant); return configHistoryInfo; } + + /** + * Query configs list by namespace. + * @param tenant config_info namespace + * @since 2.1.1 + * @return list + */ + @GetMapping(value = "/configs") + @Secured(action = ActionTypes.READ, parser = ConfigResourceParser.class) + public List getDataIds(@RequestParam("tenant") String tenant) { + // check tenant + ParamUtils.checkTenant(tenant); + tenant = NamespaceUtil.processNamespaceParameter(tenant); + return persistService.queryConfigInfoByNamespace(tenant); + } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java index 1d531b17138..6967c3b85de 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/PersistService.java @@ -1337,5 +1337,12 @@ Map batchInsertOrUpdate(List configInfoList, Stri * @return count by tenantId */ int tenantInfoCountByTenantId(String tenantId); - + + /** + * Query dataId list by namespace. + * + * @param tenantId tenantId + * @return {@link ConfigInfoBase} + */ + List queryConfigInfoByNamespace(final String tenantId); } \ No newline at end of file diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java index 714d7bb9f57..428d2e06672 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/EmbeddedStoragePersistServiceImpl.java @@ -2563,6 +2563,13 @@ public int tenantInfoCountByTenantId(String tenantId) { } return result; } - + + @Override + public List queryConfigInfoByNamespace(String tenantId) { + Assert.hasText(tenantId, "tenantId can not be null"); + String tenantTmp = StringUtils.isBlank(tenantId) ? StringUtils.EMPTY : tenantId; + final String sql = "SELECT data_id,group_id,tenant_id,app_name,type FROM config_info WHERE tenant_id=?"; + return databaseOperate.queryMany(sql, new Object[] {tenantTmp}, CONFIG_INFO_WRAPPER_ROW_MAPPER); + } } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java index 65a89a898cf..9a165b264cf 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePersistServiceImpl.java @@ -2786,5 +2786,22 @@ public int tenantInfoCountByTenantId(String tenantId) { } return result.intValue(); } - + + @Override + public List queryConfigInfoByNamespace(String tenant) { + Assert.hasText(tenant, "tenant can not be null"); + String tenantTmp = StringUtils.isBlank(tenant) ? StringUtils.EMPTY : tenant; + try { + return this.jt.query( + "SELECT data_id,group_id,tenant_id,app_name,type FROM config_info_beta WHERE tenant_id=?", + new Object[]{tenantTmp}, + CONFIG_INFO_WRAPPER_ROW_MAPPER); + } catch (EmptyResultDataAccessException e) { // Indicates that the data does not exist, returns null. + return Collections.EMPTY_LIST; + } catch (CannotGetJdbcConnectionException e) { + LogUtil.FATAL_LOG.error("[db-error] " + e.toString(), e); + throw e; + } + } + } diff --git a/console-ui/src/pages/ConfigurationManagement/HistoryRollback/HistoryRollback.js b/console-ui/src/pages/ConfigurationManagement/HistoryRollback/HistoryRollback.js index 0f15d7d9b95..ffec90a5aba 100644 --- a/console-ui/src/pages/ConfigurationManagement/HistoryRollback/HistoryRollback.js +++ b/console-ui/src/pages/ConfigurationManagement/HistoryRollback/HistoryRollback.js @@ -16,7 +16,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { ConfigProvider, Field, Form, Input, Loading, Pagination, Table } from '@alifd/next'; +import { ConfigProvider, Field, Form, Loading, Pagination, Select, Table } from '@alifd/next'; import RegionGroup from 'components/RegionGroup'; import { getParams, setParams, request } from '@/globalLib'; @@ -94,6 +94,7 @@ class HistoryRollback extends React.Component { } this.getData(); + this.getConfigList(); } getData(pageNo = 1) { @@ -204,6 +205,35 @@ class HistoryRollback extends React.Component { ); } + getConfigList() { + const { locale = {} } = this.props; + this.tenant = getParams('namespace') || ''; // 为当前实例保存tenant参数 + const self = this; + request({ + url: `v1/cs/history/configs?tenant=${this.tenant}`, + success(result) { + if (result != null) { + const dataIdList = []; + const groupList = []; + for (let i = 0; i < result.length; i++) { + dataIdList.push({ + value: result[i].dataId, + label: result[i].dataId, + }); + groupList.push({ + value: result[i].group, + label: result[i].group, + }); + } + self.setState({ + dataIds: dataIdList, + groups: groupList, + }); + } + }, + }); + } + render() { const { locale = {} } = this.props; const { init } = this.field; @@ -224,9 +254,21 @@ class HistoryRollback extends React.Component {
- { + const { dataIds } = this.state; + if (!dataIds.includes(val)) { + this.setState({ dataIds: dataIds.concat(val) }); + } + }} {...this.init('dataId', { rules: [ { @@ -238,9 +280,21 @@ class HistoryRollback extends React.Component { /> - { + const { groups } = this.state; + if (!groups.includes(val)) { + this.setState({ groups: groups.concat(val) }); + } + }} {...this.init('group', { rules: [ { @@ -251,7 +305,6 @@ class HistoryRollback extends React.Component { })} /> -