From 1b7b4f4104e7d77a5d16594e77ce258d3b2eeab6 Mon Sep 17 00:00:00 2001 From: zeaslity Date: Thu, 12 Jan 2023 17:38:32 +0800 Subject: [PATCH] [ agent ] [ status ]- optimize the network status --- .../utils/NacosConfigurationCollector.java | 2 +- .../CheckSingleAppStatusCallable.java | 2 +- .../config/CommandPipelineBuilder.java | 1 - .../{ => status}/AppStatusExecutor.java | 3 +- .../status/NetworkStatusExecutor.java | 104 ++++++++++++++++++ .../agent/status/AgentStatusCollector.java | 3 +- .../java/io/wdd/agent/AppStatusCheckTest.java | 2 +- .../wdd/common/beans/status/NetworkInfo.java | 42 +++++-- .../io/wdd/source/shell/lib/wdd-lib-env.sh | 3 +- 9 files changed, 146 insertions(+), 16 deletions(-) rename agent/src/main/java/io/wdd/agent/executor/{ => status}/AppStatusExecutor.java (97%) create mode 100644 agent/src/main/java/io/wdd/agent/executor/status/NetworkStatusExecutor.java diff --git a/agent/src/main/java/io/wdd/agent/config/utils/NacosConfigurationCollector.java b/agent/src/main/java/io/wdd/agent/config/utils/NacosConfigurationCollector.java index 76c1bea..0a79cec 100644 --- a/agent/src/main/java/io/wdd/agent/config/utils/NacosConfigurationCollector.java +++ b/agent/src/main/java/io/wdd/agent/config/utils/NacosConfigurationCollector.java @@ -17,7 +17,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.concurrent.Executor; -import static io.wdd.agent.executor.AppStatusExecutor.ALL_APP_NEED_TO_MONITOR_STATUS; +import static io.wdd.agent.executor.status.AppStatusExecutor.ALL_APP_NEED_TO_MONITOR_STATUS; @Component diff --git a/agent/src/main/java/io/wdd/agent/executor/CheckSingleAppStatusCallable.java b/agent/src/main/java/io/wdd/agent/executor/CheckSingleAppStatusCallable.java index 9b67b18..9d6b9e4 100644 --- a/agent/src/main/java/io/wdd/agent/executor/CheckSingleAppStatusCallable.java +++ b/agent/src/main/java/io/wdd/agent/executor/CheckSingleAppStatusCallable.java @@ -14,7 +14,7 @@ import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; -import static io.wdd.agent.executor.AppStatusExecutor.ALL_APP_NEED_TO_MONITOR_STATUS; +import static io.wdd.agent.executor.status.AppStatusExecutor.ALL_APP_NEED_TO_MONITOR_STATUS; @Slf4j diff --git a/agent/src/main/java/io/wdd/agent/executor/config/CommandPipelineBuilder.java b/agent/src/main/java/io/wdd/agent/executor/config/CommandPipelineBuilder.java index e5381d1..2ca2b16 100644 --- a/agent/src/main/java/io/wdd/agent/executor/config/CommandPipelineBuilder.java +++ b/agent/src/main/java/io/wdd/agent/executor/config/CommandPipelineBuilder.java @@ -19,7 +19,6 @@ import java.util.stream.Collectors; @Slf4j public class CommandPipelineBuilder { - public static List runGetResult(ArrayList> commandList){ try { diff --git a/agent/src/main/java/io/wdd/agent/executor/AppStatusExecutor.java b/agent/src/main/java/io/wdd/agent/executor/status/AppStatusExecutor.java similarity index 97% rename from agent/src/main/java/io/wdd/agent/executor/AppStatusExecutor.java rename to agent/src/main/java/io/wdd/agent/executor/status/AppStatusExecutor.java index 92ff554..b80b4c0 100644 --- a/agent/src/main/java/io/wdd/agent/executor/AppStatusExecutor.java +++ b/agent/src/main/java/io/wdd/agent/executor/status/AppStatusExecutor.java @@ -1,7 +1,8 @@ -package io.wdd.agent.executor; +package io.wdd.agent.executor.status; import io.wdd.agent.config.utils.AgentCommonThreadPool; +import io.wdd.agent.executor.CheckSingleAppStatusCallable; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; diff --git a/agent/src/main/java/io/wdd/agent/executor/status/NetworkStatusExecutor.java b/agent/src/main/java/io/wdd/agent/executor/status/NetworkStatusExecutor.java new file mode 100644 index 0000000..b394825 --- /dev/null +++ b/agent/src/main/java/io/wdd/agent/executor/status/NetworkStatusExecutor.java @@ -0,0 +1,104 @@ +package io.wdd.agent.executor.status; + +import io.wdd.agent.config.utils.AgentCommonThreadPool; +import io.wdd.common.beans.status.NetworkInfo; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import oshi.hardware.NetworkIF; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +/** + * 计算网卡接口的网速信息 + * 获取网卡接口的公网Ipv4和Ipv6信息 + */ +@Service +@Lazy +public class NetworkStatusExecutor { + + private static final ArrayList GET_PUBLIC_IPV4_ADDRESS_COMMAND; + private static final ArrayList GET_PUBLIC_IPV6_ADDRESS_COMMAND; + + static { + GET_PUBLIC_IPV4_ADDRESS_COMMAND = new ArrayList<>(List.of( + "wget", + "-q", + "-T10", + "-O-", + "ipinfo.io/ip" + )); + + GET_PUBLIC_IPV6_ADDRESS_COMMAND = new ArrayList<>(List.of( + "curl", + "--max-time", + "5", + "-6", + "https://ifconfig.co/ip" + )); + } + + + public List collect(List networkIFList, boolean updatePublicIpAddr) { + + // 获取网卡接口的公网Ipv4和Ipv6信息 + // 不需要,AgentBootUp通过命令行即可获取 + // 需要定时更新Agent的信息,根据Boolean来决定 + if (updatePublicIpAddr) { + String[] publicIpAddress = collectAgentPublicIpAddress(); + } + + // 计算网卡接口的网速信息 + networkIFList.forEach( + networkIF -> { +// AgentCommonThreadPool.pool.submit(); + } + ); + + return null; + + } + + /** + * @return 第一位:公网Ipv4 第二位:公网Ipv6 + */ + private String[] collectAgentPublicIpAddress() { + + return new String[]{ + collectAgentPublicIpAddress(GET_PUBLIC_IPV4_ADDRESS_COMMAND), + collectAgentPublicIpAddress(GET_PUBLIC_IPV6_ADDRESS_COMMAND) + }; + + } + + private String collectAgentPublicIpAddress(ArrayList getPublicIPAddrCommandList) { + try { + + + ProcessBuilder processBuilder = new ProcessBuilder(getPublicIPAddrCommandList); + + Process process = processBuilder.start(); + + boolean waitFor = process.waitFor(5, + TimeUnit.SECONDS); + String ipAddr = "null"; + + if (ObjectUtils.isNotEmpty(waitFor) && process.exitValue() == 0) { + + ipAddr = new BufferedReader(new InputStreamReader(process.getInputStream())).readLine(); + } + + return ipAddr; + + } catch (IOException e) { + throw new RuntimeException(e); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +} diff --git a/agent/src/main/java/io/wdd/agent/status/AgentStatusCollector.java b/agent/src/main/java/io/wdd/agent/status/AgentStatusCollector.java index 1a4a440..d429780 100644 --- a/agent/src/main/java/io/wdd/agent/status/AgentStatusCollector.java +++ b/agent/src/main/java/io/wdd/agent/status/AgentStatusCollector.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.wdd.agent.config.beans.init.AgentServerInfo; import io.wdd.agent.config.utils.AgentCommonThreadPool; -import io.wdd.agent.executor.AppStatusExecutor; +import io.wdd.agent.executor.status.AppStatusExecutor; import io.wdd.common.beans.status.*; import io.wdd.common.utils.TimeUtils; import lombok.extern.slf4j.Slf4j; @@ -19,7 +19,6 @@ import oshi.software.os.OperatingSystem; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; -import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; @Service diff --git a/agent/src/test/java/io/wdd/agent/AppStatusCheckTest.java b/agent/src/test/java/io/wdd/agent/AppStatusCheckTest.java index c6bd925..5c9f693 100644 --- a/agent/src/test/java/io/wdd/agent/AppStatusCheckTest.java +++ b/agent/src/test/java/io/wdd/agent/AppStatusCheckTest.java @@ -1,6 +1,6 @@ package io.wdd.agent; -import io.wdd.agent.executor.AppStatusExecutor; +import io.wdd.agent.executor.status.AppStatusExecutor; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/common/src/main/java/io/wdd/common/beans/status/NetworkInfo.java b/common/src/main/java/io/wdd/common/beans/status/NetworkInfo.java index 04b5e7d..4b6ffd8 100644 --- a/common/src/main/java/io/wdd/common/beans/status/NetworkInfo.java +++ b/common/src/main/java/io/wdd/common/beans/status/NetworkInfo.java @@ -20,21 +20,47 @@ public class NetworkInfo { private String name; private String displayName; - private String macAddr; - private String mtu; - - private String[] ipv4Addr; - private String[] ipv6Addr; - + private String[] innerIpv4Addr; + private String[] publicIpv4Addr; + private String[] innerIpv6Addr; + private String[] publicIpv6Addr; + /** + * 过去1s内的网速,接收速率 + */ + private String recvSpeed; + /** + * 过去1s内的网速,发送速率 + */ + private String sendSpeed; private String trafficRecv; - private String trafficSend; public static List mapFromNetworkIFS(List networkIFList) { - return networkIFList.stream().map(networkIF -> NetworkInfo.builder().name(networkIF.getName()).displayName(networkIF.getDisplayName()).mtu(String.valueOf(networkIF.getMTU())).macAddr(networkIF.getMacaddr()).ipv4Addr(generateIPDICRFromNetworkIFList(networkIF, 4)).ipv6Addr(generateIPDICRFromNetworkIFList(networkIF, 6)).trafficSend(FormatUtils.formatData(networkIF.getBytesSent())).trafficRecv(FormatUtils.formatData(networkIF.getBytesRecv())).build()).collect(Collectors.toList()); + return networkIFList + .stream() + .map( + networkIF -> NetworkInfo + .builder() + .name(networkIF.getName()) + .displayName(networkIF.getDisplayName()) + .mtu(String.valueOf(networkIF.getMTU())) + .macAddr(networkIF.getMacaddr()) + .innerIpv4Addr(generateIPDICRFromNetworkIFList( + networkIF, + 4 + )) + .innerIpv6Addr(generateIPDICRFromNetworkIFList( + networkIF, + 6 + )) + .trafficSend(FormatUtils.formatData(networkIF.getBytesSent())) + .trafficRecv(FormatUtils.formatData(networkIF.getBytesRecv()) + ) + .build()) + .collect(Collectors.toList()); } private static String[] generateIPDICRFromNetworkIFList(NetworkIF networkIF, int Ipv4OrIpv6) { diff --git a/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-env.sh b/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-env.sh index 83d8c95..b477fbc 100644 --- a/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-env.sh +++ b/source/src/main/java/io/wdd/source/shell/lib/wdd-lib-env.sh @@ -231,6 +231,7 @@ GetIpv4Info() { country="$(wget -q -T10 -O- ipinfo.io/country)" region="$(wget -q -T10 -O- ipinfo.io/region)" public_ipv4="$(wget -q -T10 -O- ipinfo.io/ip)" + public_ipv6="$(curl --max-time 5 -6 https://ifconfig.co/ip)" } @@ -314,7 +315,7 @@ cat >/etc/environment.d/octopus-agent.conf <