diff --git a/server/src/main/java/io/wdd/func/controller/XrayController.java b/server/src/main/java/io/wdd/func/controller/XrayController.java index c037e20..be568b4 100644 --- a/server/src/main/java/io/wdd/func/controller/XrayController.java +++ b/server/src/main/java/io/wdd/func/controller/XrayController.java @@ -11,9 +11,9 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import static io.wdd.func.xray.beans.node.ProxyNodeSet.*; -import static io.wdd.func.xray.beans.node.ProxyNodeSet.phoenix2; @RestController @RequestMapping("/server/func/xray") @@ -27,7 +27,7 @@ public class XrayController { XrayConfigDistribute xrayConfigDistribute; @GetMapping("/test") - public void test(){ + public void test() { ArrayList> allNetworkPathList = new ArrayList<>(); @@ -56,7 +56,7 @@ public class XrayController { ); ArrayList pathD = new ArrayList<>( - Arrays.asList( + Collections.singletonList( chengduAgent ) ); diff --git a/server/src/main/java/io/wdd/rpc/agent/OctopusAgentServiceImpl.java b/server/src/main/java/io/wdd/rpc/agent/OctopusAgentServiceImpl.java index fdb0074..6de5c49 100644 --- a/server/src/main/java/io/wdd/rpc/agent/OctopusAgentServiceImpl.java +++ b/server/src/main/java/io/wdd/rpc/agent/OctopusAgentServiceImpl.java @@ -29,8 +29,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import static io.wdd.rpc.init.ServerBootUpEnvironment.ALL_AGENT_TOPIC_NAME_SET; -import static io.wdd.rpc.init.ServerBootUpEnvironment.ALL_HEALTHY_AGENT_TOPIC_NAME_LIST; +import static io.wdd.rpc.init.ServerCacheAgentStatus.ALL_AGENT_TOPIC_NAME_SET; +import static io.wdd.rpc.init.ServerCacheAgentStatus.ALL_HEALTHY_AGENT_TOPIC_NAME_LIST; import static io.wdd.rpc.message.handler.AsyncWaitOMResult.REPLAY_CACHE_MAP; import static io.wdd.rpc.message.handler.OMessageHandlerServer.AGENT_LATEST_VERSION; import static io.wdd.rpc.message.handler.OMessageHandlerServer.OCTOPUS_MESSAGE_FROM_AGENT; diff --git a/server/src/main/java/io/wdd/rpc/controller/ExecutionController.java b/server/src/main/java/io/wdd/rpc/controller/ExecutionController.java index 505c056..dad3719 100644 --- a/server/src/main/java/io/wdd/rpc/controller/ExecutionController.java +++ b/server/src/main/java/io/wdd/rpc/controller/ExecutionController.java @@ -16,7 +16,7 @@ import javax.annotation.Resource; import java.util.List; import static io.wdd.rpc.execute.result.RedisStreamReaderConfig.AGENT_STATUS_REDIS_STREAM_LISTENER_CONTAINER; -import static io.wdd.rpc.init.ServerBootUpEnvironment.ALL_AGENT_TOPIC_NAME_LIST; +import static io.wdd.rpc.init.ServerCacheAgentStatus.ALL_AGENT_TOPIC_NAME_LIST; @RestController @RequestMapping("/octopus/server/executor") diff --git a/server/src/main/java/io/wdd/rpc/controller/StatusController.java b/server/src/main/java/io/wdd/rpc/controller/StatusController.java index dfea0d4..068e6f9 100644 --- a/server/src/main/java/io/wdd/rpc/controller/StatusController.java +++ b/server/src/main/java/io/wdd/rpc/controller/StatusController.java @@ -1,10 +1,10 @@ package io.wdd.rpc.controller; -import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.wdd.common.beans.response.R; +import io.wdd.rpc.init.ServerCacheAgentStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,7 +14,7 @@ import javax.annotation.Resource; import java.util.List; import java.util.Map; -import static io.wdd.rpc.init.ServerBootUpEnvironment.*; +import static io.wdd.rpc.init.ServerCacheAgentStatus.*; @RestController @@ -22,17 +22,19 @@ import static io.wdd.rpc.init.ServerBootUpEnvironment.*; @RequestMapping("/octopus/server/status") public class StatusController { + @Resource + ServerCacheAgentStatus serverCacheAgentStatus; @ApiOperation("[ Agent-状态 ] Map") @GetMapping("/agent/status") - public R GetAllAgentHealthyStatus() { + public R> GetAllAgentHealthyStatus() { return R.ok(ALL_AGENT_STATUS_MAP); } @ApiOperation("[ 状态-Agent ] Map") @GetMapping("/status/agent") - public R GetHealthyStatusAgentList() { + public R>> GetHealthyStatusAgentList() { return R.ok(STATUS_AGENT_LIST_MAP); } @@ -51,8 +53,10 @@ public class StatusController { String data = ALL_AGENT_TOPIC_NAME_LIST.toString(); - data.replace("[",""); - data.replace("]",""); + data.replace("[", + ""); + data.replace("]", + ""); return R.ok( data ); @@ -67,5 +71,15 @@ public class StatusController { return R.ok(ALL_HEALTHY_AGENT_TOPIC_NAME_LIST); } + @ApiOperation("手动更新Agent的状态") + @PostMapping("/agent/status/update") + public R>> ManualUpdateAgentStatus() { + + // 手动调用更新 + serverCacheAgentStatus.updateAgentStatusMapCache(); + + return R.ok(STATUS_AGENT_LIST_MAP); + } + } diff --git a/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java b/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java index 952d9c3..4611d96 100644 --- a/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java +++ b/server/src/main/java/io/wdd/rpc/execute/service/CoreExecutionServiceImpl.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.wdd.common.beans.executor.ExecutionMessage; import io.wdd.common.beans.rabbitmq.OctopusMessage; import io.wdd.common.beans.rabbitmq.OctopusMessageType; -import io.wdd.common.handler.MyRuntimeException; import io.wdd.rpc.execute.config.ExecutionLog; import io.wdd.rpc.message.sender.OMessageToAgentSender; import lombok.extern.slf4j.Slf4j; @@ -19,7 +18,7 @@ import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; -import static io.wdd.rpc.init.ServerBootUpEnvironment.ALL_AGENT_TOPIC_NAME_SET; +import static io.wdd.rpc.init.ServerCacheAgentStatus.ALL_AGENT_TOPIC_NAME_SET; @Service @Slf4j diff --git a/server/src/main/java/io/wdd/rpc/init/ServerBootUpEnvironment.java b/server/src/main/java/io/wdd/rpc/init/ServerCacheAgentStatus.java similarity index 84% rename from server/src/main/java/io/wdd/rpc/init/ServerBootUpEnvironment.java rename to server/src/main/java/io/wdd/rpc/init/ServerCacheAgentStatus.java index 9090748..fe791c6 100644 --- a/server/src/main/java/io/wdd/rpc/init/ServerBootUpEnvironment.java +++ b/server/src/main/java/io/wdd/rpc/init/ServerCacheAgentStatus.java @@ -18,7 +18,7 @@ import java.util.stream.Collectors; import static io.wdd.common.beans.status.OctopusStatusMessage.ALL_AGENT_STATUS_REDIS_KEY; /** - * Server启动的时候,需要初始化一系列的信息 + * Server启动或者运行的时候,需要初 缓存一系列的信息 *

* 所有Agent的TopicName ALL_AGENT_TOPIC_NAME_SET *

@@ -26,7 +26,7 @@ import static io.wdd.common.beans.status.OctopusStatusMessage.ALL_AGENT_STATUS_R */ @Service @Slf4j -public class ServerBootUpEnvironment { +public class ServerCacheAgentStatus { /** * 存储所有的AgentTopicName的缓存 @@ -58,6 +58,11 @@ public class ServerBootUpEnvironment { */ public static final List ALL_HEALTHY_AGENT_TOPIC_NAME_LIST = new ArrayList<>(); + /** + * 记录状态信息缓存的更新时间 + */ + private static final String STATUS_UPDATE_TIME_KEY = "UPDATE_TIME"; + @Resource CoreServerService coreServerService; @@ -75,8 +80,12 @@ public class ServerBootUpEnvironment { } + /** + * 从数据库中获取所有注册过的Agent名称 + */ public void updateAllAgentTopicNameCache() { + //查询DB List allAgentInfo = coreServerService.serverGetAll(); if (CollectionUtils.isEmpty(allAgentInfo)) { @@ -100,18 +109,23 @@ public class ServerBootUpEnvironment { /** - * - * 更新Agent状态信息的全局缓存 - * - * 由定时任务或者初始化服务触发 + * 从redis中获取信息,更新Agent状态信息的全局缓存 + * ALL_AGENT_STATUS_MAP + * ALL_HEALTHY_AGENT_TOPIC_NAME_LIST + * STATUS_AGENT_LIST_MAP + *

+ * 由定时任务或者初始化服务触发 + * 2023-02-21 前端接口,手动更新 */ public void updateAgentStatusMapCache() { + // 检查,排除没有节点的情况 if (CollectionUtils.isEmpty(ALL_AGENT_TOPIC_NAME_LIST)) { log.warn("[Serer Boot Up] Octopus Serer First Boot Up ! No Agent Registered Ever!"); return; } + // 从redis中获取所有节点的当前状态 List statusList = redisTemplate .opsForHash() .multiGet( @@ -125,6 +139,9 @@ public class ServerBootUpEnvironment { return; } + // 增加更新时间 2023年2月21日 + String timeString = TimeUtils.currentTimeString(); + // 结构保存为agentStatusMap ==> agent-topic-name : STATUS(healthy, failed, unknown) HashMap agentStatusMap = new HashMap<>(32); for (int i = 0; i < ALL_AGENT_TOPIC_NAME_LIST.size(); i++) { @@ -134,17 +151,15 @@ public class ServerBootUpEnvironment { ); } - // 由于太多了,所以关闭此处log输出 - /* String currentTimeString = TimeUtils.currentTimeString(); - log.debug( - "[ AGENT HEALTHY CHECK ] time is {} , result are => {}", - currentTimeString, - agentStatusMap - );*/ // 2023-01-16 ALL_AGENT_STATUS_MAP.clear(); ALL_AGENT_STATUS_MAP.putAll(agentStatusMap); + ALL_AGENT_STATUS_MAP.put( + STATUS_UPDATE_TIME_KEY, + timeString + ); + // 2023-01-16 // 更新 状态-Agent容器 内容为 @@ -176,6 +191,12 @@ public class ServerBootUpEnvironment { // 2023-2-3 bug fix STATUS_AGENT_LIST_MAP.clear(); STATUS_AGENT_LIST_MAP.putAll(statusAgentListMap); + // 2023年2月21日,更新时间 + STATUS_AGENT_LIST_MAP.put( + STATUS_UPDATE_TIME_KEY, + Collections.singletonList(timeString) + ); + log.debug("Agent存活状态 状态-Agent名称-Map 已经更新了"); diff --git a/server/src/main/java/io/wdd/rpc/scheduler/service/status/AgentRuntimeMetricStatus.java b/server/src/main/java/io/wdd/rpc/scheduler/service/status/AgentRuntimeMetricStatus.java index b9cb421..a461729 100644 --- a/server/src/main/java/io/wdd/rpc/scheduler/service/status/AgentRuntimeMetricStatus.java +++ b/server/src/main/java/io/wdd/rpc/scheduler/service/status/AgentRuntimeMetricStatus.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.stream.Collectors; import static io.wdd.common.beans.status.OctopusStatusMessage.METRIC_STATUS_MESSAGE_TYPE; -import static io.wdd.rpc.init.ServerBootUpEnvironment.ALL_HEALTHY_AGENT_TOPIC_NAME_LIST; +import static io.wdd.rpc.init.ServerCacheAgentStatus.ALL_HEALTHY_AGENT_TOPIC_NAME_LIST; /** * 收集OctopusAgent的运行Metric信息 diff --git a/server/src/main/java/io/wdd/rpc/scheduler/service/status/MonitorAllAgentStatus.java b/server/src/main/java/io/wdd/rpc/scheduler/service/status/MonitorAllAgentStatus.java index 2267547..8614d1b 100644 --- a/server/src/main/java/io/wdd/rpc/scheduler/service/status/MonitorAllAgentStatus.java +++ b/server/src/main/java/io/wdd/rpc/scheduler/service/status/MonitorAllAgentStatus.java @@ -2,7 +2,7 @@ package io.wdd.rpc.scheduler.service.status; import io.wdd.common.beans.status.OctopusStatusMessage; import io.wdd.common.utils.TimeUtils; -import io.wdd.rpc.init.ServerBootUpEnvironment; +import io.wdd.rpc.init.ServerCacheAgentStatus; import io.wdd.rpc.scheduler.service.BuildStatusScheduleTask; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -18,7 +18,7 @@ import java.util.stream.Collectors; import static io.wdd.common.beans.status.OctopusStatusMessage.ALL_AGENT_STATUS_REDIS_KEY; import static io.wdd.common.beans.status.OctopusStatusMessage.HEALTHY_STATUS_MESSAGE_TYPE; -import static io.wdd.rpc.init.ServerBootUpEnvironment.ALL_AGENT_TOPIC_NAME_LIST; +import static io.wdd.rpc.init.ServerCacheAgentStatus.ALL_AGENT_TOPIC_NAME_LIST; /** * 更新频率被类 BuildStatusScheduleTask.class控制 @@ -46,7 +46,7 @@ public class MonitorAllAgentStatus { CollectAgentStatus collectAgentStatus; @Resource - ServerBootUpEnvironment serverBootUpEnvironment; + ServerCacheAgentStatus serverCacheAgentStatus; @Resource BuildStatusScheduleTask buildStatusScheduleTask; @@ -57,7 +57,7 @@ public class MonitorAllAgentStatus { try { // 1. 获取所有注册的Agent 手动更新 - serverBootUpEnvironment.updateAllAgentTopicNameCache(); + serverCacheAgentStatus.updateAllAgentTopicNameCache(); if (CollectionUtils.isEmpty(ALL_AGENT_TOPIC_NAME_LIST)) { log.warn("[Scheduler] No Agent Registered ! End Up Status Monitor !"); return; @@ -139,7 +139,7 @@ public class MonitorAllAgentStatus { String currentTimeString = TimeUtils.currentTimeString(); // 更新所有的缓存状态 - serverBootUpEnvironment.updateAgentStatusMapCache(); + serverCacheAgentStatus.updateAgentStatusMapCache(); // 执行Metric上报定时任务 buildStatusScheduleTask.buildAgentMetricScheduleTask();