Commit 8b0fbdb6 authored by 孙 楠's avatar 孙 楠

Merge branch 'feature-2.6.4' of http://git.quantgroup.cn/DevOps/commons into feature-2.6.4

parents b9f07542 bd8ee779
...@@ -2,26 +2,25 @@ package cn.quantgroup.tech.enoch.agent.report.impl; ...@@ -2,26 +2,25 @@ package cn.quantgroup.tech.enoch.agent.report.impl;
import cn.quantgroup.tech.enoch.agent.configuration.EnochAgentProperties; import cn.quantgroup.tech.enoch.agent.configuration.EnochAgentProperties;
import cn.quantgroup.tech.enoch.agent.report.IAgentReportService; import cn.quantgroup.tech.enoch.agent.report.IAgentReportService;
import com.alibaba.fastjson.JSON; import com.google.gson.Gson;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.MetricReaderPublicMetrics; import org.springframework.boot.actuate.env.EnvironmentEndpoint;
import org.springframework.boot.actuate.endpoint.MetricsEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint;
import org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint;
import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthComponent;
import org.springframework.boot.actuate.health.HealthEndpoint;
import org.springframework.boot.actuate.metrics.MetricsEndpoint;
import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
import java.util.stream.Collectors;
/** /**
* @author: amen * @author: amen
...@@ -33,7 +32,7 @@ public class AgentReportServiceImpl implements IAgentReportService { ...@@ -33,7 +32,7 @@ public class AgentReportServiceImpl implements IAgentReportService {
@Autowired @Autowired
private HealthMvcEndpoint healthMvcEndpoint; private HealthEndpoint healthMvcEndpoint;
@Autowired @Autowired
private MetricsEndpoint metricsEndpoint; private MetricsEndpoint metricsEndpoint;
...@@ -45,10 +44,10 @@ public class AgentReportServiceImpl implements IAgentReportService { ...@@ -45,10 +44,10 @@ public class AgentReportServiceImpl implements IAgentReportService {
private EnochAgentProperties enochAgentProperties; private EnochAgentProperties enochAgentProperties;
@Autowired @Autowired
private EnvironmentMvcEndpoint environmentMvcEndpoint; private EnvironmentEndpoint environmentEndpoint;
@Autowired @Autowired
private MetricReaderPublicMetrics metricReaderPublicMetrics; private Gson gson;
private final ArrayBlockingQueue<Map<String, Object>> arrayBlockingQueue = new ArrayBlockingQueue<>(600); private final ArrayBlockingQueue<Map<String, Object>> arrayBlockingQueue = new ArrayBlockingQueue<>(600);
...@@ -71,16 +70,20 @@ public class AgentReportServiceImpl implements IAgentReportService { ...@@ -71,16 +70,20 @@ public class AgentReportServiceImpl implements IAgentReportService {
pushPackage.put("appName", applicationInfo.getAppName()); pushPackage.put("appName", applicationInfo.getAppName());
pushPackage.put("endPoints", slice); pushPackage.put("endPoints", slice);
//todo 若发kafka失败,添加本地持久化操作,待下次提交时,一同push //todo 若发kafka失败,添加本地持久化操作,待下次提交时,一同push
kafkaTemplate.send(enochAgentProperties.getKafkaTopic(), JSON.toJSONString(pushPackage, SerializerFeature.DisableCircularReferenceDetect));
kafkaTemplate.send(enochAgentProperties.getKafkaTopic(), gson.toJson(pushPackage));
} }
@Override @Override
public void collect() { public void collect() {
HashMap<String, Object> endPoints = new HashMap<>(16); HashMap<String, Object> endPoints = new HashMap<>(16);
Health health = healthMvcEndpoint.getDelegate().invoke();
HealthComponent health =healthMvcEndpoint.health();
Map<String, List<MetricsEndpoint.Sample>> metricCollect = metricsEndpoint.listNames().getNames().stream().collect(Collectors.toMap(i -> i, j -> metricsEndpoint.metric(j, null).getMeasurements()));
Health.status(health.getStatus()).build(); Health.status(health.getStatus()).build();
endPoints.put("health", health); endPoints.put("health", health);
endPoints.put("metrics", metricsEndpoint.invoke()); endPoints.put("metrics", metricCollect);
endPoints.put("timestamp", System.currentTimeMillis()); endPoints.put("timestamp", System.currentTimeMillis());
try { try {
arrayBlockingQueue.put(endPoints); arrayBlockingQueue.put(endPoints);
...@@ -90,19 +93,13 @@ public class AgentReportServiceImpl implements IAgentReportService { ...@@ -90,19 +93,13 @@ public class AgentReportServiceImpl implements IAgentReportService {
} }
private ApplicationInfo initApplicationInfo() { private ApplicationInfo initApplicationInfo() {
Map<String, String> appName = (HashMap) environmentMvcEndpoint.value("spring.application.name"); String appName = (String) environmentEndpoint.environmentEntry("spring.application.name").getProperty().getValue();
Map<String, String> ip = (HashMap) environmentMvcEndpoint.value("spring.cloud.client.ipAddress"); String ip =(String) environmentEndpoint.environmentEntry("spring.cloud.client.ipAddress").getProperty().getValue();
applicationInfo.setAppName(appName.get("spring.application.name")); applicationInfo.setAppName(appName);
applicationInfo.setIp(ip.get("spring.cloud.client.ipAddress")); applicationInfo.setIp(ip);
return applicationInfo; return applicationInfo;
} }
@PostConstruct
public void init(){
//注释掉不需要收集器
metricsEndpoint.unregisterPublicMetrics(metricReaderPublicMetrics);
}
@Data @Data
public static class ApplicationInfo { public static class ApplicationInfo {
private String ip; private String ip;
......
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