From bddbf10503b3deb3f2081007190c5f7bb7ea92ff Mon Sep 17 00:00:00 2001 From: qiminbao Date: Mon, 25 Aug 2025 18:02:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0TCP=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agentserver/scheduler/CpuScheduler.java | 2 +- .../agentserver/scheduler/DiskScheduler.java | 2 +- .../scheduler/DockerScheduler.java | 2 +- .../agentserver/scheduler/HeartScheduler.java | 2 +- .../scheduler/MemoryScheduler.java | 2 +- .../agentserver/scheduler/NetScheduler.java | 2 +- .../agentserver/scheduler/PointScheduler.java | 2 +- .../scheduler/SwitchBoardScheduler.java | 2 +- .../agentserver/scheduler/SysScheduler.java | 2 +- .../server/collect/config/GlobalConfig.java | 2 +- .../collect/disk/impl/DiskServiceImpl.java | 2 +- .../collect/net/impl/NetServiceImpl.java | 4 +- .../system/impl/SystemServiceImpl.java | 7 ++-- .../agentserver/server/collect/vo/DiskVO.java | 2 +- .../server/collect/vo/MemoryVO.java | 2 +- .../agentserver/server/collect/vo/NetVO.java | 8 ++-- .../server/collect/vo/SystemVO.java | 11 ++--- .../server/netty/NettyTcpClient.java | 4 +- .../server/netty/handler/DecoderHandler.java | 32 ++++++--------- .../server/netty/handler/EncoderHandler.java | 41 ------------------- src/main/resources/application-dev.yml | 4 +- src/main/resources/application-prod.yml | 4 +- 22 files changed, 46 insertions(+), 95 deletions(-) delete mode 100644 src/main/java/com/tongran/agentserver/server/netty/handler/EncoderHandler.java diff --git a/src/main/java/com/tongran/agentserver/scheduler/CpuScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/CpuScheduler.java index 46e294b..1866fc9 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/CpuScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/CpuScheduler.java @@ -56,7 +56,7 @@ public class CpuScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("CPU").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送CPU信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/scheduler/DiskScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/DiskScheduler.java index dcadbb9..cf25ee5 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/DiskScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/DiskScheduler.java @@ -59,7 +59,7 @@ public class DiskScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("DISK").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送磁盘信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/scheduler/DockerScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/DockerScheduler.java index 2829589..f686982 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/DockerScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/DockerScheduler.java @@ -59,7 +59,7 @@ public class DockerScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("DOCKER").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送容器信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/scheduler/HeartScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/HeartScheduler.java index d4ac35d..a84ed50 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/HeartScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/HeartScheduler.java @@ -58,7 +58,7 @@ public class HeartScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("HEARTBEAT").data(object.toString()).build(); // 将对象转为 JSON 字符串 标识 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送心跳包={}",json); nettyTcpClient.sendMessage(json); }; diff --git a/src/main/java/com/tongran/agentserver/scheduler/MemoryScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/MemoryScheduler.java index 4c088ac..40e15c4 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/MemoryScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/MemoryScheduler.java @@ -57,7 +57,7 @@ public class MemoryScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("MEMORY").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送内存信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/scheduler/NetScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/NetScheduler.java index 143a479..5b2f81b 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/NetScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/NetScheduler.java @@ -59,7 +59,7 @@ public class NetScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("NET").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送网卡信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/scheduler/PointScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/PointScheduler.java index 65ab937..66a284a 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/PointScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/PointScheduler.java @@ -59,7 +59,7 @@ public class PointScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("POINT").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送挂载点信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/scheduler/SwitchBoardScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/SwitchBoardScheduler.java index 1477404..d02418f 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/SwitchBoardScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/SwitchBoardScheduler.java @@ -57,7 +57,7 @@ public class SwitchBoardScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("SWITCHBOARD").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送交换机信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/scheduler/SysScheduler.java b/src/main/java/com/tongran/agentserver/scheduler/SysScheduler.java index 9870379..c609525 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/SysScheduler.java +++ b/src/main/java/com/tongran/agentserver/scheduler/SysScheduler.java @@ -56,7 +56,7 @@ public class SysScheduler { String clientId = AgentUtil.getMotherboardUUID(); Message message = Message.builder().clientId(clientId).dataType("SYSTEM").data(data).build(); // 将对象转为 JSON 字符串 - String json = JSON.toJSONString(message); + String json = "agent-tcp:"+JSON.toJSONString(message)+"@tong-ran"; AssertLog.info("发送系统信息包={}",json); nettyTcpClient.sendMessage(json); } diff --git a/src/main/java/com/tongran/agentserver/server/collect/config/GlobalConfig.java b/src/main/java/com/tongran/agentserver/server/collect/config/GlobalConfig.java index 80fb491..44afa25 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/config/GlobalConfig.java +++ b/src/main/java/com/tongran/agentserver/server/collect/config/GlobalConfig.java @@ -27,7 +27,7 @@ public class GlobalConfig { private static void loadConfigFromFile() { Properties props = new Properties(); - try (InputStream input = Files.newInputStream(Paths.get("/data/agent-server/config/switch_config.txt"))) { + try (InputStream input = Files.newInputStream(Paths.get("/usr/local/tongran/config/switch_config.txt"))) { // 加载配置文件 props.load(input); diff --git a/src/main/java/com/tongran/agentserver/server/collect/disk/impl/DiskServiceImpl.java b/src/main/java/com/tongran/agentserver/server/collect/disk/impl/DiskServiceImpl.java index e92e368..cf2cb46 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/disk/impl/DiskServiceImpl.java +++ b/src/main/java/com/tongran/agentserver/server/collect/disk/impl/DiskServiceImpl.java @@ -28,7 +28,7 @@ public class DiskServiceImpl implements DiskService { DiskVO diskVO = DiskVO.builder().build(); diskVO.setName(disk.getName());//磁盘名称 diskVO.setSerial(disk.getSerial());//序列号 - diskVO.setTotal(disk.getSize());//磁盘大小(GB) + diskVO.setTotal(disk.getSize());//磁盘大小 diskVO.setWriteTimes(disk.getWrites());//磁盘写入次数 diskVO.setReadTimes(disk.getReads());//磁盘读取次数 diskVO.setWriteBytes(disk.getReadBytes());//磁盘写入字节 diff --git a/src/main/java/com/tongran/agentserver/server/collect/net/impl/NetServiceImpl.java b/src/main/java/com/tongran/agentserver/server/collect/net/impl/NetServiceImpl.java index a69fcdd..8f66c7c 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/net/impl/NetServiceImpl.java +++ b/src/main/java/com/tongran/agentserver/server/collect/net/impl/NetServiceImpl.java @@ -73,8 +73,8 @@ public class NetServiceImpl implements NetService { if(Objects.nonNull(netVO)){ netVO.setInDropped(net.getInDrops());//入站丢包 netVO.setOutDropped(net.getCollisions());//出站丢包 - netVO.setInSpeed(FormatUtil.formatBytes(bytesRecv));//接收流量 - netVO.setOutSpeed(FormatUtil.formatBytes(bytesSent));//发送流量 + netVO.setInSpeed(bytesRecv);//接收流量 + netVO.setOutSpeed(bytesSent);//发送流量 list.add(netVO); } } diff --git a/src/main/java/com/tongran/agentserver/server/collect/system/impl/SystemServiceImpl.java b/src/main/java/com/tongran/agentserver/server/collect/system/impl/SystemServiceImpl.java index c971aa0..3372fc8 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/system/impl/SystemServiceImpl.java +++ b/src/main/java/com/tongran/agentserver/server/collect/system/impl/SystemServiceImpl.java @@ -114,12 +114,13 @@ public class SystemServiceImpl implements SystemService { } // 获取硬盘总可用空间 - public double diskSpace() { - double diskSizeTotal = 0; + public long diskSpace() { + long diskSizeTotal = 0; File[] roots = File.listRoots(); // System.out.println("\n===== 硬盘空间信息 ====="); for (File root : roots) { - diskSizeTotal += (double) root.getFreeSpace() / (1024 * 1024 * 1024); + diskSizeTotal += root.getFreeSpace(); +// diskSizeTotal += (double) root.getFreeSpace() / (1024 * 1024 * 1024); // System.out.printf("磁盘: %s\n", root.getAbsolutePath()); // System.out.printf("总空间: %.2f GB\n", (double) root.getTotalSpace() / (1024 * 1024 * 1024)); // System.out.printf("可用空间: %.2f GB\n", (double) root.getFreeSpace() / (1024 * 1024 * 1024)); diff --git a/src/main/java/com/tongran/agentserver/server/collect/vo/DiskVO.java b/src/main/java/com/tongran/agentserver/server/collect/vo/DiskVO.java index 0261379..2bd6beb 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/vo/DiskVO.java +++ b/src/main/java/com/tongran/agentserver/server/collect/vo/DiskVO.java @@ -22,7 +22,7 @@ public class DiskVO implements Serializable { @Schema(description = "序列号") private String serial; - @Schema(description = "磁盘大小(GB)") + @Schema(description = "磁盘大小") private long total; @Schema(description = "磁盘写入速率") diff --git a/src/main/java/com/tongran/agentserver/server/collect/vo/MemoryVO.java b/src/main/java/com/tongran/agentserver/server/collect/vo/MemoryVO.java index 893533d..d5aa5a7 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/vo/MemoryVO.java +++ b/src/main/java/com/tongran/agentserver/server/collect/vo/MemoryVO.java @@ -17,7 +17,7 @@ public class MemoryVO implements Serializable { private static final long serialVersionUID = 2L; @Schema(description = "交换卷/文件的可用空间(字节)") - private double swapSizeFree; + private long swapSizeFree; @Schema(description = "内存利用率") private double untilzation; diff --git a/src/main/java/com/tongran/agentserver/server/collect/vo/NetVO.java b/src/main/java/com/tongran/agentserver/server/collect/vo/NetVO.java index 69e82e2..1a2672e 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/vo/NetVO.java +++ b/src/main/java/com/tongran/agentserver/server/collect/vo/NetVO.java @@ -38,12 +38,12 @@ public class NetVO implements Serializable { private long outDropped; @Schema(description = "发送流量") - private String outSpeed; + private long outSpeed; @Schema(description = "接收流量") - private String inSpeed; + private long inSpeed; - @Schema(description = "接收速度") - private String speed; +// @Schema(description = "接收速度") +// private String speed; } diff --git a/src/main/java/com/tongran/agentserver/server/collect/vo/SystemVO.java b/src/main/java/com/tongran/agentserver/server/collect/vo/SystemVO.java index 2c0441f..4622719 100644 --- a/src/main/java/com/tongran/agentserver/server/collect/vo/SystemVO.java +++ b/src/main/java/com/tongran/agentserver/server/collect/vo/SystemVO.java @@ -31,8 +31,8 @@ public class SystemVO implements Serializable { @Schema(description = "登录用户数") private int usersNum; - @Schema(description = "硬盘:总可用空间") - private double diskSizeTotal; + @Schema(description = "硬盘:总可用空间(字节)") + private long diskSizeTotal; @Schema(description = "系统启动时间") private long bootTime; @@ -46,13 +46,10 @@ public class SystemVO implements Serializable { @Schema(description = "系统正常运行时间") private long upTime; - @Schema(description = "进程数") - private double procNum; - private String uuid; - @Schema(description = "时间戳") - private long timeStamp; +// @Schema(description = "时间戳") +// private long timeStamp; } diff --git a/src/main/java/com/tongran/agentserver/server/netty/NettyTcpClient.java b/src/main/java/com/tongran/agentserver/server/netty/NettyTcpClient.java index 5cb1fee..9342cae 100644 --- a/src/main/java/com/tongran/agentserver/server/netty/NettyTcpClient.java +++ b/src/main/java/com/tongran/agentserver/server/netty/NettyTcpClient.java @@ -2,13 +2,13 @@ package com.tongran.agentserver.server.netty; import com.tongran.agentserver.server.netty.config.AgentNettyConfig; import com.tongran.agentserver.server.netty.handler.DecoderHandler; -import com.tongran.agentserver.server.netty.handler.EncoderHandler; import com.tongran.agentserver.server.netty.handler.NettyClientHandler; import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.string.StringEncoder; import io.netty.handler.timeout.IdleStateHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,7 +60,7 @@ public class NettyTcpClient { ChannelPipeline pipeline = ch.pipeline(); // 添加编解码器 pipeline.addLast("decoder", new DecoderHandler()); - pipeline.addLast("encoder", new EncoderHandler()); + pipeline.addLast("encoder", new StringEncoder()); // 添加心跳机制 pipeline.addLast("idleStateHandler", new IdleStateHandler(0, 0, 90, TimeUnit.SECONDS)); diff --git a/src/main/java/com/tongran/agentserver/server/netty/handler/DecoderHandler.java b/src/main/java/com/tongran/agentserver/server/netty/handler/DecoderHandler.java index 9264a57..95e95d8 100644 --- a/src/main/java/com/tongran/agentserver/server/netty/handler/DecoderHandler.java +++ b/src/main/java/com/tongran/agentserver/server/netty/handler/DecoderHandler.java @@ -1,11 +1,6 @@ package com.tongran.agentserver.server.netty.handler; -import com.alibaba.fastjson2.JSONObject; -import com.tongran.agentserver.server.netty.annotation.AgentDispatcher; import com.tongran.agentserver.server.netty.basics.AgentDispatcherManager; -import com.tongran.agentserver.server.netty.basics.AgentHandler; -import com.tongran.agentserver.server.netty.model.Message; -import com.tongran.agentserver.server.netty.model.UpMsgResponse; import com.tongran.agentserver.utils.AssertLog; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandler; @@ -33,20 +28,19 @@ public class DecoderHandler extends ChannelInboundHandlerAdapter { ByteBuf byteBuf = (ByteBuf) msg; String messages = byteBuf.toString(CharsetUtil.UTF_8); // 指定字符集解码 AssertLog.info("<<[up]:[up-content]==>{}", messages); - boolean startsWith = messages.startsWith("agent-server:"); - boolean endsWith = messages.endsWith("@tong-ran"); - if(startsWith && endsWith){ - JSONObject jsonObject = JSONObject.parseObject(messages); - String clientId = jsonObject.getString("clientId"); - String dataType = jsonObject.getString("dataType"); - AgentHandler msgHandler = agentDispatcherManager.getHandler(dataType + "&" + AgentDispatcher.VersionEnum.V1.value); - UpMsgResponse response = msgHandler.upHandle(messages,clientId); - Message agentMessage = Message.builder().build(); - agentMessage.setClientId(clientId); - agentMessage.setDataType(response.getDataType()); - agentMessage.setData(response.getContent()); - ctx.fireChannelRead(agentMessage);//传递到下一个handler - } +// JSONObject jsonObject = JSONObject.parseObject(messages); +// String clientId = jsonObject.getString("clientId"); +// String dataType = jsonObject.getString("dataType"); +// AgentHandler msgHandler = agentDispatcherManager.getHandler(dataType + "&" + AgentDispatcher.VersionEnum.V1.value); +// UpMsgResponse response = msgHandler.upHandle(messages,clientId); +// if(Objects.nonNull(response)){ +// Message agentMessage = Message.builder().build(); +// agentMessage.setClientId(clientId); +// agentMessage.setDataType(response.getDataType()); +// agentMessage.setData(response.getContent()); +// String json = "agent-tcp:"+ JSON.toJSONString(agentMessage)+"@tong-ran"; +// ctx.fireChannelRead(json);//传递到下一个handler +// } byteBuf.release(); // 释放 ByteBuf 资源(重要!) } else { System.out.println("Unexpected message type: " + msg.getClass()); diff --git a/src/main/java/com/tongran/agentserver/server/netty/handler/EncoderHandler.java b/src/main/java/com/tongran/agentserver/server/netty/handler/EncoderHandler.java deleted file mode 100644 index 012e678..0000000 --- a/src/main/java/com/tongran/agentserver/server/netty/handler/EncoderHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.tongran.agentserver.server.netty.handler; - -import com.alibaba.fastjson2.JSON; -import com.tongran.agentserver.server.netty.model.Message; -import com.tongran.agentserver.utils.AssertLog; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOutboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; - -import java.nio.charset.StandardCharsets; - -@Component -@ChannelHandler.Sharable -public class EncoderHandler extends ChannelOutboundHandlerAdapter { - - /** - * 消息解码器 - */ - @Override - public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (msg instanceof Message) { - Message entity = (Message) msg; - if (StringUtils.isBlank(entity.getData())) { - AssertLog.error(">>[down]:errorContent:{}", msg); - return; - } - AssertLog.info(">>[down]:[content]==>{}", entity.getData()); - String json = "agent-tcp:"+JSON.toJSONString(entity)+"@tong-ran"; - byte[] bytes = json.getBytes(StandardCharsets.UTF_8); // 显式指定 UTF-8 -// byte[] bytes = EscapeUtil.hexStringToByteArray(entity.getContent()); - ByteBuf buf = Unpooled.wrappedBuffer(bytes); - ctx.write(buf, promise); - } - } - -} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index f6b53d6..8813dbb 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -11,11 +11,11 @@ knife4j: # 日志配置 logging: file: - path: /data/agent-server/logs + path: /usr/local/tongran/logs netty: server: - host: 127.0.0.1 + host: 172.16.15.103 port: 6610 client: client-id: client-001 diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index f6b53d6..8813dbb 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -11,11 +11,11 @@ knife4j: # 日志配置 logging: file: - path: /data/agent-server/logs + path: /usr/local/tongran/logs netty: server: - host: 127.0.0.1 + host: 172.16.15.103 port: 6610 client: client-id: client-001