From aa6af1c2cc9eb556551da696bcae985084f5fa4e Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Thu, 16 Jul 2015 15:56:37 +0900 Subject: [PATCH] #745 filter wizard bug fix. incorrect agent mapping - backport #732 --- .../applicationmap/ApplicationMapBuilder.java | 3 +++ .../pinpoint/web/applicationmap/Node.java | 9 ++++++--- .../applicationmap/ServerInstanceList.java | 20 ++++++++++++++----- .../BusinessTransactionController.java | 1 + .../pinpoint/web/view/LinkSerializer.java | 18 +++++++++++++++++ 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java index aaa0dd4b4..8b81b41fb 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java @@ -384,6 +384,9 @@ public class ApplicationMapBuilder { } else if (nodeServiceType.isWas()) { Set agentList = agentInfoService.selectAgent(node.getApplication().getName(), range); if (agentList.isEmpty()) { + logger.warn("agentInfo not found. applicationName:{}", node.getApplication()); + // avoid NPE + node.setServerInstanceList(new ServerInstanceList()); return; } logger.debug("add agentInfo. {}, {}", node.getApplication(), agentList); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/Node.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/Node.java index 5d9fa0780..f22b0b645 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/Node.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/Node.java @@ -43,8 +43,8 @@ public class Node { public static final String NODE_DELIMITER = "^"; private final Application application; - - private ServerInstanceList serverInstanceList; + // avoid NPE + private ServerInstanceList serverInstanceList = new ServerInstanceList(); private NodeHistogram nodeHistogram; @@ -74,8 +74,11 @@ public class Node { } } - + // TODO remove setter public void setServerInstanceList(ServerInstanceList serverInstanceList) { + if (serverInstanceList == null) { + throw new NullPointerException("serverInstanceList must not be null"); + } this.serverInstanceList = serverInstanceList; } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ServerInstanceList.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ServerInstanceList.java index c90bcc6bd..eb337295f 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ServerInstanceList.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ServerInstanceList.java @@ -16,12 +16,9 @@ package com.navercorp.pinpoint.web.applicationmap; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; +import com.navercorp.pinpoint.common.bo.AgentInfoBo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,6 +55,19 @@ public class ServerInstanceList { return serverInstanceList; } + public List getAgentIdList() { + final Collection> serverInstanceValueList = this.serverInstanceList.values(); + + final List agentList = new ArrayList(); + for (List serverInstanceList : serverInstanceValueList) { + for (ServerInstance serverInstance : serverInstanceList) { + AgentInfoBo agentInfo = serverInstance.getAgentInfo(); + agentList.add(agentInfo.getAgentId()); + } + } + return agentList; + } + public int getInstanceCount() { int count = 0; for (List entry : serverInstanceList.values()) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/controller/BusinessTransactionController.java b/web/src/main/java/com/navercorp/pinpoint/web/controller/BusinessTransactionController.java index 015af8204..bf7973ec1 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/controller/BusinessTransactionController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/controller/BusinessTransactionController.java @@ -178,6 +178,7 @@ public class BusinessTransactionController { if (viewVersion == 2) { + // TODO remove hashformat mv.setViewName("transactionInfoJsonHash"); } else { mv.setViewName("transactionInfoJson"); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java b/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java index df10cb70e..622e02ca6 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/view/LinkSerializer.java @@ -18,6 +18,7 @@ package com.navercorp.pinpoint.web.view; import com.navercorp.pinpoint.web.applicationmap.Link; import com.navercorp.pinpoint.web.applicationmap.Node; +import com.navercorp.pinpoint.web.applicationmap.ServerInstanceList; import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram; import com.navercorp.pinpoint.web.applicationmap.rawdata.AgentHistogram; import com.navercorp.pinpoint.web.applicationmap.rawdata.AgentHistogramList; @@ -45,6 +46,9 @@ public class LinkSerializer extends JsonSerializer { jgen.writeStringField("from", link.getFrom().getNodeName()); // necessary for go.js jgen.writeStringField("to", link.getTo().getNodeName()); // necessary for go.js + // for FilterWizard. from, to agent mapping data + writeAgentId("fromAgent", link.getFrom(), jgen); + writeAgentId("toAgent", link.getTo(), jgen); writeSimpleNode("sourceInfo", link.getFrom(), jgen); writeSimpleNode("targetInfo", link.getTo(), jgen); @@ -79,6 +83,20 @@ public class LinkSerializer extends JsonSerializer { jgen.writeEndObject(); } + private void writeAgentId(String fieldName, Node node, JsonGenerator jgen) throws IOException { + if (node.getServiceType().isWas()) { + jgen.writeFieldName(fieldName); + jgen.writeStartArray(); + ServerInstanceList serverInstanceList = node.getServerInstanceList(); + if (serverInstanceList!= null) { + for (String agentId : serverInstanceList.getAgentIdList()) { + jgen.writeObject(agentId); + } + } + jgen.writeEndArray(); + } + } + private void writeWasToWasTargetRpcList(Link link, JsonGenerator jgen) throws IOException { // write additional information to be used for filtering failed WAS -> WAS call events. jgen.writeFieldName("filterTargetRpcList");