1、内存利用率图标增加内存已用字段。

2、ping丢包率虚拟网卡模式累加。
This commit is contained in:
gaoyutao
2026-02-03 18:46:51 +08:00
parent 180c522ca3
commit f8e0ab1b2a
8 changed files with 159 additions and 89 deletions
@@ -45,6 +45,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -192,12 +193,14 @@ public class MessageHandler {
localIsp = networkInfoChild.getIsp();
}
}
// 在计算百分比之前,先并行查询所有IP归属地
Map<String, Map<String, String>> ipLocationCache = new ConcurrentHashMap<>();
tcpdumpVoList.parallelStream().forEach(vo -> {
ipLocationCache.computeIfAbsent(vo.getIp(), ip -> queryIpLocation(ip));
});
// 计算总数量
Double totalCount = 0.0;
for (TcpdumpVo tcpdumpVo : tcpdumpVoList) {
totalCount += tcpdumpVo.getCount();
}
// 分别统计IPv4和IPv6
Map<String, List<TcpdumpVo>> ipTypeMap = new HashMap<>();
@@ -206,6 +209,7 @@ public class MessageHandler {
// 按类型分类
for (TcpdumpVo tcpdumpVo : tcpdumpVoList) {
totalCount += tcpdumpVo.getCount();
String ip = tcpdumpVo.getIp();
String type = checkIPVersion(ip);
if ("IPv4".equals(type)) {
@@ -232,7 +236,7 @@ public class MessageHandler {
// 按省份运营商分组统计(过滤本地省份)
Map<String, Double> v4StatMap = new HashMap<>();
for (TcpdumpVo tcpdumpVo : ipTypeMap.get("IPv4")) {
Map<String, String> locationInfo = queryIpLocation(tcpdumpVo.getIp());
Map<String, String> locationInfo = ipLocationCache.get(tcpdumpVo.getIp());
if (locationInfo != null) {
String operator = locationInfo.get("operator");
String province = locationInfo.get("province");
@@ -277,7 +281,7 @@ public class MessageHandler {
// 按省份运营商分组统计(过滤本地省份)
Map<String, Double> v6StatMap = new HashMap<>();
for (TcpdumpVo tcpdumpVo : ipTypeMap.get("IPv6")) {
Map<String, String> locationInfo = queryIpLocation(tcpdumpVo.getIp());
Map<String, String> locationInfo = ipLocationCache.get(tcpdumpVo.getIp());
if (locationInfo != null) {
String operator = locationInfo.get("operator");
String province = locationInfo.get("province");