From 0235e19708a0f81a4d7b737833a02fd286c93aa7 Mon Sep 17 00:00:00 2001 From: emeroad Date: Tue, 11 Jun 2024 14:12:20 +0900 Subject: [PATCH] [#noissue] Cleanup ResponseTimeHistogramService --- .../StatisticsServerGroupListFactory.java | 2 +- .../ResponseTimeHistogramServiceImpl.java | 157 +++++++++++------- 2 files changed, 102 insertions(+), 57 deletions(-) diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/StatisticsServerGroupListFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/StatisticsServerGroupListFactory.java index 81e01e03fd58..d41e98694a9d 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/StatisticsServerGroupListFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/appender/server/StatisticsServerGroupListFactory.java @@ -39,7 +39,7 @@ public class StatisticsServerGroupListFactory implements ServerGroupListFactory private final ServerGroupListDataSource serverGroupListDataSource; public StatisticsServerGroupListFactory(ServerGroupListDataSource serverGroupListDataSource) { - this.serverGroupListDataSource = serverGroupListDataSource; + this.serverGroupListDataSource = Objects.requireNonNull(serverGroupListDataSource, "serverGroupListDataSource"); } @Override diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java index e8a5146493a3..b53146590e09 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/ResponseTimeHistogramServiceImpl.java @@ -83,9 +83,9 @@ public ResponseTimeHistogramServiceImpl(LinkSelectorFactory linkSelectorFactory, this.mapResponseDao = Objects.requireNonNull(mapResponseDao, "mapResponseDao"); } - private ServerGroupListFactory createServerGroupListFactory(ResponseTimeHistogramServiceOption option) { + private ServerGroupListFactory createServerGroupListFactory(boolean isUseStatisticsAgentState) { ServerGroupListDataSource serverGroupListDataSource = serverInstanceDatasourceService.getServerGroupListDataSource(); - if (option.isUseStatisticsAgentState()) { + if (isUseStatisticsAgentState) { return new StatisticsServerGroupListFactory(serverGroupListDataSource); } return new DefaultServerGroupListFactory(serverGroupListDataSource); @@ -104,72 +104,117 @@ public AgentHistogramList selectResponseTimeHistogramData(Application applicatio @Override public NodeHistogramSummary selectNodeHistogramData(ResponseTimeHistogramServiceOption option) { - Node node = new Node(option.getApplication()); + Application application = option.getApplication(); ServiceType applicationServiceType = application.getServiceType(); - List sourceApplications = option.getFromApplications(); - List destinationApplications = option.getToApplications(); - - final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory(); - final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option); - if (applicationServiceType.isWas()) { - NodeHistogram nodeHistogram = nodeHistogramFactory.createWasNodeHistogram(option.getApplication(), option.getRange()); - node.setNodeHistogram(nodeHistogram); - ServerGroupList serverGroupList = serverGroupListFactory.createWasNodeInstanceList(node, option.getRange().getToInstant()); - return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); + return getWasNodeHistogramSummary(option); } else if (isTerminal(applicationServiceType)) { - if (sourceApplications.isEmpty()) { - return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange()); - } - LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(option.getApplication()); - LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP); - LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, option.getRange(), 1, 0); - - ServerGroupList serverGroupList = serverGroupListFactory.createEmptyNodeInstanceList(); - if (applicationServiceType.isTerminal() || applicationServiceType.isAlias()) { - serverGroupList = serverGroupListFactory.createTerminalNodeInstanceList(node, linkDataDuplexMap); - } - - NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap); - LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, option.getRange()); - NodeHistogram nodeHistogram = nodeHistogramFactory.createTerminalNodeHistogram(option.getApplication(), option.getRange(), linkList); - return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); + return getTerminalNodeHistogramSummary(option); } else if (applicationServiceType.isQueue()) { - if (sourceApplications.isEmpty()) { - //scan callee from queue node to find sourceApplication out of serverMap search bound is possible - return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange()); - } - LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(option.getApplication()); - LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP); - LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, option.getRange(), 1, 0); - - ServerGroupList serverGroupList = serverGroupListFactory.createQueueNodeInstanceList(node, linkDataDuplexMap); - - NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap); - LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, option.getRange()); - NodeHistogram nodeHistogram = nodeHistogramFactory.createQueueNodeHistogram(option.getApplication(), option.getRange(), linkList); - return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); + return getQueueNodeHistogramSummary(option); } else if (applicationServiceType.isUser()) { - if (destinationApplications.isEmpty()) { - return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange()); - } - LinkDataMapProcessor sourceApplicationFilter = new SourceApplicationFilter(option.getApplication()); - LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, LinkDataMapProcessor.NO_OP, sourceApplicationFilter); - LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(destinationApplications, option.getRange(), 0, 1); + return getUserNodeHistogramSummary(option); + } else { + final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState()); + Range range = option.getRange(); + return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range); + } + } - ServerGroupList serverGroupList = serverGroupListFactory.createUserNodeInstanceList(); + private NodeHistogramSummary getUserNodeHistogramSummary(ResponseTimeHistogramServiceOption option) { + Application application = option.getApplication(); + Range range = option.getRange(); + List destinationApplications = option.getToApplications(); - NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap); - LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, option.getRange()); - NodeHistogram nodeHistogram = nodeHistogramFactory.createUserNodeHistogram(option.getApplication(), option.getRange(), linkList); - return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); - } else { - return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange()); + final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState()); + if (destinationApplications.isEmpty()) { + return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range); + } + LinkDataMapProcessor sourceApplicationFilter = new SourceApplicationFilter(application); + LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, LinkDataMapProcessor.NO_OP, sourceApplicationFilter); + LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(destinationApplications, range, 0, 1); + + ServerGroupList serverGroupList = serverGroupListFactory.createUserNodeInstanceList(); + + NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap); + LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, range); + + final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory(); + NodeHistogram nodeHistogram = nodeHistogramFactory.createUserNodeHistogram(application, range, linkList); + return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); + } + + private NodeHistogramSummary getWasNodeHistogramSummary(ResponseTimeHistogramServiceOption option) { + Application application = option.getApplication(); + Range range = option.getRange(); + + Node node = new Node(application); + final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory(); + NodeHistogram nodeHistogram = nodeHistogramFactory.createWasNodeHistogram(application, range); + node.setNodeHistogram(nodeHistogram); + final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState()); + ServerGroupList serverGroupList = serverGroupListFactory.createWasNodeInstanceList(node, range.getToInstant()); + return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); + } + + private NodeHistogramSummary getTerminalNodeHistogramSummary(ResponseTimeHistogramServiceOption option) { + Application application = option.getApplication(); + Range range = option.getRange(); + ServiceType applicationServiceType = application.getServiceType(); + + final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState()); + List sourceApplications = option.getFromApplications(); + if (sourceApplications.isEmpty()) { + return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range); + } + LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(application); + LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP); + LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, range, 1, 0); + + ServerGroupList serverGroupList = serverGroupListFactory.createEmptyNodeInstanceList(); + if (applicationServiceType.isTerminal() || applicationServiceType.isAlias()) { + Node node = new Node(application); + serverGroupList = serverGroupListFactory.createTerminalNodeInstanceList(node, linkDataDuplexMap); } + + NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap); + LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, range); + + final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory(); + NodeHistogram nodeHistogram = nodeHistogramFactory.createTerminalNodeHistogram(application, range, linkList); + return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); } + + private NodeHistogramSummary getQueueNodeHistogramSummary(ResponseTimeHistogramServiceOption option) { + + Application application = option.getApplication(); + Range range = option.getRange(); + + final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState()); + List sourceApplications = option.getFromApplications(); + if (sourceApplications.isEmpty()) { + //scan callee from queue node to find sourceApplication out of serverMap search bound is possible + return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range); + } + LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(application); + LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP); + LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, range, 1, 0); + + Node node = new Node(application); + ServerGroupList serverGroupList = serverGroupListFactory.createQueueNodeInstanceList(node, linkDataDuplexMap); + + NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap); + LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, range); + + final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory(); + NodeHistogram nodeHistogram = nodeHistogramFactory.createQueueNodeHistogram(application, range, linkList); + return new NodeHistogramSummary(application, serverGroupList, nodeHistogram); + } + + private boolean isTerminal(ServiceType applicationServiceType) { return applicationServiceType.isTerminal() || applicationServiceType.isUnknown() || applicationServiceType.isAlias(); }