Commit adc4c699 by Nepxion

修改Endpoint

parent e68c8be7
...@@ -9,33 +9,20 @@ package com.nepxion.discovery.plugin.admincenter.configuration; ...@@ -9,33 +9,20 @@ package com.nepxion.discovery.plugin.admincenter.configuration;
* @version 1.0 * @version 1.0
*/ */
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint; import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import com.nepxion.discovery.plugin.admincenter.endpoint.AdminEndpoint; import com.nepxion.discovery.plugin.admincenter.endpoint.ConfigEndpoint;
@Configuration @Configuration
// @ConditionalOnProperty(value = PluginConstant.SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED, matchIfMissing = true)
public class AdminAutoConfiguration { public class AdminAutoConfiguration {
// 在Consul下,@ConditionalOnBean(ServiceRegistry.class)为false,估计跟装载顺序有关,装载AdminEndpointConfiguration的时候,ServiceRegistry Bean还没产生
// @ConditionalOnBean(ServiceRegistry.class)
@ConditionalOnClass(Endpoint.class) @ConditionalOnClass(Endpoint.class)
protected static class AdminEndpointConfiguration { protected static class AdminEndpointConfiguration {
@Autowired(required = false)
private Registration registration;
@SuppressWarnings("rawtypes")
@Bean @Bean
public AdminEndpoint adminEndpoint(ServiceRegistry serviceRegistry) { public ConfigEndpoint configEndpoint() {
AdminEndpoint adminEndpoint = new AdminEndpoint(serviceRegistry); return new ConfigEndpoint();
adminEndpoint.setRegistration(registration);
return adminEndpoint;
} }
} }
} }
\ No newline at end of file
...@@ -17,9 +17,8 @@ import org.apache.commons.io.IOUtils; ...@@ -17,9 +17,8 @@ import org.apache.commons.io.IOUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.mvc.AbstractMvcEndpoint; import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.jmx.export.annotation.ManagedOperation; import org.springframework.jmx.export.annotation.ManagedOperation;
...@@ -33,16 +32,11 @@ import com.nepxion.discovery.plugin.framework.constant.PluginConstant; ...@@ -33,16 +32,11 @@ 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.entity.RuleEntity; import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
import com.nepxion.discovery.plugin.framework.event.PluginPublisher; import com.nepxion.discovery.plugin.framework.event.PluginPublisher;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
@ManagedResource(description = "Admin Endpoint") // 用法参照ServiceRegistryEndpoint和ServiceRegistryAutoConfiguration
@SuppressWarnings("unchecked") @ManagedResource(description = "Config Endpoint")
public class AdminEndpoint extends AbstractMvcEndpoint { public class ConfigEndpoint implements MvcEndpoint {
private static final Logger LOG = LoggerFactory.getLogger(AdminEndpoint.class); private static final Logger LOG = LoggerFactory.getLogger(ConfigEndpoint.class);
@SuppressWarnings("rawtypes")
private ServiceRegistry serviceRegistry;
private Registration registration;
@Autowired @Autowired
private PluginContextAware pluginContextAware; private PluginContextAware pluginContextAware;
...@@ -53,22 +47,11 @@ public class AdminEndpoint extends AbstractMvcEndpoint { ...@@ -53,22 +47,11 @@ public class AdminEndpoint extends AbstractMvcEndpoint {
@Autowired @Autowired
private RuleEntity ruleEntity; private RuleEntity ruleEntity;
@SuppressWarnings("rawtypes")
public AdminEndpoint(ServiceRegistry serviceRegistry) {
super("/admin", true, true);
this.serviceRegistry = serviceRegistry;
}
public void setRegistration(Registration registration) {
this.registration = registration;
}
// 发送规则配置信息 // 发送规则配置信息
@RequestMapping(path = "config", method = RequestMethod.POST) @RequestMapping(path = "send", method = RequestMethod.POST)
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public Object config(@RequestBody String config) { public ResponseEntity<?> send(@RequestBody String config) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled(); Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) { if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND); return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
...@@ -78,47 +61,38 @@ public class AdminEndpoint extends AbstractMvcEndpoint { ...@@ -78,47 +61,38 @@ public class AdminEndpoint extends AbstractMvcEndpoint {
InputStream inputStream = IOUtils.toInputStream(config, PluginConstant.ENCODING_UTF_8); InputStream inputStream = IOUtils.toInputStream(config, PluginConstant.ENCODING_UTF_8);
pluginPublisher.asyncPublish(inputStream); pluginPublisher.asyncPublish(inputStream);
} catch (IOException e) { } catch (IOException e) {
throw new PluginException("To input stream failed", e); LOG.error("Publish config failed", e);
return new ResponseEntity<>(Collections.singletonMap("Message", "Send config failed"), HttpStatus.OK);
} }
return "success"; // return ResponseEntity.ok().build();
return ResponseEntity.ok().body("OK");
} }
// 查看当前生效的规则配置信息 // 查看当前生效的规则配置信息
@RequestMapping(path = "view", method = RequestMethod.GET) @RequestMapping(path = "view", method = RequestMethod.GET)
@ResponseBody @ResponseBody
@ManagedOperation @ManagedOperation
public String view() { public ResponseEntity<String> view() {
return ruleEntity.getContent(); String content = ruleEntity.getContent();
}
@RequestMapping(path = "deregister", method = RequestMethod.POST) return ResponseEntity.ok().body(content);
@ResponseBody
@ManagedOperation
public Object deregister() {
if (registration == null) {
throw new PluginException("No registration found");
}
serviceRegistry.deregister(registration);
LOG.info("Deregister for serviceId={} successfully", registration.getServiceId());
return "success";
} }
@RequestMapping(path = "status", method = RequestMethod.POST) @Override
@ResponseBody public String getPath() {
@ManagedOperation return "/config";
public Object status(@RequestBody String status) { }
if (registration == null) {
throw new PluginException("No registration found");
}
serviceRegistry.setStatus(registration, status);
LOG.info("Set status for serviceId={} status={} successfully", registration.getServiceId(), status); @Override
public boolean isSensitive() {
return true;
}
return "success"; @Override
public Class<? extends Endpoint<?>> getEndpointType() {
return null;
} }
} }
\ No newline at end of file
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