Commit c45e7f5b by Nepxion

重构类结构

parent 60d60ed0
......@@ -29,8 +29,9 @@ public class AdminAutoConfiguration {
@Autowired(required = false)
private Registration registration;
@SuppressWarnings("rawtypes")
@Bean
public AdminEndpoint adminEndpoint(ServiceRegistry<?> serviceRegistry) {
public AdminEndpoint adminEndpoint(ServiceRegistry serviceRegistry) {
AdminEndpoint adminEndpoint = new AdminEndpoint(serviceRegistry);
adminEndpoint.setRegistration(registration);
......
......@@ -15,39 +15,43 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.AbstractMvcEndpoint;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.nepxion.discovery.plugin.framework.cache.PluginCache;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
@ManagedResource(description = "Admin endpoint")
public class AdminEndpoint implements MvcEndpoint, ApplicationContextAware, EnvironmentAware {
@ManagedResource(description = "Admin Endpoint")
@SuppressWarnings("unchecked")
public class AdminEndpoint extends AbstractMvcEndpoint implements ApplicationContextAware {
private static final Logger LOG = LoggerFactory.getLogger(AdminEndpoint.class);
private ConfigurableApplicationContext context;
private Environment environment;
private ServiceRegistry<?> serviceRegistry;
private ConfigurableApplicationContext applicationContext;
@SuppressWarnings("rawtypes")
private ServiceRegistry serviceRegistry;
private Registration registration;
@Autowired
private PluginCache pluginCache;
public AdminEndpoint(ServiceRegistry<?> serviceRegistry) {
@SuppressWarnings("rawtypes")
public AdminEndpoint(ServiceRegistry serviceRegistry) {
super("/admin", true, true);
this.serviceRegistry = serviceRegistry;
}
......@@ -55,44 +59,94 @@ public class AdminEndpoint implements MvcEndpoint, ApplicationContextAware, Envi
this.registration = registration;
}
@RequestMapping(path = "filter", method = RequestMethod.GET)
@RequestMapping(path = "blacklist", method = RequestMethod.GET)
@ResponseBody
@ManagedOperation
public Object filter(@RequestParam("serviceId") String serviceId, @RequestParam("ip") String ip) {
Boolean discoveryControlEnabled = environment.getProperty(PluginConstant.SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED, Boolean.class, Boolean.TRUE);
public Object blacklist(@RequestParam("serviceId") String serviceId, @RequestParam("ip") String ip) {
Boolean discoveryControlEnabled = getEnvironment().getProperty(PluginConstant.SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED, Boolean.class, Boolean.TRUE);
if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
}
if (registration == null) {
throw new PluginException("No registration found");
}
pluginCache.put(serviceId, ip);
LOG.info("Add blacklist for serviceId={}, ip={} successfully", serviceId, ip);
return "success";
}
@Override
public String getPath() {
return "/discovery";
}
@RequestMapping(path = "clear", method = RequestMethod.GET)
@ResponseBody
@ManagedOperation
public Object clear(@RequestParam("serviceId") String serviceId) {
Boolean discoveryControlEnabled = getEnvironment().getProperty(PluginConstant.SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED, Boolean.class, Boolean.TRUE);
if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
}
@SuppressWarnings("rawtypes")
@Override
public Class<? extends Endpoint> getEndpointType() {
return null;
if (registration == null) {
throw new PluginException("No registration found");
}
pluginCache.clear(serviceId);
LOG.info("Clear blacklist for serviceId={} successfully", serviceId);
return "success";
}
@Override
public boolean isSensitive() {
return true;
@RequestMapping(path = "status", method = RequestMethod.POST)
@ResponseBody
@ManagedOperation
public Object status(@RequestBody String status) {
Boolean discoveryControlEnabled = getEnvironment().getProperty(PluginConstant.SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED, Boolean.class, Boolean.TRUE);
if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
}
if (registration == null) {
throw new PluginException("No registration found");
}
serviceRegistry.setStatus(registration, status);
LOG.info("Set status for serviceId={} status={} successfully", registration.getServiceId(), status);
return "success";
}
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
@RequestMapping(path = "deregister", method = RequestMethod.POST)
@ResponseBody
@ManagedOperation
public Object deregister() {
Boolean discoveryControlEnabled = getEnvironment().getProperty(PluginConstant.SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED, Boolean.class, Boolean.TRUE);
if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
}
if (registration == null) {
throw new PluginException("No registration found");
}
serviceRegistry.deregister(registration);
LOG.info("Deregister for serviceId={} successfully", registration.getServiceId());
return "success";
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (applicationContext instanceof ConfigurableApplicationContext) {
this.context = (ConfigurableApplicationContext) applicationContext;
this.applicationContext = (ConfigurableApplicationContext) applicationContext;
}
}
public ConfigurableApplicationContext getApplicationContext() {
return applicationContext;
}
}
\ No newline at end of file
......@@ -50,7 +50,7 @@ public class PluginCache {
}
}
public boolean remove(String key) {
public boolean clear(String key) {
loadingCache.invalidate(key);
return Boolean.TRUE;
......
......@@ -23,7 +23,7 @@ public class DiscoveryController {
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping(value = "/instances", method = RequestMethod.GET)
@RequestMapping(path = "/instances", method = RequestMethod.GET)
public List<ServiceInstance> instances() {
return discoveryClient.getInstances("discovery-springcloud-example-b");
}
......
......@@ -13,4 +13,5 @@ spring.application.discovery.control.enabled=true
# 开启和关闭远程配置中心规则配置文件读取。一旦关闭,默认读取本地规则配置文件(例如:rule.xml)。缺失则默认为true
spring.application.discovery.remote.config.enabled=true
management.port=5432
management.security.enabled=false
\ 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