From f4f8417e4d393ec1f3b588253ca001b80802377a Mon Sep 17 00:00:00 2001 From: zeaslity Date: Thu, 5 Jan 2023 14:57:31 +0800 Subject: [PATCH] [ agent ] [ status ] - accomplish agent status - 4 --- agent/pom.xml | 8 -- .../agent/status/AgentStatusCollector.java | 38 +++++++-- .../agent/status/hardware/NetworkInfo.java | 27 ------ common/pom.xml | 12 +++ .../wdd/common/beans}/status/AgentStatus.java | 10 +-- .../io/wdd/common/beans/status}/CpuInfo.java | 2 +- .../io/wdd/common/beans/status}/CpuTicks.java | 2 +- .../io/wdd/common/beans/status/DiskInfo.java | 71 ++++++++++++++++ .../wdd/common/beans/status}/MemoryInfo.java | 6 +- .../wdd/common/beans/status/NetworkInfo.java | 60 +++++++++++++ .../java/io/wdd/common/utils}/DataUnit.java | 2 +- .../io/wdd/common/utils}/FormatUtils.java | 2 +- pom.xml | 22 ++--- .../execute/result/CreateStreamReader.java | 18 ++-- .../result/RedisStreamReaderConfig.java | 34 +++++++- .../service/CoreExecutionServiceImpl.java | 4 +- .../rpc/execute/web/ExecutionController.java | 15 +++- .../rpc/status/AgentStatusStreamReader.java | 84 +++++++++++++++++++ .../impl/CoreServerServiceImpl.java | 20 ++++- 19 files changed, 352 insertions(+), 85 deletions(-) delete mode 100644 agent/src/main/java/io/wdd/agent/status/hardware/NetworkInfo.java rename {agent/src/main/java/io/wdd/agent => common/src/main/java/io/wdd/common/beans}/status/AgentStatus.java (63%) rename {agent/src/main/java/io/wdd/agent/status/hardware => common/src/main/java/io/wdd/common/beans/status}/CpuInfo.java (98%) rename {agent/src/main/java/io/wdd/agent/status/hardware => common/src/main/java/io/wdd/common/beans/status}/CpuTicks.java (98%) create mode 100644 common/src/main/java/io/wdd/common/beans/status/DiskInfo.java rename {agent/src/main/java/io/wdd/agent/status/hardware => common/src/main/java/io/wdd/common/beans/status}/MemoryInfo.java (89%) create mode 100644 common/src/main/java/io/wdd/common/beans/status/NetworkInfo.java rename {agent/src/main/java/io/wdd/agent/status/hardware/config => common/src/main/java/io/wdd/common/utils}/DataUnit.java (96%) rename {agent/src/main/java/io/wdd/agent/status/hardware/config => common/src/main/java/io/wdd/common/utils}/FormatUtils.java (94%) create mode 100644 server/src/main/java/io/wdd/rpc/status/AgentStatusStreamReader.java diff --git a/agent/pom.xml b/agent/pom.xml index 36215b7..93bc353 100644 --- a/agent/pom.xml +++ b/agent/pom.xml @@ -39,14 +39,6 @@ - - - com.github.oshi - oshi-core-java11 - 6.4.0 - - - 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 7879d42..5cf4663 100644 --- a/agent/src/main/java/io/wdd/agent/status/AgentStatusCollector.java +++ b/agent/src/main/java/io/wdd/agent/status/AgentStatusCollector.java @@ -4,8 +4,12 @@ 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.TimeUtils; -import io.wdd.agent.status.hardware.CpuInfo; -import io.wdd.agent.status.hardware.MemoryInfo; +import io.wdd.common.beans.status.CpuInfo; +import io.wdd.common.beans.status.DiskInfo; +import io.wdd.common.beans.status.MemoryInfo; +import io.wdd.common.beans.status.NetworkInfo; +import io.wdd.common.beans.status.AgentStatus; +import io.wdd.common.utils.FormatUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.connection.stream.StreamRecords; import org.springframework.data.redis.connection.stream.StringRecord; @@ -13,6 +17,7 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import oshi.SystemInfo; +import oshi.hardware.HWDiskStore; import oshi.hardware.HardwareAbstractionLayer; import oshi.software.os.OperatingSystem; @@ -20,6 +25,7 @@ import javax.annotation.Resource; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service @Slf4j @@ -61,13 +67,19 @@ public class AgentStatusCollector { agentStatus.setCpuInfo(new CpuInfo(hardware.getProcessor(), 1000)); /* Memory */ - agentStatus.setMemoryInfo(new MemoryInfo().build(hardware.getMemory())); + agentStatus.setMemoryInfo( + MemoryInfo.build(hardware.getMemory()) + ); /* Storage */ - agentStatus.setDiskStoreInfo(hardware.getDiskStores()); + agentStatus.setDiskStoreInfo( + DiskInfo.mapFromDiskStore(hardware.getDiskStores()) + ); /* Network */ - agentStatus.setNetworkInfo(hardware.getNetworkIFs(false)); + agentStatus.setNetworkInfo( + NetworkInfo.mapFromNetworkIFS(hardware.getNetworkIFs(false)) + ); /* operating system info */ agentStatus.setOsInfo(os); @@ -78,10 +90,21 @@ public class AgentStatusCollector { return agentStatus; } + /** + * when server first time boot up + * the server info are not collected completely + * this will be executed to update or complete the octopus agent server info + */ + @Scheduled(initialDelay = 180000) + public void updateAgentServerInfo(){ - // agent boot up 60s then start to report its status + + + } + + // agent boot up 120s then start to report its status // at the fix rate of 15s - @Scheduled(initialDelay = 60000, fixedRate = 5000) + @Scheduled(initialDelay = 60000, fixedRate = 15000) public void sendAgentStatusToRedis() { try { @@ -101,5 +124,4 @@ public class AgentStatusCollector { } - } diff --git a/agent/src/main/java/io/wdd/agent/status/hardware/NetworkInfo.java b/agent/src/main/java/io/wdd/agent/status/hardware/NetworkInfo.java deleted file mode 100644 index 2a34f1d..0000000 --- a/agent/src/main/java/io/wdd/agent/status/hardware/NetworkInfo.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.wdd.agent.status.hardware; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; -import oshi.hardware.NetworkIF; - -import java.util.List; -import java.util.stream.Collectors; - - -@Data -@AllArgsConstructor -@NoArgsConstructor -@SuperBuilder(toBuilder = true) -public class NetworkInfo { - - - public static List mapFromNetworkIFS(List networkIFList){ - - return networkIFList.stream().map( - networkIF -> NetworkInfo.builder() - .build() - ).collect(Collectors.toList()); - } -} diff --git a/common/pom.xml b/common/pom.xml index 5060808..e660761 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -19,6 +19,18 @@ 11 + + + + + com.github.oshi + oshi-core-java11 + 6.4.0 + + + + + diff --git a/agent/src/main/java/io/wdd/agent/status/AgentStatus.java b/common/src/main/java/io/wdd/common/beans/status/AgentStatus.java similarity index 63% rename from agent/src/main/java/io/wdd/agent/status/AgentStatus.java rename to common/src/main/java/io/wdd/common/beans/status/AgentStatus.java index b8e012b..16e1e61 100644 --- a/agent/src/main/java/io/wdd/agent/status/AgentStatus.java +++ b/common/src/main/java/io/wdd/common/beans/status/AgentStatus.java @@ -1,14 +1,10 @@ -package io.wdd.agent.status; +package io.wdd.common.beans.status; -import io.wdd.agent.status.hardware.CpuInfo; -import io.wdd.agent.status.hardware.MemoryInfo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import oshi.hardware.HWDiskStore; -import oshi.hardware.NetworkIF; import oshi.software.os.OperatingSystem; import java.util.List; @@ -30,9 +26,9 @@ public class AgentStatus { MemoryInfo memoryInfo; - List diskStoreInfo; + List diskStoreInfo; - List networkInfo; + List networkInfo; OperatingSystem osInfo; diff --git a/agent/src/main/java/io/wdd/agent/status/hardware/CpuInfo.java b/common/src/main/java/io/wdd/common/beans/status/CpuInfo.java similarity index 98% rename from agent/src/main/java/io/wdd/agent/status/hardware/CpuInfo.java rename to common/src/main/java/io/wdd/common/beans/status/CpuInfo.java index 961f5a3..c2e4d55 100644 --- a/agent/src/main/java/io/wdd/agent/status/hardware/CpuInfo.java +++ b/common/src/main/java/io/wdd/common/beans/status/CpuInfo.java @@ -1,4 +1,4 @@ -package io.wdd.agent.status.hardware; +package io.wdd.common.beans.status; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/agent/src/main/java/io/wdd/agent/status/hardware/CpuTicks.java b/common/src/main/java/io/wdd/common/beans/status/CpuTicks.java similarity index 98% rename from agent/src/main/java/io/wdd/agent/status/hardware/CpuTicks.java rename to common/src/main/java/io/wdd/common/beans/status/CpuTicks.java index 9d49680..6d4d587 100644 --- a/agent/src/main/java/io/wdd/agent/status/hardware/CpuTicks.java +++ b/common/src/main/java/io/wdd/common/beans/status/CpuTicks.java @@ -1,4 +1,4 @@ -package io.wdd.agent.status.hardware; +package io.wdd.common.beans.status; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/common/src/main/java/io/wdd/common/beans/status/DiskInfo.java b/common/src/main/java/io/wdd/common/beans/status/DiskInfo.java new file mode 100644 index 0000000..085e0a2 --- /dev/null +++ b/common/src/main/java/io/wdd/common/beans/status/DiskInfo.java @@ -0,0 +1,71 @@ +package io.wdd.common.beans.status; + +import io.wdd.common.utils.FormatUtils; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import oshi.hardware.HWDiskStore; + +import java.util.List; +import java.util.stream.Collectors; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder(toBuilder = true) +public class DiskInfo { + + String name; + + String model; + + String serial; + + String size; + + + private List partitionInfoList; + + + @Data + @AllArgsConstructor + @NoArgsConstructor + @SuperBuilder(toBuilder = true) + private static class PartitionInfo{ + + String path; + + String type; + + String size; + + String mountPoint; + + } + + public static List mapFromDiskStore(List hwDiskStoreList){ + + return hwDiskStoreList.stream().map( + hwDiskStore -> DiskInfo.builder() + .name(hwDiskStore.getName()) + .model(hwDiskStore.getModel()) + .serial(hwDiskStore.getSerial()) + .size(FormatUtils.formatData(hwDiskStore.getSize())) + .partitionInfoList( + // partition should also be got from stream + hwDiskStore.getPartitions().stream().map(partition -> DiskInfo.PartitionInfo.builder() + .path(partition.getIdentification()) + .size(FormatUtils.formatData(partition.getSize())) + .type(partition.getType()) + .mountPoint(partition.getMountPoint()) + .build() + ).collect(Collectors.toList()) + ) + .build() + ).collect(Collectors.toList()); + + } + + +} diff --git a/agent/src/main/java/io/wdd/agent/status/hardware/MemoryInfo.java b/common/src/main/java/io/wdd/common/beans/status/MemoryInfo.java similarity index 89% rename from agent/src/main/java/io/wdd/agent/status/hardware/MemoryInfo.java rename to common/src/main/java/io/wdd/common/beans/status/MemoryInfo.java index d7f2248..528e6ea 100644 --- a/agent/src/main/java/io/wdd/agent/status/hardware/MemoryInfo.java +++ b/common/src/main/java/io/wdd/common/beans/status/MemoryInfo.java @@ -1,6 +1,6 @@ -package io.wdd.agent.status.hardware; +package io.wdd.common.beans.status; -import io.wdd.agent.status.hardware.config.FormatUtils; +import io.wdd.common.utils.FormatUtils; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -30,7 +30,7 @@ public class MemoryInfo { String swapUsage; - public MemoryInfo build(GlobalMemory memory) { + public static MemoryInfo build(GlobalMemory memory) { VirtualMemory virtualMemory = memory.getVirtualMemory(); return MemoryInfo.builder() 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 new file mode 100644 index 0000000..04b5e7d --- /dev/null +++ b/common/src/main/java/io/wdd/common/beans/status/NetworkInfo.java @@ -0,0 +1,60 @@ +package io.wdd.common.beans.status; + + +import io.wdd.common.utils.FormatUtils; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import oshi.hardware.NetworkIF; + +import java.util.List; +import java.util.stream.Collectors; + + +@Data +@AllArgsConstructor +@NoArgsConstructor +@SuperBuilder(toBuilder = true) +public class NetworkInfo { + + private String name; + private String displayName; + + private String macAddr; + + private String mtu; + + private String[] ipv4Addr; + private String[] ipv6Addr; + + 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()); + } + + private static String[] generateIPDICRFromNetworkIFList(NetworkIF networkIF, int Ipv4OrIpv6) { + + String[] iPAddr; + Short[] subnetMasks; + + if (Ipv4OrIpv6 == 4) { + iPAddr = networkIF.getIPv4addr(); + subnetMasks = networkIF.getSubnetMasks(); + } else { + iPAddr = networkIF.getIPv6addr(); + subnetMasks = networkIF.getPrefixLengths(); + } + + String[] result = new String[iPAddr.length]; + for (int index = 0; index < iPAddr.length; index++) { + result[index] = iPAddr[index] + "/" + subnetMasks[index]; + } + + return result; + } +} diff --git a/agent/src/main/java/io/wdd/agent/status/hardware/config/DataUnit.java b/common/src/main/java/io/wdd/common/utils/DataUnit.java similarity index 96% rename from agent/src/main/java/io/wdd/agent/status/hardware/config/DataUnit.java rename to common/src/main/java/io/wdd/common/utils/DataUnit.java index 777e57d..c535c3e 100644 --- a/agent/src/main/java/io/wdd/agent/status/hardware/config/DataUnit.java +++ b/common/src/main/java/io/wdd/common/utils/DataUnit.java @@ -1,4 +1,4 @@ -package io.wdd.agent.status.hardware.config; +package io.wdd.common.utils; import org.springframework.util.unit.DataSize; diff --git a/agent/src/main/java/io/wdd/agent/status/hardware/config/FormatUtils.java b/common/src/main/java/io/wdd/common/utils/FormatUtils.java similarity index 94% rename from agent/src/main/java/io/wdd/agent/status/hardware/config/FormatUtils.java rename to common/src/main/java/io/wdd/common/utils/FormatUtils.java index 5081041..916d134 100644 --- a/agent/src/main/java/io/wdd/agent/status/hardware/config/FormatUtils.java +++ b/common/src/main/java/io/wdd/common/utils/FormatUtils.java @@ -1,4 +1,4 @@ -package io.wdd.agent.status.hardware.config; +package io.wdd.common.utils; import java.text.DecimalFormat; diff --git a/pom.xml b/pom.xml index a50c600..239a4aa 100644 --- a/pom.xml +++ b/pom.xml @@ -35,10 +35,10 @@ - + @@ -67,10 +67,10 @@ ${alibaba-cloud.version} - + org.springframework.boot @@ -126,15 +126,15 @@ - org.springframework.boot - spring-boot-devtools - runtime + org.projectlombok + lombok true - org.projectlombok - lombok + org.springframework.boot + spring-boot-devtools + runtime true @@ -147,7 +147,7 @@ - +