From da88dcea47fdd9662c6c5f8f4471e21812f2375e Mon Sep 17 00:00:00 2001 From: "523163881@qq.com" <523163881@qq.com> Date: Sat, 3 Oct 2020 23:53:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B3=A8=E5=86=8C=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/config/MonitorConsulConfig.java | 45 ---------- .../admin/config/MonitorEurekaConfig.java | 34 ------- .../admin/config/MonitorNacosConfig.java | 23 ----- .../service/ConsulMonitorStatService.java | 84 ----------------- .../service/EurekaMonitorStatService.java | 77 ---------------- .../admin/service/MonitorStatService.java | 90 ++++++++++++++++--- .../service/NacosMonitorStatService.java | 79 ---------------- 7 files changed, 77 insertions(+), 355 deletions(-) delete mode 100644 druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorConsulConfig.java delete mode 100644 druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorEurekaConfig.java delete mode 100644 druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorNacosConfig.java delete mode 100644 druid-admin/src/main/java/com/alibaba/druid/admin/service/ConsulMonitorStatService.java delete mode 100644 druid-admin/src/main/java/com/alibaba/druid/admin/service/EurekaMonitorStatService.java delete mode 100644 druid-admin/src/main/java/com/alibaba/druid/admin/service/NacosMonitorStatService.java diff --git a/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorConsulConfig.java b/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorConsulConfig.java deleted file mode 100644 index a001db857a..0000000000 --- a/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorConsulConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.alibaba.druid.admin.config; - -import com.ecwid.consul.transport.TLSConfig; -import com.ecwid.consul.v1.ConsulClient; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.consul.ConditionalOnConsulEnabled; -import org.springframework.cloud.consul.ConsulProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.StringUtils; - -/** - * @author linchtech - * @date 2020-09-20 19:56 - **/ -@Configuration -@ConditionalOnConsulEnabled -public class MonitorConsulConfig { - - @Bean - @ConditionalOnProperty(value = "spring.cloud.consul.enabled") - public ConsulProperties consulProperties() { - return new ConsulProperties(); - } - - @Bean - @ConditionalOnProperty(value = "spring.cloud.consul.enabled") - public ConsulClient consulClient(ConsulProperties consulProperties) { - final int agentPort = consulProperties.getPort(); - final String agentHost = !StringUtils.isEmpty(consulProperties.getScheme()) - ? consulProperties.getScheme() + "://" + consulProperties.getHost() - : consulProperties.getHost(); - - if (consulProperties.getTls() != null) { - ConsulProperties.TLSConfig tls = consulProperties.getTls(); - TLSConfig tlsConfig = new TLSConfig(tls.getKeyStoreInstanceType(), - tls.getCertificatePath(), tls.getCertificatePassword(), - tls.getKeyStorePath(), tls.getKeyStorePassword()); - return new ConsulClient(agentHost, agentPort, tlsConfig); - } - return new ConsulClient(agentHost, agentPort); - } - - -} diff --git a/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorEurekaConfig.java b/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorEurekaConfig.java deleted file mode 100644 index 53621d86fb..0000000000 --- a/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorEurekaConfig.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.alibaba.druid.admin.config; - -import com.netflix.discovery.EurekaClient; -import com.netflix.discovery.EurekaClientConfig; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.cloud.netflix.eureka.EurekaDiscoveryClient; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author linchtech - * @date 2020-09-22 12:02 - **/ -@Configuration -@ConditionalOnProperty(value = "eureka.client.enabled") -public class MonitorEurekaConfig { - - private final EurekaClient eurekaClient; - - private final EurekaClientConfig clientConfig; - - public MonitorEurekaConfig(EurekaClient eurekaClient, - EurekaClientConfig clientConfig) { - this.clientConfig = clientConfig; - this.eurekaClient = eurekaClient; - } - - @Bean - public DiscoveryClient discoveryClient(EurekaClient client, - EurekaClientConfig clientConfig) { - return new EurekaDiscoveryClient(client, clientConfig); - } -} diff --git a/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorNacosConfig.java b/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorNacosConfig.java deleted file mode 100644 index 80df0a5a27..0000000000 --- a/druid-admin/src/main/java/com/alibaba/druid/admin/config/MonitorNacosConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.alibaba.druid.admin.config; - -import com.alibaba.cloud.nacos.NacosDiscoveryProperties; -import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author linchtech - * @date 2020-09-20 22:29 - **/ -@Configuration -@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.enabled") -public class MonitorNacosConfig { - - @Bean - public DiscoveryClient nacosDiscoveryClient(NacosDiscoveryProperties nacosDiscoveryProperties) { - return new NacosDiscoveryClient(nacosDiscoveryProperties); - } - -} diff --git a/druid-admin/src/main/java/com/alibaba/druid/admin/service/ConsulMonitorStatService.java b/druid-admin/src/main/java/com/alibaba/druid/admin/service/ConsulMonitorStatService.java deleted file mode 100644 index 794002e051..0000000000 --- a/druid-admin/src/main/java/com/alibaba/druid/admin/service/ConsulMonitorStatService.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.alibaba.druid.admin.service; - -import com.alibaba.druid.admin.model.ServiceNode; -import com.ecwid.consul.v1.ConsulClient; -import com.ecwid.consul.v1.Response; -import com.ecwid.consul.v1.agent.model.Service; -import com.alibaba.druid.admin.config.MonitorProperties; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * @author linchtech - * @date 2020-09-22 11:14 - **/ -@Component -@Slf4j -@ConditionalOnProperty(value = "spring.cloud.consul.enabled") -public class ConsulMonitorStatService extends MonitorStatService { - - @Autowired - private ConsulClient consulClient; - @Autowired - private MonitorProperties monitorProperties; - - @Override - public Map getAllServiceNodeMap() { - Response> agentServices = consulClient.getAgentServices(); - Map value = agentServices.getValue(); - List serviceNodes = new ArrayList<>(); - for (String key : value.keySet()) { - Service service = value.get(key); - String address = service.getAddress(); - Integer port = service.getPort(); - String id = service.getId(); - String serviceName = id.substring(0, id.lastIndexOf("-")); - // 根据前端参数采集指定的服务 - if (monitorProperties.getApplications().contains(serviceName)) { - ServiceNode serviceNode = new ServiceNode(); - serviceNode.setId(id); - serviceNode.setPort(port); - serviceNode.setAddress(address); - serviceNode.setServiceName(serviceName); - serviceNodes.add(serviceNode); - serviceIdMap.put(id, serviceNode); - } - } - return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), - Function.identity(), (v1, v2) -> v2)); - } - - @Override - public Map getServiceAllNodeMap(Map parameters) { - String requestServiceName = parameters.get("serviceName"); - Response> agentServices = consulClient.getAgentServices(); - Map value = agentServices.getValue(); - List serviceNodes = new ArrayList<>(); - for (String key : value.keySet()) { - Service service = value.get(key); - String address = service.getAddress(); - Integer port = service.getPort(); - String id = service.getId(); - String serviceName = id.substring(0, id.lastIndexOf("-")); - if (serviceName.equals(requestServiceName)) { - ServiceNode serviceNode = new ServiceNode(); - serviceNode.setPort(port); - serviceNode.setId(id); - serviceNode.setAddress(address); - serviceNode.setServiceName(serviceName); - serviceNodes.add(serviceNode); - serviceIdMap.put(id, serviceNode); - } - } - return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), - Function.identity(), (v1, v2) -> v2)); - } -} diff --git a/druid-admin/src/main/java/com/alibaba/druid/admin/service/EurekaMonitorStatService.java b/druid-admin/src/main/java/com/alibaba/druid/admin/service/EurekaMonitorStatService.java deleted file mode 100644 index 819978a92c..0000000000 --- a/druid-admin/src/main/java/com/alibaba/druid/admin/service/EurekaMonitorStatService.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.alibaba.druid.admin.service; - -import com.alibaba.druid.admin.model.ServiceNode; -import com.alibaba.druid.admin.config.MonitorProperties; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * @author linchtech - * @date 2020-09-22 13:52 - **/ -@Component -@Slf4j -@ConditionalOnProperty(value = "eureka.client.enabled") -public class EurekaMonitorStatService extends MonitorStatService { - - @Autowired - private DiscoveryClient discoveryClient; - @Autowired - private MonitorProperties monitorProperties; - - @Override - public Map getAllServiceNodeMap() { - List services = discoveryClient.getServices(); - List serviceNodes = new ArrayList<>(); - for (String serviceId : services) { - List instances = discoveryClient.getInstances(serviceId); - for (ServiceInstance serviceInstance : instances) { - if (monitorProperties.getApplications().contains(serviceId)) { - ServiceNode serviceNode = new ServiceNode(); - serviceNode.setId(serviceInstance.getInstanceId()); - serviceNode.setPort(serviceInstance.getPort()); - serviceNode.setAddress(serviceInstance.getHost()); - serviceNode.setServiceName(serviceId); - serviceNodes.add(serviceNode); - serviceIdMap.put(serviceInstance.getInstanceId(), serviceNode); - } - } - } - return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), - Function.identity(), (v1, v2) -> v2)); - } - - @Override - public Map getServiceAllNodeMap(Map parameters) { - String requestServiceName = parameters.get("serviceName"); - - List services = discoveryClient.getServices(); - List serviceNodes = new ArrayList<>(); - for (String serviceId : services) { - List instances = discoveryClient.getInstances(serviceId); - for (ServiceInstance serviceInstance : instances) { - if (requestServiceName.equals(serviceId)) { - ServiceNode serviceNode = new ServiceNode(); - serviceNode.setId(serviceInstance.getInstanceId()); - serviceNode.setPort(serviceInstance.getPort()); - serviceNode.setAddress(serviceInstance.getHost()); - serviceNode.setServiceName(serviceId); - serviceNodes.add(serviceNode); - serviceIdMap.put(serviceInstance.getInstanceId(), serviceNode); - } - } - } - return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), - Function.identity(), (v1, v2) -> v2)); - } -} diff --git a/druid-admin/src/main/java/com/alibaba/druid/admin/service/MonitorStatService.java b/druid-admin/src/main/java/com/alibaba/druid/admin/service/MonitorStatService.java index aff9e73b3a..93b8d60756 100644 --- a/druid-admin/src/main/java/com/alibaba/druid/admin/service/MonitorStatService.java +++ b/druid-admin/src/main/java/com/alibaba/druid/admin/service/MonitorStatService.java @@ -1,10 +1,5 @@ -package com.alibaba.druid.admin.service; +package com.linchtech.druid.admin.service; -import com.alibaba.druid.admin.config.MonitorProperties; -import com.alibaba.druid.admin.model.ServiceNode; -import com.alibaba.druid.admin.model.dto.ConnectionResult; -import com.alibaba.druid.admin.model.dto.SqlDetailResult; -import com.alibaba.druid.admin.util.HttpUtil; import com.alibaba.druid.stat.DruidStatServiceMBean; import com.alibaba.druid.support.http.stat.WebAppStatManager; import com.alibaba.druid.support.json.JSONUtils; @@ -14,12 +9,20 @@ import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.alibaba.druid.admin.model.dto.DataSourceResult; -import com.alibaba.druid.admin.model.dto.SqlListResult; -import com.alibaba.druid.admin.model.dto.WallResult; -import com.alibaba.druid.admin.model.dto.WebResult; +import com.linchtech.druid.admin.config.MonitorProperties; +import com.linchtech.druid.admin.model.ServiceNode; +import com.linchtech.druid.admin.model.dto.ConnectionResult; +import com.linchtech.druid.admin.model.dto.DataSourceResult; +import com.linchtech.druid.admin.model.dto.SqlDetailResult; +import com.linchtech.druid.admin.model.dto.SqlListResult; +import com.linchtech.druid.admin.model.dto.WallResult; +import com.linchtech.druid.admin.model.dto.WebResult; +import com.linchtech.druid.admin.util.HttpUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Collections; @@ -27,13 +30,16 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author linchtech * @date 2020-09-16 11:12 **/ @Slf4j -public abstract class MonitorStatService implements DruidStatServiceMBean { +@Component +public class MonitorStatService implements DruidStatServiceMBean { public final static int RESULT_CODE_SUCCESS = 1; public final static int RESULT_CODE_ERROR = -1; @@ -49,6 +55,9 @@ public abstract class MonitorStatService implements DruidStatServiceMBean { */ public static Map serviceIdMap = new HashMap<>(); + @Autowired + private DiscoveryClient discoveryClient; + @Autowired private MonitorProperties monitorProperties; @@ -57,7 +66,34 @@ public abstract class MonitorStatService implements DruidStatServiceMBean { * * @return */ - public abstract Map getAllServiceNodeMap(); + public Map getAllServiceNodeMap(){ + List services = discoveryClient.getServices(); + List serviceNodes = new ArrayList<>(); + for (String service : services) { + List instances = discoveryClient.getInstances(service); + for (ServiceInstance instance : instances) { + String host = instance.getHost(); + String instanceId = instance.getInstanceId(); + if (instanceId == null) { + instanceId = instance.getMetadata().get("nacos.instanceId").replaceAll("#", "-").replaceAll("@@", "-"); + } + int port = instance.getPort(); + String serviceId = instance.getServiceId(); + // 根据前端参数采集指定的服务 + if (monitorProperties.getApplications().contains(serviceId)) { + ServiceNode serviceNode = new ServiceNode(); + serviceNode.setId(instanceId); + serviceNode.setPort(port); + serviceNode.setAddress(host); + serviceNode.setServiceName(serviceId); + serviceNodes.add(serviceNode); + serviceIdMap.put(instanceId, serviceNode); + } + } + } + return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), + Function.identity(), (v1, v2) -> v2)); + } /** * 获取指定服务名的所有节点 @@ -65,8 +101,36 @@ public abstract class MonitorStatService implements DruidStatServiceMBean { * @param parameters * @return */ - public abstract Map getServiceAllNodeMap(Map parameters); + public Map getServiceAllNodeMap(Map parameters){ + String requestServiceName = parameters.get("serviceName"); + List services = discoveryClient.getServices(); + List serviceNodes = new ArrayList<>(); + for (String service : services) { + List instances = discoveryClient.getInstances(service); + for (ServiceInstance instance : instances) { + String host = instance.getHost(); + String instanceId = instance.getInstanceId(); + if (instanceId == null) { + instanceId = instance.getMetadata().get("nacos.instanceId").replaceAll("#", "-").replaceAll("@@", "-"); + } + int port = instance.getPort(); + String serviceId = instance.getServiceId(); + // 根据前端参数采集指定的服务 + if (serviceId.equals(requestServiceName)) { + ServiceNode serviceNode = new ServiceNode(); + serviceNode.setId(instanceId); + serviceNode.setPort(port); + serviceNode.setAddress(host); + serviceNode.setServiceName(serviceId); + serviceNodes.add(serviceNode); + serviceIdMap.put(instanceId, serviceNode); + } + } + } + return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), + Function.identity(), (v1, v2) -> v2)); + } @Override public String service(String url) { Map parameters = getParameters(url); diff --git a/druid-admin/src/main/java/com/alibaba/druid/admin/service/NacosMonitorStatService.java b/druid-admin/src/main/java/com/alibaba/druid/admin/service/NacosMonitorStatService.java deleted file mode 100644 index 1b1dd47fb3..0000000000 --- a/druid-admin/src/main/java/com/alibaba/druid/admin/service/NacosMonitorStatService.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.alibaba.druid.admin.service; - -import com.alibaba.druid.admin.config.MonitorProperties; -import com.alibaba.druid.admin.model.ServiceNode; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -/** - * @author linchtech - * @date 2020-09-22 11:18 - **/ -@Slf4j -@Component -@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.enabled") -public class NacosMonitorStatService extends MonitorStatService { - - @Autowired - private DiscoveryClient discoveryClient; - @Autowired - private MonitorProperties monitorProperties; - - @Override - public Map getAllServiceNodeMap() { - List services = discoveryClient.getServices(); - List serviceNodes = new ArrayList<>(); - for (String serviceId : services) { - List instances = discoveryClient.getInstances(serviceId); - for (ServiceInstance serviceInstance : instances) { - if (monitorProperties.getApplications().contains(serviceId)) { - ServiceNode serviceNode = new ServiceNode(); - serviceNode.setId(serviceInstance.getInstanceId()); - serviceNode.setPort(serviceInstance.getPort()); - serviceNode.setAddress(serviceInstance.getHost()); - serviceNode.setServiceName(serviceId); - serviceNodes.add(serviceNode); - serviceIdMap.put(serviceInstance.getInstanceId(), serviceNode); - } - } - } - return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), - Function.identity(), (v1, v2) -> v2)); - } - - @Override - public Map getServiceAllNodeMap(Map parameters) { - String requestServiceName = parameters.get("serviceName"); - - List services = discoveryClient.getServices(); - List serviceNodes = new ArrayList<>(); - for (String serviceId : services) { - List instances = discoveryClient.getInstances(serviceId); - for (ServiceInstance serviceInstance : instances) { - if (requestServiceName.equals(serviceId)) { - ServiceNode serviceNode = new ServiceNode(); - // nacos节点id格式:ip#port#DEFAULT#DEFAULT_GROUP@@name - String id = serviceInstance.getMetadata().get("nacos.instanceId"); - serviceNode.setId(id.replaceAll("#","-").replaceAll("@@","-")); - serviceNode.setPort(serviceInstance.getPort()); - serviceNode.setAddress(serviceInstance.getHost()); - serviceNode.setServiceName(serviceId); - serviceNodes.add(serviceNode); - serviceIdMap.put(serviceNode.getId(), serviceNode); - } - } - } - return serviceNodes.parallelStream().collect(Collectors.toMap(i -> i.getServiceName() + "-" + i.getAddress() + "-" + i.getPort(), - Function.identity(), (v1, v2) -> v2)); - } -}