[ISSUE #769]Service input box add serviceVersion and serviceGroup (#770)
* service input box add serviceVersion and serviceGroup
* change equals order
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/ConvertUtil.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/ConvertUtil.java
index 7179601..12b7dcc 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/ConvertUtil.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/ConvertUtil.java
@@ -50,22 +50,12 @@
}
public static String getIdFromDTO(BaseDTO baseDTO) {
- String id;
- if (StringUtils.isNotEmpty(baseDTO.getApplication())) {
- id = baseDTO.getApplication();
- } else {
- id = baseDTO.getService();
- }
- return id;
- }
-
- public static String getIdFromDTO(BaseDTO baseDTO, String serviceVersion, String serviceGroup) {
if (StringUtils.isNotEmpty(baseDTO.getApplication())) {
return baseDTO.getApplication();
}
// id format: "${class}:${version}:${group}"
- return new StringBuilder(baseDTO.getService()).append(COLON).append(null2EmptyString(serviceVersion))
- .append(COLON).append(null2EmptyString(serviceGroup)).toString();
+ return new StringBuilder(baseDTO.getService()).append(COLON).append(null2EmptyString(baseDTO.getServiceVersion()))
+ .append(COLON).append(null2EmptyString(baseDTO.getServiceGroup())).toString();
}
/**
@@ -81,6 +71,17 @@
}
}
+ public static void detachIdToService(String id, BaseDTO baseDTO) {
+ String[] detachResult = detachId(id);
+ baseDTO.setService(detachResult[0]);
+ if (detachResult.length > 1) {
+ baseDTO.setServiceVersion(detachResult[1]);
+ }
+ if (detachResult.length > 2) {
+ baseDTO.setServiceGroup(detachResult[2]);
+ }
+ }
+
public static String getServiceIdFromDTO(BaseDTO baseDTO, String serviceVersion, String serviceGroup,
boolean groupAsFolder) {
StringBuilder buf = new StringBuilder();
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/RouteUtils.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/RouteUtils.java
index cc1840e..1e502eb 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/RouteUtils.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/RouteUtils.java
@@ -353,7 +353,7 @@
public static ConditionRouteDTO createConditionRouteFromRule(RoutingRule routingRule) {
ConditionRouteDTO conditionRouteDTO = new ConditionRouteDTO();
- if (routingRule.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(routingRule.getScope())) {
conditionRouteDTO.setService(routingRule.getKey());
} else {
conditionRouteDTO.setApplication(routingRule.getKey());
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
index 4edaaf5..954172f 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
@@ -20,7 +20,7 @@
import org.apache.dubbo.admin.common.exception.ParamValidationException;
import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
import org.apache.dubbo.admin.common.exception.VersionValidationException;
-import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.model.dto.AccessDTO;
import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
import org.apache.dubbo.admin.service.ConsumerService;
@@ -61,7 +61,9 @@
@RequestMapping(method = RequestMethod.GET)
public List<AccessDTO> searchAccess(@RequestParam(required = false) String service,
@RequestParam(required = false) String application,
- @PathVariable String env) {
+ @PathVariable String env,
+ @RequestParam(required = false) String serviceVersion,
+ @RequestParam(required = false) String serviceGroup) {
if (StringUtils.isBlank(service) && StringUtils.isBlank(application)) {
throw new ParamValidationException("Either service or application is required");
}
@@ -70,7 +72,12 @@
if (StringUtils.isNotBlank(application)) {
accessDTO = routeService.findAccess(application);
} else {
- accessDTO = routeService.findAccess(service);
+ AccessDTO dto = new AccessDTO();
+ dto.setService(service);
+ dto.setServiceVersion(serviceVersion);
+ dto.setServiceGroup(serviceGroup);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ accessDTO = routeService.findAccess(id);
}
if (accessDTO != null) {
accessDTO.setEnabled(true);
@@ -81,20 +88,22 @@
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public AccessDTO detailAccess(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
AccessDTO accessDTO = routeService.findAccess(id);
+ if (accessDTO == null) {
+ throw new ResourceNotFoundException("Unknown ID!");
+ }
return accessDTO;
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
- public void deleteAccess(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
+ public boolean deleteAccess(@PathVariable String id, @PathVariable String env) {
routeService.deleteAccess(id);
+ return true;
}
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
- public void createAccess(@RequestBody AccessDTO accessDTO, @PathVariable String env) {
+ public boolean createAccess(@RequestBody AccessDTO accessDTO, @PathVariable String env) {
if (StringUtils.isBlank(accessDTO.getService()) && StringUtils.isBlank(accessDTO.getApplication())) {
throw new ParamValidationException("Either Service or application is required.");
}
@@ -106,16 +115,16 @@
throw new ParamValidationException("One of Blacklist/Whitelist is required.");
}
routeService.createAccess(accessDTO);
+ return true;
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
- public void updateAccess(@PathVariable String id, @RequestBody AccessDTO accessDTO, @PathVariable String env) {
-
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
+ public boolean updateAccess(@PathVariable String id, @RequestBody AccessDTO accessDTO, @PathVariable String env) {
ConditionRouteDTO route = routeService.findConditionRoute(id);
if (Objects.isNull(route)) {
throw new ResourceNotFoundException("Unknown ID!");
}
routeService.updateAccess(accessDTO);
+ return true;
}
}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
index 9bfc5c1..c19b8ed 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
@@ -23,10 +23,7 @@
import org.apache.dubbo.admin.common.exception.ParamValidationException;
import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
import org.apache.dubbo.admin.common.exception.VersionValidationException;
-import org.apache.dubbo.admin.common.util.Constants;
-import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
-import org.apache.dubbo.admin.model.dto.ConditionRouteResultDTO;
import org.apache.dubbo.admin.service.ConsumerService;
import org.apache.dubbo.admin.service.RouteService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -57,9 +54,7 @@
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
- public boolean createRule(@RequestBody ConditionRouteDTO routeDTO, @PathVariable String env,
- @RequestParam(required = false) String serviceVersion,
- @RequestParam(required = false) String serviceGroup) {
+ public boolean createRule(@RequestBody ConditionRouteDTO routeDTO, @PathVariable String env) {
String serviceName = routeDTO.getService();
String app = routeDTO.getApplication();
if (StringUtils.isEmpty(serviceName) && StringUtils.isEmpty(app)) {
@@ -68,44 +63,36 @@
if (StringUtils.isNotEmpty(app) && consumerService.findVersionInApplication(app).equals("2.6")) {
throw new VersionValidationException("dubbo 2.6 does not support application scope routing rule");
}
- routeService.createConditionRoute(routeDTO, serviceVersion, serviceGroup);
+ routeService.createConditionRoute(routeDTO);
return true;
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
- public boolean updateRule(@PathVariable String id, @RequestBody ConditionRouteDTO newConditionRoute, @PathVariable String env,
- @RequestParam(required = false) String serviceVersion,
- @RequestParam(required = false) String serviceGroup) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
- ConditionRouteDTO crDTO = new ConditionRouteDTO();
- String serviceName = newConditionRoute.getService();
- if (StringUtils.isNotEmpty(serviceName)) {
- id = ConvertUtil.getIdFromDTO(newConditionRoute, serviceVersion, serviceGroup);
- }
- crDTO.setService(id);
- ConditionRouteDTO oldConditionRoute = routeService.findConditionRoute(crDTO);
+ public boolean updateRule(@PathVariable String id, @RequestBody ConditionRouteDTO newConditionRoute, @PathVariable String env) {
+ ConditionRouteDTO oldConditionRoute = routeService.findConditionRoute(id);
if (oldConditionRoute == null) {
throw new ResourceNotFoundException("can not find route rule for: " + id);
}
- routeService.updateConditionRoute(newConditionRoute, serviceVersion, serviceGroup);
+ routeService.updateConditionRoute(newConditionRoute);
return true;
}
@RequestMapping(method = RequestMethod.GET)
- public List<ConditionRouteResultDTO> searchRoutes(@RequestParam(required = false) String application,
+ public List<ConditionRouteDTO> searchRoutes(@RequestParam(required = false) String application,
@RequestParam(required = false) String service, @PathVariable String env,
@RequestParam(required = false) String serviceVersion,
@RequestParam(required = false) String serviceGroup) {
- ConditionRouteResultDTO conditionRoute;
- List<ConditionRouteResultDTO> result = new ArrayList<>();
+ ConditionRouteDTO conditionRoute;
+ List<ConditionRouteDTO> result = new ArrayList<>();
ConditionRouteDTO crDTO = new ConditionRouteDTO();
if (StringUtils.isNotBlank(application)) {
- crDTO.setService(application);
+ crDTO.setApplication(application);
conditionRoute = routeService.findConditionRoute(crDTO);
} else if (StringUtils.isNotBlank(service)) {
crDTO.setService(service);
- String id = ConvertUtil.getIdFromDTO(crDTO, serviceVersion, serviceGroup);
- conditionRoute = routeService.findConditionRoute(id);
+ crDTO.setServiceVersion(serviceVersion);
+ crDTO.setServiceGroup(serviceGroup);
+ conditionRoute = routeService.findConditionRoute(crDTO);
} else {
throw new ParamValidationException("Either Service or application is required.");
}
@@ -116,18 +103,8 @@
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
- public ConditionRouteResultDTO detailRoute(@PathVariable String id, @PathVariable String env,
- @RequestParam(required = false) String serviceVersion,
- @RequestParam(required = false) String serviceGroup,
- @RequestParam String scope) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
- ConditionRouteDTO crDTO = new ConditionRouteDTO();
- crDTO.setService(id);
- if (Constants.SERVICE.equals(scope)) {
- id = ConvertUtil.getIdFromDTO(crDTO, serviceVersion, serviceGroup);
- crDTO.setService(id);
- }
- ConditionRouteResultDTO conditionRoute = routeService.findConditionRoute(crDTO);
+ public ConditionRouteDTO detailRoute(@PathVariable String id, @PathVariable String env) {
+ ConditionRouteDTO conditionRoute = routeService.findConditionRoute(id);
if (conditionRoute == null || conditionRoute.getConditions() == null) {
throw new ResourceNotFoundException("Unknown ID!");
}
@@ -135,50 +112,20 @@
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
- public boolean deleteRoute(@PathVariable String id, @PathVariable String env,
- @RequestParam(required = false) String serviceVersion,
- @RequestParam(required = false) String serviceGroup,
- @RequestParam String scope) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
- ConditionRouteDTO crDTO = new ConditionRouteDTO();
- crDTO.setService(id);
- if (Constants.SERVICE.equals(scope)) {
- id = ConvertUtil.getIdFromDTO(crDTO, serviceVersion, serviceGroup);
- crDTO.setService(id);
- }
- routeService.deleteConditionRoute(crDTO);
+ public boolean deleteRoute(@PathVariable String id, @PathVariable String env) {
+ routeService.deleteConditionRoute(id);
return true;
}
@RequestMapping(value = "/enable/{id}", method = RequestMethod.PUT)
- public boolean enableRoute(@PathVariable String id, @PathVariable String env,
- @RequestParam(required = false) String serviceVersion,
- @RequestParam(required = false) String serviceGroup,
- @RequestParam String scope) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
- ConditionRouteDTO crDTO = new ConditionRouteDTO();
- crDTO.setService(id);
- if (Constants.SERVICE.equals(scope)) {
- id = ConvertUtil.getIdFromDTO(crDTO, serviceVersion, serviceGroup);
- crDTO.setService(id);
- }
- routeService.enableConditionRoute(crDTO);
+ public boolean enableRoute(@PathVariable String id) {
+ routeService.enableConditionRoute(id);
return true;
}
@RequestMapping(value = "/disable/{id}", method = RequestMethod.PUT)
- public boolean disableRoute(@PathVariable String id, @PathVariable String env,
- @RequestParam(required = false) String serviceVersion,
- @RequestParam(required = false) String serviceGroup,
- @RequestParam String scope) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
- ConditionRouteDTO crDTO = new ConditionRouteDTO();
- crDTO.setService(id);
- if (Constants.SERVICE.equals(scope)) {
- id = ConvertUtil.getIdFromDTO(crDTO, serviceVersion, serviceGroup);
- crDTO.setService(id);
- }
- routeService.disableConditionRoute(crDTO);
+ public boolean disableRoute(@PathVariable String id, @PathVariable String env) {
+ routeService.disableConditionRoute(id);
return true;
}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
index d0f525e..b6cf124 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
@@ -23,7 +23,7 @@
import org.apache.dubbo.admin.common.exception.ParamValidationException;
import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
import org.apache.dubbo.admin.common.exception.VersionValidationException;
-import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.model.dto.BalancingDTO;
import org.apache.dubbo.admin.service.OverrideService;
import org.apache.dubbo.admin.service.ProviderService;
@@ -73,7 +73,6 @@
if (id == null) {
throw new ParamValidationException("Unknown ID!");
}
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
BalancingDTO balancing = overrideService.findBalance(id);
if (balancing == null) {
throw new ResourceNotFoundException("Unknown ID!");
@@ -86,7 +85,9 @@
@RequestMapping(method = RequestMethod.GET)
public List<BalancingDTO> searchLoadbalances(@RequestParam(required = false) String service,
@RequestParam(required = false) String application,
- @PathVariable String env) {
+ @PathVariable String env,
+ @RequestParam(required = false) String serviceVersion,
+ @RequestParam(required = false) String serviceGroup) {
if (StringUtils.isBlank(service) && StringUtils.isBlank(application)) {
throw new ParamValidationException("Either service or application is required");
@@ -95,7 +96,12 @@
if (StringUtils.isNotBlank(application)) {
balancingDTO = overrideService.findBalance(application);
} else {
- balancingDTO = overrideService.findBalance(service);
+ BalancingDTO dto = new BalancingDTO();
+ dto.setService(service);
+ dto.setServiceVersion(serviceVersion);
+ dto.setServiceGroup(serviceGroup);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ balancingDTO = overrideService.findBalance(id);
}
List<BalancingDTO> balancingDTOS = new ArrayList<>();
if (balancingDTO != null) {
@@ -106,7 +112,6 @@
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public BalancingDTO detailLoadBalance(@PathVariable String id, @PathVariable String env) throws ParamValidationException {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
BalancingDTO balancingDTO = overrideService.findBalance(id);
if (balancingDTO == null) {
throw new ResourceNotFoundException("Unknown ID!");
@@ -119,7 +124,6 @@
if (id == null) {
throw new IllegalArgumentException("Argument of id is null!");
}
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
overrideService.deleteBalance(id);
return true;
}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
index 39667d9..6e2cfbe 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/OverridesController.java
@@ -23,7 +23,7 @@
import org.apache.dubbo.admin.common.exception.ParamValidationException;
import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
import org.apache.dubbo.admin.common.exception.VersionValidationException;
-import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.model.dto.DynamicConfigDTO;
import org.apache.dubbo.admin.service.OverrideService;
import org.apache.dubbo.admin.service.ProviderService;
@@ -70,7 +70,6 @@
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public boolean updateOverride(@PathVariable String id, @RequestBody DynamicConfigDTO overrideDTO, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
DynamicConfigDTO old = overrideService.findOverride(id);
if (old == null) {
throw new ResourceNotFoundException("Unknown ID!");
@@ -82,11 +81,18 @@
@RequestMapping(method = RequestMethod.GET)
public List<DynamicConfigDTO> searchOverride(@RequestParam(required = false) String service,
@RequestParam(required = false) String application,
- @PathVariable String env) {
- DynamicConfigDTO override = null;
+ @PathVariable String env,
+ @RequestParam(required = false) String serviceVersion,
+ @RequestParam(required = false) String serviceGroup) {
+ DynamicConfigDTO override;
List<DynamicConfigDTO> result = new ArrayList<>();
if (StringUtils.isNotBlank(service)) {
- override = overrideService.findOverride(service);
+ DynamicConfigDTO configDTO = new DynamicConfigDTO();
+ configDTO.setService(service);
+ configDTO.setServiceVersion(serviceVersion);
+ configDTO.setServiceGroup(serviceGroup);
+ String id = ConvertUtil.getIdFromDTO(configDTO);
+ override = overrideService.findOverride(id);
} else if(StringUtils.isNotBlank(application)){
override = overrideService.findOverride(application);
} else {
@@ -100,34 +106,27 @@
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public DynamicConfigDTO detailOverride(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
DynamicConfigDTO override = overrideService.findOverride(id);
if (override == null) {
throw new ResourceNotFoundException("Unknown ID!");
}
-
return override;
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public boolean deleteOverride(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
overrideService.deleteOverride(id);
return true;
}
@RequestMapping(value = "/enable/{id}", method = RequestMethod.PUT)
public boolean enableRoute(@PathVariable String id, @PathVariable String env) {
-
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
overrideService.enableOverride(id);
return true;
}
@RequestMapping(value = "/disable/{id}", method = RequestMethod.PUT)
public boolean disableRoute(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
-
overrideService.disableOverride(id);
return true;
}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
index d6cbc4c..4be7d02 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/WeightController.java
@@ -23,7 +23,7 @@
import org.apache.dubbo.admin.common.exception.ParamValidationException;
import org.apache.dubbo.admin.common.exception.ResourceNotFoundException;
import org.apache.dubbo.admin.common.exception.VersionValidationException;
-import org.apache.dubbo.admin.common.util.Constants;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.model.dto.WeightDTO;
import org.apache.dubbo.admin.service.OverrideService;
import org.apache.dubbo.admin.service.ProviderService;
@@ -72,7 +72,6 @@
if (id == null) {
throw new ParamValidationException("Unknown ID!");
}
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
WeightDTO weight = overrideService.findWeight(id);
if (weight == null) {
throw new ResourceNotFoundException("Unknown ID!");
@@ -84,7 +83,9 @@
@RequestMapping(method = RequestMethod.GET)
public List<WeightDTO> searchWeight(@RequestParam(required = false) String service,
@RequestParam(required = false) String application,
- @PathVariable String env) {
+ @PathVariable String env,
+ @RequestParam(required = false) String serviceVersion,
+ @RequestParam(required = false) String serviceGroup) {
if (StringUtils.isBlank(service) && StringUtils.isBlank(application)) {
throw new ParamValidationException("Either service or application is required");
}
@@ -92,7 +93,12 @@
if (StringUtils.isNotBlank(application)) {
weightDTO = overrideService.findWeight(application);
} else {
- weightDTO = overrideService.findWeight(service);
+ WeightDTO dto = new WeightDTO();
+ dto.setService(service);
+ dto.setServiceVersion(serviceVersion);
+ dto.setServiceGroup(serviceGroup);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ weightDTO = overrideService.findWeight(id);
}
List<WeightDTO> weightDTOS = new ArrayList<>();
if (weightDTO != null) {
@@ -104,7 +110,6 @@
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public WeightDTO detailWeight(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
WeightDTO weightDTO = overrideService.findWeight(id);
if (weightDTO == null) {
throw new ResourceNotFoundException("Unknown ID!");
@@ -114,7 +119,6 @@
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public boolean deleteWeight(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
overrideService.deleteWeight(id);
return true;
}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/BaseDTO.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/BaseDTO.java
index 223b25f..61f1f92 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/BaseDTO.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/BaseDTO.java
@@ -24,6 +24,9 @@
public abstract class BaseDTO {
private String application;
private String service;
+ private String id;
+ private String serviceVersion;
+ private String serviceGroup;
public String getApplication() {
return application;
@@ -40,4 +43,28 @@
public void setService(String service) {
this.service = service;
}
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getServiceVersion() {
+ return serviceVersion;
+ }
+
+ public void setServiceVersion(String serviceVersion) {
+ this.serviceVersion = serviceVersion;
+ }
+
+ public String getServiceGroup() {
+ return serviceGroup;
+ }
+
+ public void setServiceGroup(String serviceGroup) {
+ this.serviceGroup = serviceGroup;
+ }
}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/ConditionRouteResultDTO.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/ConditionRouteResultDTO.java
deleted file mode 100644
index 2f9d247..0000000
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/model/dto/ConditionRouteResultDTO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.admin.model.dto;
-
-
-public class ConditionRouteResultDTO extends ConditionRouteDTO {
- private String serviceVersion;
- private String serviceGroup;
- private String scope;
-
- public String getServiceVersion() {
- return serviceVersion;
- }
-
- public void setServiceVersion(String serviceVersion) {
- this.serviceVersion = serviceVersion;
- }
-
- public String getServiceGroup() {
- return serviceGroup;
- }
-
- public void setServiceGroup(String serviceGroup) {
- this.serviceGroup = serviceGroup;
- }
-
- public String getScope() {
- return scope;
- }
-
- public void setScope(String scope) {
- this.scope = scope;
- }
-}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java
index ef42f25..2807665 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/RouteService.java
@@ -18,7 +18,6 @@
import org.apache.dubbo.admin.model.dto.AccessDTO;
import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
-import org.apache.dubbo.admin.model.dto.ConditionRouteResultDTO;
import org.apache.dubbo.admin.model.dto.TagRouteDTO;
/**
@@ -27,11 +26,11 @@
*/
public interface RouteService {
- void createConditionRoute(ConditionRouteDTO conditionRoute, String serviceVersion, String serviceGroup);
+ void createConditionRoute(ConditionRouteDTO conditionRoute);
- void updateConditionRoute(ConditionRouteDTO newConditionRoute, String serviceVersion, String serviceGroup);
+ void updateConditionRoute(ConditionRouteDTO newConditionRoute);
- void deleteConditionRoute(ConditionRouteDTO conditionRoute);
+ void deleteConditionRoute(String id);
void deleteAccess(String id);
@@ -41,15 +40,15 @@
void updateAccess(AccessDTO accessDTO);
- void enableConditionRoute(ConditionRouteDTO conditionRoute);
+ void enableConditionRoute(String id);
- void disableConditionRoute(ConditionRouteDTO conditionRoute);
+ void disableConditionRoute(String id);
- ConditionRouteResultDTO findConditionRoute(ConditionRouteDTO crDTO);
+ ConditionRouteDTO findConditionRoute(ConditionRouteDTO crDTO);
- ConditionRouteResultDTO findConditionRoute(String id);
+ ConditionRouteDTO findConditionRoute(String id);
void createTagRoute(TagRouteDTO tagRoute);
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java
index e63e846..1bc018e 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/OverrideServiceImpl.java
@@ -142,7 +142,7 @@
}
//for 2.6
- if (overrideDTO.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
List<Override> overrides = convertDTOtoOldOverride(old);
for (Override o : overrides) {
registry.unregister(o.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
@@ -166,7 +166,7 @@
dynamicConfiguration.setConfig(path, YamlParser.dumpObject(override));
//2.6
- if (override.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(override.getScope())) {
List<Override> overrides = convertDTOtoOldOverride(old);
for (Override o : overrides) {
o.setEnabled(false);
@@ -193,7 +193,7 @@
dynamicConfiguration.setConfig(path, YamlParser.dumpObject(override));
//for 2.6
- if (override.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(override.getScope())) {
List<Override> overrides = convertDTOtoOldOverride(old);
for (Override o : overrides) {
o.setEnabled(true);
@@ -213,7 +213,14 @@
String config = dynamicConfiguration.getConfig(path);
if (config != null) {
OverrideDTO overrideDTO = YamlParser.loadObject(config, OverrideDTO.class);
- return OverrideUtils.createFromOverride(overrideDTO);
+ DynamicConfigDTO dynamicConfigDTO = OverrideUtils.createFromOverride(overrideDTO);
+ if (dynamicConfigDTO != null) {
+ dynamicConfigDTO.setId(id);
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
+ ConvertUtil.detachIdToService(id, dynamicConfigDTO);
+ }
+ }
+ return dynamicConfigDTO;
}
return null;
}
@@ -229,7 +236,7 @@
dynamicConfiguration.setConfig(path, YamlParser.dumpObject(overrideDTO));
//for 2.6
- if (scope.equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(scope)) {
registerWeight(weightDTO);
}
@@ -248,7 +255,7 @@
if (configs != null && configs.size() > 0) {
for (OverrideConfig overrideConfig : configs) {
if (Constants.WEIGHT.equals(overrideConfig.getType())) {
- if (overrideDTO.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
oldWeight = OverrideUtils.configtoWeightDTO(overrideConfig, scope, id);
}
int index = configs.indexOf(overrideConfig);
@@ -285,7 +292,7 @@
if (configs != null) {
for (OverrideConfig overrideConfig : configs) {
if (Constants.WEIGHT.equals(overrideConfig.getType())) {
- if (overrideDTO.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
oldConfig = overrideConfig;
}
configs.remove(overrideConfig);
@@ -320,6 +327,10 @@
for (OverrideConfig overrideConfig : configs) {
if (Constants.WEIGHT.equals(overrideConfig.getType())) {
WeightDTO weightDTO = OverrideUtils.configtoWeightDTO(overrideConfig, overrideDTO.getScope(), id);
+ weightDTO.setId(id);
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
+ ConvertUtil.detachIdToService(id, weightDTO);
+ }
return weightDTO;
}
}
@@ -340,7 +351,7 @@
//for 2.6
- if (scope.equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(scope)) {
registerBalancing(balancingDTO);
}
}
@@ -358,7 +369,7 @@
if (configs != null && configs.size() > 0) {
for (OverrideConfig overrideConfig : configs) {
if (Constants.BALANCING.equals(overrideConfig.getType())) {
- if (overrideDTO.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
oldBalancing = OverrideUtils.configtoBalancingDTO(overrideConfig, Constants.SERVICE, overrideDTO.getKey());
}
int index = configs.indexOf(overrideConfig);
@@ -393,7 +404,7 @@
if (configs != null) {
for (OverrideConfig overrideConfig : configs) {
if (Constants.BALANCING.equals(overrideConfig.getType())) {
- if (overrideDTO.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
oldConfig = overrideConfig;
}
configs.remove(overrideConfig);
@@ -426,6 +437,10 @@
for (OverrideConfig overrideConfig : configs) {
if (Constants.BALANCING.equals(overrideConfig.getType())) {
BalancingDTO balancingDTO = OverrideUtils.configtoBalancingDTO(overrideConfig, overrideDTO.getScope(), id);
+ balancingDTO.setId(id);
+ if (Constants.SERVICE.equals(overrideDTO.getScope())) {
+ ConvertUtil.detachIdToService(id, balancingDTO);
+ }
return balancingDTO;
}
}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
index a365eef..788c7d3 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
@@ -24,14 +24,12 @@
import org.apache.dubbo.admin.model.domain.Route;
import org.apache.dubbo.admin.model.dto.AccessDTO;
import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
-import org.apache.dubbo.admin.model.dto.ConditionRouteResultDTO;
import org.apache.dubbo.admin.model.dto.TagRouteDTO;
import org.apache.dubbo.admin.model.store.RoutingRule;
import org.apache.dubbo.admin.model.store.TagRoute;
import org.apache.dubbo.admin.service.RouteService;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.utils.StringUtils;
-import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import java.util.LinkedList;
@@ -43,8 +41,8 @@
private String prefix = Constants.CONFIG_KEY;
@Override
- public void createConditionRoute(ConditionRouteDTO conditionRoute, String serviceVersion, String serviceGroup) {
- String id = ConvertUtil.getIdFromDTO(conditionRoute, serviceVersion, serviceGroup);
+ public void createConditionRoute(ConditionRouteDTO conditionRoute) {
+ String id = ConvertUtil.getIdFromDTO(conditionRoute);
String path = getPath(id, Constants.CONDITION_ROUTE);
String existConfig = dynamicConfiguration.getConfig(path);
RoutingRule existRule = null;
@@ -65,8 +63,8 @@
}
@Override
- public void updateConditionRoute(ConditionRouteDTO newConditionRoute, String serviceVersion, String serviceGroup) {
- String id = ConvertUtil.getIdFromDTO(newConditionRoute, serviceVersion, serviceGroup);
+ public void updateConditionRoute(ConditionRouteDTO newConditionRoute) {
+ String id = ConvertUtil.getIdFromDTO(newConditionRoute);
String path = getPath(id, Constants.CONDITION_ROUTE);
String existConfig = dynamicConfiguration.getConfig(path);
if (existConfig == null) {
@@ -89,8 +87,7 @@
}
@Override
- public void deleteConditionRoute(ConditionRouteDTO conditionRoute) {
- String id = ConvertUtil.getIdFromDTO(conditionRoute);
+ public void deleteConditionRoute(String id) {
String path = getPath(id, Constants.CONDITION_ROUTE);
String config = dynamicConfiguration.getConfig(path);
@@ -107,7 +104,7 @@
}
//for 2.6
- if (route.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(route.getScope())) {
RoutingRule originRule = YamlParser.loadObject(config, RoutingRule.class);
ConditionRouteDTO conditionRouteDTO = RouteUtils.createConditionRouteFromRule(originRule);
for (Route old : convertRouteToOldRoute(conditionRouteDTO)) {
@@ -131,7 +128,7 @@
dynamicConfiguration.setConfig(path, YamlParser.dumpObject(ruleDTO));
}
//2.6
- if (ruleDTO.getScope().equals(Constants.SERVICE) && blackWhiteList.size() > 0) {
+ if (Constants.SERVICE.equals(ruleDTO.getScope()) && blackWhiteList.size() > 0) {
Route route = RouteUtils.convertBlackWhiteListtoRoute(blackWhiteList, Constants.SERVICE, id);
registry.unregister(route.toUrl());
}
@@ -180,7 +177,12 @@
if (config != null) {
RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
List<String> blackWhiteList = RouteUtils.filterBlackWhiteListFromConditions(ruleDTO.getConditions());
- return RouteUtils.convertToAccessDTO(blackWhiteList, ruleDTO.getScope(), ruleDTO.getKey());
+ AccessDTO accessDTO = RouteUtils.convertToAccessDTO(blackWhiteList, ruleDTO.getScope(), ruleDTO.getKey());
+ accessDTO.setId(id);
+ if (Constants.SERVICE.equals(ruleDTO.getScope())) {
+ ConvertUtil.detachIdToService(id, accessDTO);
+ }
+ return accessDTO;
}
return null;
}
@@ -211,22 +213,21 @@
}
@Override
- public void enableConditionRoute(ConditionRouteDTO conditionRoute) {
- String id = ConvertUtil.getIdFromDTO(conditionRoute);
+ public void enableConditionRoute(String id) {
String path = getPath(id, Constants.CONDITION_ROUTE);
String config = dynamicConfiguration.getConfig(path);
if (config != null) {
RoutingRule ruleDTO = YamlParser.loadObject(config, RoutingRule.class);
- if (ruleDTO.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(ruleDTO.getScope())) {
//for2.6
- for (Route oldRoute : convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(ruleDTO))) {
- URL oldURL = oldRoute.toUrl();
- registry.unregister(oldURL);
- oldURL = oldURL.addParameter("enabled", true);
- registry.register(oldURL);
- }
+ for (Route oldRoute : convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(ruleDTO))) {
+ URL oldURL = oldRoute.toUrl();
+ registry.unregister(oldURL);
+ oldURL = oldURL.addParameter("enabled", true);
+ registry.register(oldURL);
+ }
}
//2.7
@@ -237,15 +238,14 @@
}
@Override
- public void disableConditionRoute(ConditionRouteDTO conditionRoute) {
- String id = ConvertUtil.getIdFromDTO(conditionRoute);
+ public void disableConditionRoute(String id) {
String path = getPath(id, Constants.CONDITION_ROUTE);
String config = dynamicConfiguration.getConfig(path);
if (config != null) {
RoutingRule routeRule = YamlParser.loadObject(config, RoutingRule.class);
- if (routeRule.getScope().equals(Constants.SERVICE)) {
+ if (Constants.SERVICE.equals(routeRule.getScope())) {
//for 2.6
for (Route oldRoute : convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(routeRule))) {
URL oldURL = oldRoute.toUrl();
@@ -263,12 +263,12 @@
}
@Override
- public ConditionRouteResultDTO findConditionRoute(ConditionRouteDTO crDTO) {
+ public ConditionRouteDTO findConditionRoute(ConditionRouteDTO crDTO) {
return findConditionRoute(ConvertUtil.getIdFromDTO(crDTO));
}
@Override
- public ConditionRouteResultDTO findConditionRoute(String id) {
+ public ConditionRouteDTO findConditionRoute(String id) {
String path = getPath(id, Constants.CONDITION_ROUTE);
String config = dynamicConfiguration.getConfig(path);
if (config != null) {
@@ -278,17 +278,15 @@
if (org.apache.commons.lang3.StringUtils.isNotBlank(service)) {
conditionRouteDTO.setService(service.replace("*", "/"));
}
- ConditionRouteResultDTO result = new ConditionRouteResultDTO();
- BeanUtils.copyProperties(conditionRouteDTO, result);
- result.setScope(routingRule.getScope());
String[] detachResult = ConvertUtil.detachId(id);
if (detachResult.length > 1) {
- result.setServiceVersion(detachResult[1]);
+ conditionRouteDTO.setServiceVersion(detachResult[1]);
}
if (detachResult.length > 2) {
- result.setServiceGroup(detachResult[2]);
+ conditionRouteDTO.setServiceGroup(detachResult[2]);
}
- return result;
+ conditionRouteDTO.setId(id);
+ return conditionRouteDTO;
}
return null;
}
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
index 979ea81..c1f3de3 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
@@ -20,8 +20,9 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.model.dto.AccessDTO;
-import org.apache.dubbo.admin.model.dto.ConditionRouteResultDTO;
+import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
import org.apache.dubbo.admin.service.ConsumerService;
import org.apache.dubbo.admin.service.RouteService;
import org.junit.After;
@@ -79,7 +80,10 @@
// when service is present
String service = "serviceName";
- when(routeService.findAccess(service)).thenReturn(accessDTO);
+ AccessDTO dto = new AccessDTO();
+ dto.setService(service);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ when(routeService.findAccess(id)).thenReturn(accessDTO);
response = restTemplate.getForEntity(url("/api/{env}/rules/access?service={service}"), String.class, env, service);
exceptResponseBody = objectMapper.writeValueAsString(Collections.singletonList(accessDTO));
assertEquals(exceptResponseBody, response.getBody());
@@ -130,7 +134,7 @@
restTemplate.put(url("/api/{env}/rules/access/{id}"), accessDTO, env, id);
verify(routeService).findConditionRoute(id);
//
- ConditionRouteResultDTO conditionRouteDTO = mock(ConditionRouteResultDTO.class);
+ ConditionRouteDTO conditionRouteDTO = mock(ConditionRouteDTO.class);
when(routeService.findConditionRoute(id)).thenReturn(conditionRouteDTO);
restTemplate.put(url("/api/{env}/rules/access/{id}"), accessDTO, env, id);
verify(routeService).updateAccess(any(AccessDTO.class));
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
index 5cff7bb..6b21059 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
@@ -18,6 +18,7 @@
package org.apache.dubbo.admin.controller;
import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.common.util.YamlParser;
import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
import org.apache.dubbo.admin.model.store.RoutingRule;
@@ -130,9 +131,10 @@
dto.setConditions(newConditions);
dto.setService(service);
+ String id = ConvertUtil.getIdFromDTO(dto);
ResponseEntity<String> responseEntity = restTemplate.exchange(
- url("/api/{env}/rules/route/condition/{service}"), HttpMethod.PUT,
- new HttpEntity<>(dto, null), String.class, env, service
+ url("/api/{env}/rules/route/condition/{id}"), HttpMethod.PUT,
+ new HttpEntity<>(dto, null), String.class, env, id
);
assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK));
@@ -191,9 +193,12 @@
assertNotNull("zk path should not be null before deleting", zkClient.checkExists().forPath(path));
+ ConditionRouteDTO dto = new ConditionRouteDTO();
+ dto.setService(service);
+ String id = ConvertUtil.getIdFromDTO(dto);
ResponseEntity<String> responseEntity = restTemplate.exchange(
- url("/api/{env}/rules/route/condition/{service}" + "?scope=service"), HttpMethod.DELETE,
- null, String.class, env, service
+ url("/api/{env}/rules/route/condition/{id}" + "?scope=service"), HttpMethod.DELETE,
+ null, String.class, env, id
);
assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK));
@@ -251,8 +256,11 @@
zkClient.create().creatingParentContainersIfNeeded().forPath(path);
zkClient.setData().forPath(path, content.getBytes());
+ ConditionRouteDTO dto = new ConditionRouteDTO();
+ dto.setService(service);
+ String id = ConvertUtil.getIdFromDTO(dto);
ResponseEntity<ConditionRouteDTO> responseEntity = restTemplate.getForEntity(
- url("/api/{env}/rules/route/condition/{id}" + "?scope=service"), ConditionRouteDTO.class, env, service
+ url("/api/{env}/rules/route/condition/{id}" + "?scope=service"), ConditionRouteDTO.class, env, id
);
assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK));
@@ -310,7 +318,10 @@
RoutingRule rule = YamlParser.loadObject(updatedConfig, RoutingRule.class);
assertFalse(rule.isEnabled());
- restTemplate.put(url("/api/{env}/rules/route/condition/enable/{id}" + "?scope=service"), null, env, service);
+ ConditionRouteDTO dto = new ConditionRouteDTO();
+ dto.setService(service);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ restTemplate.put(url("/api/{env}/rules/route/condition/enable/{id}" + "?scope=service"), null, env, id);
bytes = zkClient.getData().forPath(path);
updatedConfig = new String(bytes);
@@ -368,7 +379,10 @@
RoutingRule rule = YamlParser.loadObject(updatedConfig, RoutingRule.class);
assertTrue(rule.isEnabled());
- restTemplate.put(url("/api/{env}/rules/route/condition/disable/{id}" + "?scope=service"), null, env, service);
+ ConditionRouteDTO dto = new ConditionRouteDTO();
+ dto.setService(service);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ restTemplate.put(url("/api/{env}/rules/route/condition/disable/{id}" + "?scope=service"), null, env, id);
bytes = zkClient.getData().forPath(path);
updatedConfig = new String(bytes);
@@ -397,7 +411,10 @@
RoutingRule rule = YamlParser.loadObject(updatedConfig, RoutingRule.class);
assertTrue(rule.isEnabled());
- restTemplate.put(url("/api/{env}/rules/route/condition/disable/{id}" + "?scope=application"), null, env, application);
+ ConditionRouteDTO dto = new ConditionRouteDTO();
+ dto.setApplication(application);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ restTemplate.put(url("/api/{env}/rules/route/condition/disable/{id}" + "?scope=application"), null, env, id);
bytes = zkClient.getData().forPath(path);
updatedConfig = new String(bytes);
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
index acade40..b47b610 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
@@ -19,6 +19,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
+import org.apache.dubbo.admin.common.util.ConvertUtil;
import org.apache.dubbo.admin.model.dto.BalancingDTO;
import org.apache.dubbo.admin.service.OverrideService;
import org.apache.dubbo.admin.service.ProviderService;
@@ -111,7 +112,10 @@
// service is valid
response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, service, null);
assertEquals(HttpStatus.OK, response.getStatusCode());
- verify(overrideService).findBalance(service);
+ BalancingDTO dto = new BalancingDTO();
+ dto.setService(service);
+ String id = ConvertUtil.getIdFromDTO(dto);
+ verify(overrideService).findBalance(id);
// application is valid
response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, null, application);
assertEquals(HttpStatus.OK, response.getStatusCode());
diff --git a/dubbo-admin-ui/src/components/governance/AccessControl.vue b/dubbo-admin-ui/src/components/governance/AccessControl.vue
index 157a120..c165510 100644
--- a/dubbo-admin-ui/src/components/governance/AccessControl.vue
+++ b/dubbo-admin-ui/src/components/governance/AccessControl.vue
@@ -53,6 +53,18 @@
</v-list-tile>
</v-list>
</v-menu>
+ <v-text-field
+ v-show="selected === 0"
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="serviceVersion4Search"
+ ></v-text-field>
+ <v-text-field
+ v-show="selected === 0"
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="serviceGroup4Search"
+ ></v-text-field>
<v-btn @click="submit" color="primary" large>{{$t('search')}}</v-btn>
</v-layout>
@@ -77,7 +89,7 @@
class="mb-2">{{$t('create')}}</v-btn>
</v-toolbar>
- <v-card-text class="pa-0" v-show="selected == 0">
+ <v-card-text class="pa-0" v-show="selected === 0">
<v-data-table :headers="serviceHeaders"
:items="accesses"
:loading="loading"
@@ -115,7 +127,7 @@
</template>
</v-data-table>
</v-card-text>
- <v-card-text class="pa-0" v-show="selected == 1">
+ <v-card-text class="pa-0" v-show="selected === 1">
<v-data-table :headers="appHeaders"
:items="accesses"
:loading="loading"
@@ -165,12 +177,29 @@
</v-card-title>
<v-card-text>
<v-form ref="modalForm">
- <v-text-field
- label="Service Unique ID"
- :hint="$t('dataIdHint')"
- :readonly="modal.readonly"
- v-model="modal.service"
- ></v-text-field>
+ <v-layout wrap>
+ <v-flex xs24 sm12 md8>
+ <v-text-field
+ label="Service class"
+ :hint="$t('dataIdClassHint')"
+ v-model="modal.service"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="modal.serviceVersion"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="modal.serviceGroup"
+ ></v-text-field>
+ </v-flex>
+ </v-layout>
<v-text-field
:label="$t('appName')"
:hint="$t('appNameHint')"
@@ -192,7 +221,7 @@
:label="$t('blackList')"
:hint="$t('blackListHint')"
v-model="modal.blackList"
- :readonly="modal.id != null">
+ :readonly="modal.readonly">
</v-text-field>
</v-flex>
</v-layout>
@@ -262,6 +291,8 @@
typeAhead: [],
input: null,
timerID: null,
+ serviceVersion4Search: '',
+ serviceGroup4Search: '',
modal: {
enable: false,
readonly: false,
@@ -270,6 +301,8 @@
click: () => {},
id: null,
service: null,
+ serviceVersion: '',
+ serviceGroup: '',
application: null,
content: '',
blackList: '',
@@ -360,7 +393,11 @@
if (this.selected === 0) {
this.$router.push({
path: 'access',
- query: {service: this.filter}
+ query: {
+ service: this.filter,
+ serviceVersion: this.serviceVersion4Search,
+ serviceGroup: this.serviceGroup4Search
+ }
})
} else if (this.selected === 1) {
this.$router.push({
@@ -369,7 +406,7 @@
})
}
}
- let url = '/rules/access/?' + type + '=' + this.filter
+ let url = '/rules/access/?' + type + '=' + this.filter + '&serviceVersion=' + this.serviceVersion4Search + '&serviceGroup=' + this.serviceGroup4Search
this.$axios.get(url)
.then(response => {
this.accesses = response.data
@@ -416,6 +453,8 @@
}
this.$axios.post('/rules/access', {
service: this.modal.service,
+ serviceVersion: this.modal.serviceVersion,
+ serviceGroup: this.modal.serviceGroup,
application: this.modal.application,
whitelist: whiteList,
blacklist: blackList
@@ -435,23 +474,16 @@
}).catch(error => this.showSnackbar('error', error.response.data.message))
},
toEdit (item, readonly) {
- let itemId = null
- if (this.selected === 0) {
- itemId = item.service
- } else {
- itemId = item.application
- }
- if (itemId.includes('/')) {
- itemId = itemId.replace('/', '*')
- }
Object.assign(this.modal, {
enable: true,
readonly: readonly,
title: 'Edit',
saveBtn: 'Update',
click: this.editItem,
- id: itemId,
+ id: item.id,
service: item.service,
+ serviceVersion: item.serviceVersion,
+ serviceGroup: item.serviceGroup,
application: item.application,
whiteList: item.whitelist,
blackList: item.blacklist
@@ -460,14 +492,22 @@
},
editItem () {
// let doc = yaml.load(this.modal.content)
- let blackList = this.modal.blackList.split(',')
- let whiteList = this.modal.whiteList.split(',')
+ let blackList = []
+ if (this.modal.blackList) {
+ blackList = this.modal.blackList.split(',')
+ }
+ let whiteList = []
+ if (this.modal.whiteList) {
+ whiteList = this.modal.whiteList.split(',')
+ }
let vm = this
this.$axios.put('/rules/access/' + this.modal.id, {
whitelist: whiteList,
blacklist: blackList,
application: this.modal.application,
- service: this.modal.service
+ service: this.modal.service,
+ serviceVersion: this.modal.serviceVersion,
+ serviceGroup: this.modal.serviceGroup
}).then(response => {
if (response.status === 200) {
@@ -485,20 +525,11 @@
}).catch(error => this.showSnackbar('error', error.response.data.message))
},
toDelete (item) {
- let itemId = null
- if (this.selected === 0) {
- itemId = item.service
- } else {
- itemId = item.application
- }
- if (itemId.includes('/')) {
- itemId = itemId.replace('/', '*')
- }
Object.assign(this.confirm, {
enable: true,
title: 'warnDeleteAccessControl',
- text: `Id: ${itemId}`,
- id: itemId
+ text: `Id: ${item.id}`,
+ id: item.id
})
},
deleteItem (id) {
@@ -536,14 +567,28 @@
this.$store.dispatch('loadServiceItems')
this.$store.dispatch('loadConsumerItems')
let query = this.$route.query
+ let queryServiceVersion = null
+ let queryServiceGroup = null
if ('service' in query) {
this.filter = query['service']
+ if (query.serviceVersion) {
+ queryServiceVersion = query.serviceVersion
+ }
+ if (query.serviceGroup) {
+ queryServiceGroup = query.serviceGroup
+ }
this.selected = 0
}
if ('application' in query) {
this.filter = query['application']
this.selected = 1
}
+ if (queryServiceVersion != null) {
+ this.serviceVersion4Search = query.serviceVersion
+ }
+ if (queryServiceGroup != null) {
+ this.serviceGroup4Search = query.serviceGroup
+ }
if (this.filter !== null) {
this.search()
}
diff --git a/dubbo-admin-ui/src/components/governance/LoadBalance.vue b/dubbo-admin-ui/src/components/governance/LoadBalance.vue
index 905a790..b950cbe 100644
--- a/dubbo-admin-ui/src/components/governance/LoadBalance.vue
+++ b/dubbo-admin-ui/src/components/governance/LoadBalance.vue
@@ -53,6 +53,18 @@
</v-list-tile>
</v-list>
</v-menu>
+ <v-text-field
+ v-show="selected === 0"
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="serviceVersion4Search"
+ ></v-text-field>
+ <v-text-field
+ v-show="selected === 0"
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="serviceGroup4Search"
+ ></v-text-field>
<v-btn @click="submit" color="primary" large>{{$t('search')}}</v-btn>
</v-layout>
@@ -70,7 +82,7 @@
<v-btn outline color="primary" @click.stop="openDialog" class="mb-2">{{$t('create')}}</v-btn>
</v-toolbar>
- <v-card-text class="pa-0" v-show="selected == 0">
+ <v-card-text class="pa-0" v-show="selected === 0">
<v-data-table
:headers="serviceHeaders"
:items="loadBalances"
@@ -92,7 +104,7 @@
</v-data-table>
</v-card-text>
- <v-card-text class="pa-0" v-show="selected == 1">
+ <v-card-text class="pa-0" v-show="selected === 1">
<v-data-table
:headers="appHeaders"
:items="loadBalances"
@@ -122,12 +134,29 @@
<span class="headline">{{$t('createNewLoadBalanceRule')}}</span>
</v-card-title>
<v-card-text >
- <v-text-field
- label="Service Unique ID"
- :hint="$t('dataIdHint')"
- v-model="service"
- :readonly="readonly"
- ></v-text-field>
+ <v-layout wrap>
+ <v-flex xs24 sm12 md8>
+ <v-text-field
+ label="Service class"
+ :hint="$t('dataIdClassHint')"
+ v-model="service"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="serviceVersion"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="serviceGroup"
+ ></v-text-field>
+ </v-flex>
+ </v-layout>
<v-text-field
:label="$t('appName')"
:hint="$t('appNameHint')"
@@ -213,6 +242,10 @@
warn: false,
application: '',
service: '',
+ serviceVersion4Search: '',
+ serviceGroup4Search: '',
+ serviceVersion: '',
+ serviceGroup: '',
warnTitle: '',
warnText: '',
warnStatus: {},
@@ -327,7 +360,7 @@
return
}
let type = this.items[this.selected].value
- let url = '/rules/balancing/?' + type + '=' + this.filter
+ let url = '/rules/balancing/?' + type + '=' + this.filter + '&serviceVersion=' + this.serviceVersion4Search + '&serviceGroup=' + this.serviceGroup4Search
this.$axios.get(url)
.then(response => {
this.loadBalances = response.data
@@ -374,6 +407,8 @@
}
let vm = this
balancing.service = this.service
+ balancing.serviceVersion = this.serviceVersion
+ balancing.serviceGroup = this.serviceGroup
balancing.application = this.application
balancing.methodName = this.rule.method
balancing.strategy = this.rule.strategy
@@ -419,15 +454,7 @@
}
},
itemOperation: function (icon, item) {
- let itemId = ''
- if (this.selected === 0) {
- itemId = item.service
- } else {
- itemId = item.application
- }
- if (itemId.includes('/')) {
- itemId = itemId.replace('/', '*')
- }
+ let itemId = item.id
switch (icon) {
case 'visibility':
this.$axios.get('/rules/balancing/' + itemId)
@@ -454,6 +481,8 @@
handleBalance: function (balancing, readonly) {
this.service = balancing.service
this.application = balancing.application
+ this.serviceVersion = balancing.serviceVersion
+ this.serviceGroup = balancing.serviceGroup
// delete balancing.service
// delete balancing.application
// delete balancing.id
@@ -514,11 +543,19 @@
this.$store.dispatch('loadAppItems')
this.ruleText = this.template
let query = this.$route.query
+ let queryServiceVersion = null
+ let queryServiceGroup = null
let filter = null
let vm = this
Object.keys(query).forEach(function (key) {
if (key === 'service') {
filter = query[key]
+ if (query.serviceVersion) {
+ queryServiceVersion = query.serviceVersion
+ }
+ if (query.serviceGroup) {
+ queryServiceGroup = query.serviceGroup
+ }
vm.selected = 0
}
if (key === 'application') {
@@ -526,6 +563,12 @@
vm.selected = 1
}
})
+ if (queryServiceVersion != null) {
+ this.serviceVersion4Search = query.serviceVersion
+ }
+ if (queryServiceGroup != null) {
+ this.serviceGroup4Search = query.serviceGroup
+ }
if (filter !== null) {
this.filter = filter
this.search(false)
diff --git a/dubbo-admin-ui/src/components/governance/Overrides.vue b/dubbo-admin-ui/src/components/governance/Overrides.vue
index 5ffedd4..629d142 100644
--- a/dubbo-admin-ui/src/components/governance/Overrides.vue
+++ b/dubbo-admin-ui/src/components/governance/Overrides.vue
@@ -53,6 +53,18 @@
</v-list-tile>
</v-list>
</v-menu>
+ <v-text-field
+ v-show="selected === 0"
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="serviceVersion4Search"
+ ></v-text-field>
+ <v-text-field
+ v-show="selected === 0"
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="serviceGroup4Search"
+ ></v-text-field>
<v-btn @click="submit" color="primary" large>{{$t('search')}}</v-btn>
</v-layout>
@@ -70,7 +82,7 @@
<v-btn outline color="primary" @click.stop="openDialog" class="mb-2">{{$t('create')}}</v-btn>
</v-toolbar>
- <v-card-text class="pa-0" v-show="selected == 0">
+ <v-card-text class="pa-0" v-show="selected === 0">
<v-data-table
:headers="serviceHeaders"
:items="serviceConfigs"
@@ -91,7 +103,7 @@
</v-data-table>
</v-card-text>
- <v-card-text class="pa-0" v-show="selected == 1">
+ <v-card-text class="pa-0" v-show="selected === 1">
<v-data-table
:headers="appHeaders"
:items="appConfigs"
@@ -120,11 +132,29 @@
<span class="headline">{{$t('createNewDynamicConfigRule')}}</span>
</v-card-title>
<v-card-text >
- <v-text-field
- label="Service Unique ID"
- hint="A service ID in form of group/service:version, group and version are optional"
- v-model="service"
- ></v-text-field>
+ <v-layout wrap>
+ <v-flex xs24 sm12 md8>
+ <v-text-field
+ label="Service class"
+ :hint="$t('dataIdClassHint')"
+ v-model="service"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="serviceVersion"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="serviceGroup"
+ ></v-text-field>
+ </v-flex>
+ </v-layout>
<v-text-field
label="Application Name"
hint="Application name the service belongs to"
@@ -194,6 +224,10 @@
application: '',
updateId: '',
service: '',
+ serviceVersion: '',
+ serviceGroup: '',
+ serviceVersion4Search: '',
+ serviceGroup4Search: '',
warnTitle: '',
warnText: '',
warnStatus: {},
@@ -282,7 +316,7 @@
return
}
let type = this.items[this.selected].value
- let url = '/rules/override/?' + type + '=' + this.filter
+ let url = '/rules/override/?' + type + '=' + this.filter + '&serviceVersion=' + this.serviceVersion4Search + '&serviceGroup=' + this.serviceGroup4Search
this.$axios.get(url)
.then(response => {
if (this.selected === 0) {
@@ -292,7 +326,11 @@
}
if (rewrite) {
if (this.selected === 0) {
- this.$router.push({path: 'config', query: {service: this.filter}})
+ this.$router.push({path: 'config', query: {
+ service: this.filter,
+ serviceVersion: this.serviceVersion4Search,
+ serviceGroup: this.serviceGroup4Search
+ }})
} else if (this.selected === 1) {
this.$router.push({path: 'config', query: {application: this.filter}})
}
@@ -331,6 +369,8 @@
}
override.service = this.service
override.application = this.application
+ override.serviceSerion = this.serviceVersion
+ override.serviceGroup = this.serviceGroup
let vm = this
if (this.updateId) {
if (this.updateId === 'close') {
@@ -373,15 +413,7 @@
}
},
itemOperation: function (icon, item) {
- let itemId = ''
- if (this.selected === 0) {
- itemId = item.service
- } else {
- itemId = item.application
- }
- if (itemId.includes('/')) {
- itemId = itemId.replace('/', '*')
- }
+ let itemId = item.id
switch (icon) {
case 'visibility':
this.$axios.get('/rules/override/' + itemId)
@@ -417,6 +449,8 @@
},
handleConfig: function (config, readonly) {
this.service = config.service
+ this.serviceVersion = config.serviceVersion
+ this.serviceGroup = config.serviceGroup
this.application = config.application
delete config.service
delete config.application
@@ -502,10 +536,18 @@
this.ruleText = this.template
let query = this.$route.query
let filter = null
+ let queryServiceVersion = null
+ let queryServiceGroup = null
let vm = this
Object.keys(query).forEach(function (key) {
if (key === 'service') {
filter = query[key]
+ if (query.serviceVersion) {
+ queryServiceVersion = query.serviceVersion
+ }
+ if (query.serviceGroup) {
+ queryServiceGroup = query.serviceGroup
+ }
vm.selected = 0
}
if (key === 'application') {
@@ -513,6 +555,12 @@
vm.selected = 1
}
})
+ if (queryServiceVersion != null) {
+ this.serviceVersion4Search = query.serviceVersion
+ }
+ if (queryServiceGroup != null) {
+ this.serviceGroup4Search = query.serviceGroup
+ }
if (filter !== null) {
this.filter = filter
this.search(false)
diff --git a/dubbo-admin-ui/src/components/governance/RoutingRule.vue b/dubbo-admin-ui/src/components/governance/RoutingRule.vue
index 4dbdd02..8217bdf 100644
--- a/dubbo-admin-ui/src/components/governance/RoutingRule.vue
+++ b/dubbo-admin-ui/src/components/governance/RoutingRule.vue
@@ -54,13 +54,13 @@
</v-list>
</v-menu>
<v-text-field
- v-show="selected == 0"
+ v-show="selected === 0"
label="Version"
:hint="$t('dataIdVersionHint')"
v-model="serviceVersion4Search"
></v-text-field>
<v-text-field
- v-show="selected == 0"
+ v-show="selected === 0"
label="Group"
:hint="$t('dataIdGroupHint')"
v-model="serviceGroup4Search"
@@ -81,7 +81,7 @@
<v-btn outline color="primary" @click.stop="openDialog" class="mb-2">{{$t('create')}}</v-btn>
</v-toolbar>
- <v-card-text class="pa-0" v-show="selected == 0">
+ <v-card-text class="pa-0" v-show="selected === 0">
<v-data-table
:headers="serviceHeaders"
:items="serviceRoutingRules"
@@ -91,6 +91,7 @@
<template slot="items" slot-scope="props">
<td class="text-xs-left">{{ props.item.service }}</td>
<td class="text-xs-left">{{ props.item.serviceGroup }}</td>
+ <td class="text-xs-left">{{ props.item.serviceVersion }}</td>
<td class="text-xs-left">{{ props.item.enabled }}</td>
<td class="text-xs-center px-0">
<v-tooltip bottom v-for="op in operations" :key="op.id">
@@ -103,7 +104,7 @@
</template>
</v-data-table>
</v-card-text>
- <v-card-text class="pa-0" v-show="selected == 1">
+ <v-card-text class="pa-0" v-show="selected === 1">
<v-data-table
:headers="appHeaders"
:items="appRoutingRules"
@@ -134,21 +135,21 @@
</v-card-title>
<v-card-text >
<v-layout wrap>
- <v-flex xs12 sm6 md4>
+ <v-flex xs24 sm12 md8>
<v-text-field
label="Service class"
:hint="$t('dataIdClassHint')"
v-model="service"
></v-text-field>
</v-flex>
- <v-flex xs12 sm6 md4>
+ <v-flex xs6 sm3 md2>
<v-text-field
label="Version"
:hint="$t('dataIdVersionHint')"
v-model="serviceVersion"
></v-text-field>
</v-flex>
- <v-flex xs12 sm6 md4>
+ <v-flex xs6 sm3 md2>
<v-text-field
label="Group"
:hint="$t('dataIdGroupHint')"
@@ -287,6 +288,12 @@
},
{
+ text: this.$t('version'),
+ value: 'group',
+ align: 'left'
+
+ },
+ {
text: this.$t('enabled'),
value: 'enabled',
sortable: false
@@ -384,12 +391,14 @@
const serviceVersion = this.serviceVersion == null ? '' : this.serviceVersion
const serviceGroup = this.serviceGroup == null ? '' : this.serviceGroup
rule.application = this.application
+ rule.serviceVersion = serviceVersion
+ rule.serviceGroup = serviceGroup
if (this.updateId !== '') {
if (this.updateId === 'close') {
this.closeDialog()
} else {
rule.id = this.updateId
- this.$axios.put('/rules/route/condition/' + rule.id + '?serviceVersion=' + serviceVersion + '&serviceGroup=' + serviceGroup, rule)
+ this.$axios.put('/rules/route/condition/' + rule.id, rule)
.then(response => {
if (response.status === 200) {
if (vm.service) {
@@ -407,7 +416,7 @@
})
}
} else {
- this.$axios.post('/rules/route/condition/' + '?serviceVersion=' + serviceVersion + '&serviceGroup=' + serviceGroup, rule)
+ this.$axios.post('/rules/route/condition/', rule)
.then(response => {
if (response.status === 201) {
if (vm.service) {
@@ -429,22 +438,13 @@
}
},
itemOperation: function (icon, item) {
- let itemId = ''
- if (this.selected === 0) {
- itemId = item.service
- } else {
- itemId = item.application
- }
- const oldItemId = itemId
- if (itemId.includes('/')) {
- itemId = itemId.replace('/', '*')
- }
+ const itemId = item.id
const serviceVersion = item.serviceVersion == null ? '' : item.serviceVersion
const serviceGroup = item.serviceGroup == null ? '' : item.serviceGroup
const scope = item.scope == null ? '' : item.scope
switch (icon) {
case 'visibility':
- this.$axios.get('/rules/route/condition/' + itemId + '?serviceVersion=' + serviceVersion + '&serviceGroup=' + serviceGroup + '&scope=' + scope)
+ this.$axios.get('/rules/route/condition/' + itemId)
.then(response => {
const conditionRoute = response.data
this.serviceVersion = conditionRoute.serviceVersion
@@ -458,7 +458,7 @@
})
break
case 'edit':
- this.$axios.get('/rules/route/condition/' + itemId + '?serviceVersion=' + serviceVersion + '&serviceGroup=' + serviceGroup + '&scope=' + scope)
+ this.$axios.get('/rules/route/condition/' + itemId)
.then(response => {
const conditionRoute = response.data
this.serviceVersion = conditionRoute.serviceVersion
@@ -472,7 +472,7 @@
})
break
case 'block':
- this.openWarn(' Are you sure to block Routing Rule', 'service: ' + oldItemId)
+ this.openWarn(' Are you sure to block Routing Rule', 'service: ' + itemId)
this.warnStatus.operation = 'disable'
this.warnStatus.id = itemId
this.warnStatus.serviceVersion = serviceVersion
@@ -480,7 +480,7 @@
this.warnStatus.scope = scope
break
case 'check_circle_outline':
- this.openWarn(' Are you sure to enable Routing Rule', 'service: ' + oldItemId)
+ this.openWarn(' Are you sure to enable Routing Rule', 'service: ' + itemId)
this.warnStatus.operation = 'enable'
this.warnStatus.id = itemId
this.warnStatus.serviceVersion = serviceVersion
@@ -488,7 +488,7 @@
this.warnStatus.scope = scope
break
case 'delete':
- this.openWarn('warnDeleteRouteRule', 'service: ' + oldItemId)
+ this.openWarn('warnDeleteRouteRule', 'service: ' + itemId)
this.warnStatus.operation = 'delete'
this.warnStatus.id = itemId
this.warnStatus.serviceVersion = serviceVersion
diff --git a/dubbo-admin-ui/src/components/governance/TagRule.vue b/dubbo-admin-ui/src/components/governance/TagRule.vue
index 5714861..7f82881 100644
--- a/dubbo-admin-ui/src/components/governance/TagRule.vue
+++ b/dubbo-admin-ui/src/components/governance/TagRule.vue
@@ -332,6 +332,8 @@
delete tagRoute.application
delete tagRoute.service
delete tagRoute.priority
+ delete tagRoute.serviceVersion
+ delete tagRoute.serviceGroup
this.ruleText = yaml.safeDump(tagRoute)
this.readonly = readonly
this.dialog = true
diff --git a/dubbo-admin-ui/src/components/governance/WeightAdjust.vue b/dubbo-admin-ui/src/components/governance/WeightAdjust.vue
index d530fbc..a104d91 100644
--- a/dubbo-admin-ui/src/components/governance/WeightAdjust.vue
+++ b/dubbo-admin-ui/src/components/governance/WeightAdjust.vue
@@ -53,6 +53,18 @@
</v-list-tile>
</v-list>
</v-menu>
+ <v-text-field
+ v-show="selected === 0"
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="serviceVersion4Search"
+ ></v-text-field>
+ <v-text-field
+ v-show="selected === 0"
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="serviceGroup4Search"
+ ></v-text-field>
<v-btn @click="submit" color="primary" large>{{$t('search')}}</v-btn>
</v-layout>
@@ -70,7 +82,7 @@
<v-btn outline color="primary" @click.stop="openDialog" class="mb-2">{{$t('create')}}</v-btn>
</v-toolbar>
- <v-card-text class="pa-0" v-show="selected == 0">
+ <v-card-text class="pa-0" v-show="selected === 0">
<v-data-table
:headers="serviceHeaders"
:items="weights"
@@ -91,7 +103,7 @@
</template>
</v-data-table>
</v-card-text>
- <v-card-text class="pa-0" v-show="selected == 1">
+ <v-card-text class="pa-0" v-show="selected === 1">
<v-data-table
:headers="appHeaders"
:items="weights"
@@ -121,12 +133,29 @@
<span class="headline">{{$t('createNewWeightRule')}}</span>
</v-card-title>
<v-card-text >
- <v-text-field
- label="Service Unique ID"
- :hint="$t('serviceIdHint')"
- v-model="service"
- :readonly="readonly"
- ></v-text-field>
+ <v-layout wrap>
+ <v-flex xs24 sm12 md8>
+ <v-text-field
+ label="Service class"
+ :hint="$t('dataIdClassHint')"
+ v-model="service"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Version"
+ :hint="$t('dataIdVersionHint')"
+ v-model="serviceVersion"
+ ></v-text-field>
+ </v-flex>
+ <v-flex xs6 sm3 md2>
+ <v-text-field
+ label="Group"
+ :hint="$t('dataIdGroupHint')"
+ v-model="serviceGroup"
+ ></v-text-field>
+ </v-flex>
+ </v-layout>
<v-text-field
:label="$t('appName')"
:hint="$t('appNameHint')"
@@ -219,6 +248,10 @@
typeAhead: [],
input: null,
timerID: null,
+ serviceVersion4Search: '',
+ serviceGroup4Search: '',
+ serviceVersion: '',
+ serviceGroup: '',
operations: [
{id: 0, icon: 'visibility', tooltip: 'view'},
{id: 1, icon: 'edit', tooltip: 'edit'},
@@ -313,7 +346,7 @@
return
}
let type = this.items[this.selected].value
- let url = '/rules/weight/?' + type + '=' + this.filter
+ let url = '/rules/weight/?' + type + '=' + this.filter + '&serviceVersion=' + this.serviceVersion4Search + '&serviceGroup=' + this.serviceGroup4Search
this.$axios.get(url)
.then(response => {
this.weights = response.data
@@ -360,6 +393,8 @@
return
}
weight.service = this.service
+ weight.serviceVersion = this.serviceVersion
+ weight.serviceGroup = this.serviceGroup
weight.application = this.application
weight.weight = this.rule.weight
weight.addresses = this.rule.address.split(',')
@@ -406,15 +441,7 @@
}
},
itemOperation: function (icon, item) {
- let itemId = ''
- if (this.selected === 0) {
- itemId = item.service
- } else {
- itemId = item.application
- }
- if (itemId.includes('/')) {
- itemId = itemId.replace('/', '*')
- }
+ let itemId = item.id
switch (icon) {
case 'visibility':
this.$axios.get('/rules/weight/' + itemId)
@@ -440,6 +467,8 @@
},
handleWeight: function (weight, readonly) {
this.service = weight.service
+ this.serviceVersion = weight.serviceVersion
+ this.serviceGroup = weight.serviceGroup
this.application = weight.application
// delete weight.service
// delete weight.application
@@ -490,11 +519,19 @@
this.$store.dispatch('loadAppItems')
this.ruleText = this.template
let query = this.$route.query
+ let queryServiceVersion = null
+ let queryServiceGroup = null
let filter = null
let vm = this
Object.keys(query).forEach(function (key) {
if (key === 'service') {
filter = query[key]
+ if (query.serviceVersion) {
+ queryServiceVersion = query.serviceVersion
+ }
+ if (query.serviceGroup) {
+ queryServiceGroup = query.serviceGroup
+ }
vm.selected = 0
}
if (key === 'application') {
@@ -502,6 +539,12 @@
vm.selected = 1
}
})
+ if (queryServiceVersion != null) {
+ this.serviceVersion4Search = query.serviceVersion
+ }
+ if (queryServiceGroup != null) {
+ this.serviceGroup4Search = query.serviceGroup
+ }
if (filter !== null) {
this.filter = filter
this.search(false)