diff --git a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/activethread/count/websocket/ActiveThreadCountHandlerImpl.java b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/activethread/count/websocket/ActiveThreadCountHandlerImpl.java index ff723e9c4e2f..77c6ff2dfe45 100644 --- a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/activethread/count/websocket/ActiveThreadCountHandlerImpl.java +++ b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/activethread/count/websocket/ActiveThreadCountHandlerImpl.java @@ -114,8 +114,7 @@ private void refreshWithContext(SessionContext ctx, WebSocketSession session, St } private Consumer makeTickHandler(SessionContext ctx, WebSocketSession session, String applicationName) { - final List agentKeys = - this.agentLookupService.getRecentAgents(applicationName, TimeUnit.HOURS.toMillis(1)); + final List agentKeys = this.agentLookupService.getRecentAgents(applicationName); final TickHandler handler = new TickHandler(session, applicationName, agentKeys, getFetchers(agentKeys)); final Runnable decoratedHandler = decorateHandler(ctx.getTaskDecorator(), handler); return t -> decoratedHandler.run(); diff --git a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupService.java b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupService.java index 509a96d84a5f..3ce2dcff4cce 100644 --- a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupService.java +++ b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupService.java @@ -24,6 +24,6 @@ */ public interface AgentLookupService { - List getRecentAgents(String applicationName, long timeDiffMs); + List getRecentAgents(String applicationName); } diff --git a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupServiceImpl.java b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupServiceImpl.java index 32de03c731ca..a5e4e4349d37 100644 --- a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupServiceImpl.java +++ b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/AgentLookupServiceImpl.java @@ -16,15 +16,17 @@ package com.navercorp.pinpoint.web.realtime.service; import com.navercorp.pinpoint.common.server.cluster.ClusterKey; -import com.navercorp.pinpoint.common.server.util.AgentLifeCycleState; -import com.navercorp.pinpoint.web.cluster.ClusterKeyAndStatus; -import com.navercorp.pinpoint.web.service.AgentService; -import com.navercorp.pinpoint.web.vo.agent.AgentStatus; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import com.navercorp.pinpoint.common.server.util.time.Range; +import com.navercorp.pinpoint.web.service.AgentInfoService; +import com.navercorp.pinpoint.web.vo.agent.AgentInfo; +import com.navercorp.pinpoint.web.vo.agent.AgentStatusAndLink; +import com.navercorp.pinpoint.web.vo.agent.AgentStatusFilter; +import com.navercorp.pinpoint.web.vo.agent.AgentStatusFilterChain; +import com.navercorp.pinpoint.web.vo.tree.AgentsMapByHost; +import com.navercorp.pinpoint.web.vo.tree.InstancesList; +import com.navercorp.pinpoint.web.vo.tree.SortByAgentInfo; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Objects; @@ -33,37 +35,35 @@ */ class AgentLookupServiceImpl implements AgentLookupService { - private static final Logger logger = LogManager.getLogger(AgentLookupServiceImpl.class); + private final AgentInfoService agentInfoService; - private final AgentService agentService; - - AgentLookupServiceImpl(AgentService agentService) { - this.agentService = Objects.requireNonNull(agentService, "agentService"); + AgentLookupServiceImpl(AgentInfoService agentInfoService) { + this.agentInfoService = Objects.requireNonNull(agentInfoService, "agentInfoService"); } @Override - public List getRecentAgents(String applicationName, long timeDiffMs) { - final List keyAndStatuses = getRecentAgentInfoList0(applicationName, timeDiffMs); - final List keys = new ArrayList<>(keyAndStatuses.size()); - for (final ClusterKeyAndStatus keyAndStatus: keyAndStatuses) { - if (isActive(keyAndStatus.getStatus())) { - keys.add(keyAndStatus.getClusterKey()); - } - } - return keys; + public List getRecentAgents(String applicationName) { + final long now = System.currentTimeMillis(); + return intoClusterKeyList(this.agentInfoService.getAgentsListByApplicationName( + new AgentStatusFilterChain(AgentStatusFilter::filterRunning), + applicationName, + Range.between(now, now), + SortByAgentInfo.Rules.AGENT_NAME_ASC + )); } - private List getRecentAgentInfoList0(String applicationName, long timeDiffMs) { - try { - return agentService.getRecentAgentInfoList(applicationName, timeDiffMs); - } catch (Exception e) { - logger.warn("Failed to get recent agent info list for {}", applicationName, e); + private static List intoClusterKeyList(AgentsMapByHost src) { + final List result = new ArrayList<>(src.getAgentsListsList().size()); + for (final InstancesList instancesList: src.getAgentsListsList()) { + for (final AgentStatusAndLink instance: instancesList.getInstancesList()) { + result.add(intoClusterKey(instance.getAgentInfo())); + } } - return Collections.emptyList(); + return result; } - private boolean isActive(AgentStatus agentStatus) { - return agentStatus != null && agentStatus.getState() != AgentLifeCycleState.UNKNOWN; + private static ClusterKey intoClusterKey(AgentInfo src) { + return new ClusterKey(src.getApplicationName(), src.getAgentId(), src.getStartTimestamp()); } } diff --git a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/RealtimeWebServiceConfig.java b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/RealtimeWebServiceConfig.java index c9a7b34dd514..8117f2c2f1bc 100644 --- a/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/RealtimeWebServiceConfig.java +++ b/realtime/realtime-web/src/main/java/com/navercorp/pinpoint/web/realtime/service/RealtimeWebServiceConfig.java @@ -15,6 +15,7 @@ */ package com.navercorp.pinpoint.web.realtime.service; +import com.navercorp.pinpoint.web.service.AgentInfoService; import com.navercorp.pinpoint.web.service.AgentService; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.context.annotation.Bean; @@ -28,8 +29,8 @@ public class RealtimeWebServiceConfig { @Bean @ConditionalOnBean(AgentService.class) - AgentLookupService agentLookupService(AgentService agentService) { - return new AgentLookupServiceImpl(agentService); + AgentLookupService agentLookupService(AgentInfoService agentInfoService) { + return new AgentLookupServiceImpl(agentInfoService); } }