Commit 1dc932fa by Nepxion

增加批量更新和清除版本

parent dfeb7e02
...@@ -101,19 +101,19 @@ public class ConsoleEndpoint implements MvcEndpoint { ...@@ -101,19 +101,19 @@ public class ConsoleEndpoint implements MvcEndpoint {
} }
@RequestMapping(path = "/version/update/{serviceId}", method = RequestMethod.POST) @RequestMapping(path = "/version/update/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量更新服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "POST") @ApiOperation(value = "批量更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> versionUpdate(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody @ApiParam(value = "版本号", required = true) String version) { public ResponseEntity<?> versionUpdate(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) {
return executeVersionUpdate(serviceId, version); return executeVersionUpdate(serviceId, version);
} }
@RequestMapping(path = "/version/clear/{serviceId}", method = RequestMethod.GET) @RequestMapping(path = "/version/clear/{serviceId}", method = RequestMethod.POST)
@ApiOperation(value = "批量清除服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET") @ApiOperation(value = "批量清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> versionClear(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId) { public ResponseEntity<?> versionClear(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId, @RequestBody @ApiParam(value = "版本号,指localVersion,可以为空") String version) {
return executeVersionClear(serviceId); return executeVersionClear(serviceId, version);
} }
public List<String> getServices() { public List<String> getServices() {
...@@ -171,13 +171,15 @@ public class ConsoleEndpoint implements MvcEndpoint { ...@@ -171,13 +171,15 @@ public class ConsoleEndpoint implements MvcEndpoint {
ConsoleErrorHandler errorHandler = (ConsoleErrorHandler) consoleRestTemplate.getErrorHandler(); ConsoleErrorHandler errorHandler = (ConsoleErrorHandler) consoleRestTemplate.getErrorHandler();
result = errorHandler.getCause(); result = errorHandler.getCause();
} }
stringBuilder.append("Rule sent, serviceId=").append(serviceId).append(", url=").append(url).append(", result=").append(result).append("\n"); stringBuilder.append("Config updated, serviceId=").append(serviceId).append(", url=").append(url).append(", result=").append(result).append("\n");
} }
String result = stringBuilder.toString(); String result = stringBuilder.toString();
if (result.contains("\n")) {
result = result.substring(0, result.lastIndexOf("\n")); result = result.substring(0, result.lastIndexOf("\n"));
}
LOG.info("\n{}", result); LOG.info("Config updated result:\n{}", result);
return ResponseEntity.ok().body(result); return ResponseEntity.ok().body(result);
} }
...@@ -197,18 +199,20 @@ public class ConsoleEndpoint implements MvcEndpoint { ...@@ -197,18 +199,20 @@ public class ConsoleEndpoint implements MvcEndpoint {
ConsoleErrorHandler errorHandler = (ConsoleErrorHandler) consoleRestTemplate.getErrorHandler(); ConsoleErrorHandler errorHandler = (ConsoleErrorHandler) consoleRestTemplate.getErrorHandler();
result = errorHandler.getCause(); result = errorHandler.getCause();
} }
stringBuilder.append("Version sent, serviceId=").append(serviceId).append(", url=").append(url).append(", result=").append(result).append("\n"); stringBuilder.append("Version updated, serviceId=").append(serviceId).append(", url=").append(url).append(", result=").append(result).append("\n");
} }
String result = stringBuilder.toString(); String result = stringBuilder.toString();
if (result.contains("\n")) {
result = result.substring(0, result.lastIndexOf("\n")); result = result.substring(0, result.lastIndexOf("\n"));
}
LOG.info("\n{}", result); LOG.info("Version updated result:\n{}", result);
return ResponseEntity.ok().body(result); return ResponseEntity.ok().body(result);
} }
private ResponseEntity<?> executeVersionClear(String serviceId) { private ResponseEntity<?> executeVersionClear(String serviceId, String version) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
List<ServiceInstance> serviceInstances = getInstances(serviceId); List<ServiceInstance> serviceInstances = getInstances(serviceId);
...@@ -217,19 +221,21 @@ public class ConsoleEndpoint implements MvcEndpoint { ...@@ -217,19 +221,21 @@ public class ConsoleEndpoint implements MvcEndpoint {
int port = serviceInstance.getPort(); int port = serviceInstance.getPort();
String url = "http://" + host + ":" + port + "/version/clear"; String url = "http://" + host + ":" + port + "/version/clear";
String result = consoleRestTemplate.getForEntity(url, String.class).getBody(); String result = consoleRestTemplate.postForEntity(url, version, String.class).getBody();
if (!StringUtils.equals(result, "OK")) { if (!StringUtils.equals(result, "OK")) {
ConsoleErrorHandler errorHandler = (ConsoleErrorHandler) consoleRestTemplate.getErrorHandler(); ConsoleErrorHandler errorHandler = (ConsoleErrorHandler) consoleRestTemplate.getErrorHandler();
result = errorHandler.getCause(); result = errorHandler.getCause();
} }
stringBuilder.append("Version sent, serviceId=").append(serviceId).append(", url=").append(url).append(", result=").append(result).append("\n"); stringBuilder.append("Version cleared, serviceId=").append(serviceId).append(", url=").append(url).append(", result=").append(result).append("\n");
} }
String result = stringBuilder.toString(); String result = stringBuilder.toString();
if (result.contains("\n")) {
result = result.substring(0, result.lastIndexOf("\n")); result = result.substring(0, result.lastIndexOf("\n"));
}
LOG.info("\n{}", result); LOG.info("Version cleared result:\n{}", result);
return ResponseEntity.ok().body(result); return ResponseEntity.ok().body(result);
} }
......
...@@ -31,6 +31,7 @@ import org.springframework.web.bind.annotation.ResponseBody; ...@@ -31,6 +31,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter; import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
import com.nepxion.discovery.plugin.framework.context.PluginContextAware; import com.nepxion.discovery.plugin.framework.context.PluginContextAware;
import com.nepxion.discovery.plugin.framework.event.PluginEventWapper; import com.nepxion.discovery.plugin.framework.event.PluginEventWapper;
import com.nepxion.discovery.plugin.framework.event.VersionClearedEvent; import com.nepxion.discovery.plugin.framework.event.VersionClearedEvent;
...@@ -50,31 +51,52 @@ public class VersionEndpoint implements MvcEndpoint { ...@@ -50,31 +51,52 @@ public class VersionEndpoint implements MvcEndpoint {
private PluginEventWapper pluginEventWapper; private PluginEventWapper pluginEventWapper;
@RequestMapping(path = "/version/update", method = RequestMethod.POST) @RequestMapping(path = "/version/update", method = RequestMethod.POST)
@ApiOperation(value = "更新服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "POST") @ApiOperation(value = "更新服务的动态版本", notes = "根据指定的localVersion更新服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接更新服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> update(@RequestBody @ApiParam(value = "版本号", required = true) String version) { public ResponseEntity<?> update(@RequestBody @ApiParam(value = "版本号,格式为[dynamicVersion]或者[dynamicVersion];[localVersion]", required = true) String version) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) { if (!discoveryControlEnabled) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled");
} }
pluginEventWapper.fireVersionUpdated(new VersionUpdatedEvent(version), true); if (StringUtils.isEmpty(version)) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Version can't be null or empty");
}
String dynamicVersion = null;
String localVersion = null;
String[] versionArray = StringUtils.split(version, PluginConstant.SEPARATE);
if (versionArray.length == 2) {
dynamicVersion = versionArray[0];
localVersion = versionArray[1];
} else if (versionArray.length == 1) {
dynamicVersion = versionArray[0];
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Invalid version format, it must be '[dynamicVersion]' or '[dynamicVersion];[localVersion]'");
}
pluginEventWapper.fireVersionUpdated(new VersionUpdatedEvent(dynamicVersion, localVersion), false);
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
@RequestMapping(path = "/version/clear", method = RequestMethod.GET) @RequestMapping(path = "/version/clear", method = RequestMethod.POST)
@ApiOperation(value = "清除服务的动态版本", notes = "", response = ResponseEntity.class, httpMethod = "GET") @ApiOperation(value = "清除服务的动态版本", notes = "根据指定的localVersion清除服务的dynamicVersion。如果输入的localVersion不匹配服务的localVersion,则忽略;如果如果输入的localVersion为空,则直接清除服务的dynamicVersion", response = ResponseEntity.class, httpMethod = "POST")
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public ResponseEntity<?> clear() { public ResponseEntity<?> clear(@RequestBody @ApiParam(value = "版本号,指localVersion,可以为空") String version) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) { if (!discoveryControlEnabled) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Discovery control is disabled");
} }
pluginEventWapper.fireVersionCleared(new VersionClearedEvent(), true); // 修复Swagger的一个Bug,当在Swagger界面不输入版本号的时候,传到后端变成了“{}”
if (StringUtils.isNotEmpty(version) && StringUtils.equals(version.trim(), "{}")) {
version = null;
}
pluginEventWapper.fireVersionCleared(new VersionClearedEvent(version), false);
return ResponseEntity.ok().body("OK"); return ResponseEntity.ok().body("OK");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment