diff --git a/springboot-backend/src/main/java/com/admin/common/task/CheckGostConfigAsync.java b/springboot-backend/src/main/java/com/admin/common/task/CheckGostConfigAsync.java index 280993e..244b782 100644 --- a/springboot-backend/src/main/java/com/admin/common/task/CheckGostConfigAsync.java +++ b/springboot-backend/src/main/java/com/admin/common/task/CheckGostConfigAsync.java @@ -32,6 +32,11 @@ public class CheckGostConfigAsync { @Lazy private SpeedLimitService speedLimitService; + @Resource + @Lazy + private TunnelService tunnelService; + + /** * 清理孤立的Gost配置项 @@ -44,6 +49,8 @@ public class CheckGostConfigAsync { cleanOrphanedServices(gostConfig, node); cleanOrphanedChains(gostConfig, node); cleanOrphanedLimiters(gostConfig, node); + syncLimiters(gostConfig, node); + // syncServices(gostConfig, node); } } @@ -57,36 +64,37 @@ public class CheckGostConfigAsync { for (ConfigItem service : gostConfig.getServices()) { safeExecute(() -> { - if (Objects.equals(service.getName(), "web_api")) { - return; // 排除API服务 + + if (!Objects.equals(service.getName(), "web_api")){ + String[] serviceIds = parseServiceName(service.getName()); + if (serviceIds.length == 4) { + String forwardId = serviceIds[0]; + String userId = serviceIds[1]; + String userTunnelId = serviceIds[2]; + String type = serviceIds[3]; + + if (Objects.equals(type, "tcp")) { // 只处理TCP,避免重复处理 + Forward forward = forwardService.getById(forwardId); + if (forward == null) { + log.info("删除孤立的服务: {} (节点: {})", service.getName(), node.getId()); + GostDto gostDto = GostUtil.DeleteService(node.getId(), forwardId + "_" + userId + "_" + userTunnelId); + System.out.println(gostDto); + } + } + + + if (Objects.equals(type, "tls")) { + Forward forward = forwardService.getById(forwardId); + if (forward == null) { + log.info("删除孤立的服务: {} (节点: {})", service.getName(), node.getId()); + GostUtil.DeleteRemoteService(node.getId(), forwardId+"_"+userId+"_"+userTunnelId); + } + } + + } } - String[] serviceIds = parseServiceName(service.getName()); - if (serviceIds.length == 4) { - String forwardId = serviceIds[0]; - String userId = serviceIds[1]; - String userTunnelId = serviceIds[2]; - String type = serviceIds[3]; - if (Objects.equals(type, "tcp")) { // 只处理TCP,避免重复处理 - Forward forward = forwardService.getById(forwardId); - if (forward == null) { - log.info("删除孤立的服务: {} (节点: {})", service.getName(), node.getId()); - GostDto gostDto = GostUtil.DeleteService(node.getId(), forwardId + "_" + userId + "_" + userTunnelId); - System.out.println(gostDto); - } - } - - - if (Objects.equals(type, "tls")) { - Forward forward = forwardService.getById(forwardId); - if (forward == null) { - log.info("删除孤立的服务: {} (节点: {})", service.getName(), node.getId()); - GostUtil.DeleteRemoteService(node.getId(), forwardId+"_"+userId+"_"+userTunnelId); - } - } - - } }, "清理服务 " + service.getName()); } @@ -142,6 +150,52 @@ public class CheckGostConfigAsync { } } + /** + * 同步限流器 + */ + private void syncLimiters(GostConfigDto gostConfig, Node node) { + List tunnelList = tunnelService.list(new QueryWrapper().eq("in_node_id", node.getId())); + if (tunnelList == null || tunnelList.isEmpty()) return; + safeExecute(() -> { + StringBuilder tunnelIds = new StringBuilder(); + for (Tunnel tunnel : tunnelList) { + tunnelIds.append(tunnel.getId()).append(","); + } + String ids = tunnelIds.deleteCharAt(tunnelIds.length() - 1).toString(); + List speedLimits = speedLimitService.list(new QueryWrapper().in("tunnel_id", ids)); + if (speedLimits != null && !speedLimits.isEmpty()) { + List limiters = gostConfig.getLimiters(); + List limiters_ids = new ArrayList<>(); + List speedLimits_ids = new ArrayList<>(); + if (limiters != null){ + for (ConfigItem limiter : limiters) { + limiters_ids.add(Long.valueOf(limiter.getName())); + } + } + for (SpeedLimit speedLimit : speedLimits) { + speedLimits_ids.add(speedLimit.getId()); + } + List diff = new ArrayList<>(speedLimits_ids); + diff.removeAll(limiters_ids); + System.out.println(diff); + if (!diff.isEmpty()) { + + for (Long speed_id : diff) { + SpeedLimit speedLimit = speedLimitService.getById(speed_id); + if (speedLimit != null) { + SpeedLimitUpdateDto speedLimitUpdateDto = new SpeedLimitUpdateDto(); + speedLimitUpdateDto.setId(speed_id); + speedLimitUpdateDto.setName(speedLimit.getName()); + speedLimitUpdateDto.setSpeed(speedLimit.getSpeed()); + speedLimitUpdateDto.setTunnelId(speedLimit.getTunnelId()); + speedLimitUpdateDto.setTunnelName(speedLimit.getTunnelName()); + speedLimitService.updateSpeedLimit(speedLimitUpdateDto); + } + } + } + } + }, "同步限流器 "); + } /** * 安全执行操作,捕获异常