From 7be02c0e65ab46dade4b92bcebb09085e68d6343 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Thu, 11 Oct 2012 10:18:58 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20call=20tree=20=EA=B0=9D=EC=B2=B4=20=EC=9D=B4=EB=8F=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-web/trunk@774 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../com/nhn/hippo/web/calltree/Server.java | 56 -------- .../hippo/web/calltree/ServerCallTree.java | 125 ------------------ .../nhn/hippo/web/calltree/ServerRequest.java | 50 ------- .../nhn/hippo/web/calltree/server/Server.java | 53 ++++++++ .../web/calltree/server/ServerCallTree.java | 124 +++++++++++++++++ .../web/calltree/server/ServerRequest.java | 48 +++++++ .../{service => calltree/span}/SpanAlign.java | 0 .../span}/SpanAligner.java | 0 .../BusinessTransactionController.java | 3 - .../web/controller/FlowChartController.java | 2 +- .../hippo/web/service/FlowChartService.java | 2 +- .../web/service/FlowChartServiceImpl.java | 2 +- src/main/resources/hbase.properties | 4 +- .../java/com/nhn/hippo/web/path/PathTest.java | 58 ++++++++ 14 files changed, 288 insertions(+), 239 deletions(-) delete mode 100644 src/main/java/com/nhn/hippo/web/calltree/Server.java delete mode 100644 src/main/java/com/nhn/hippo/web/calltree/ServerCallTree.java delete mode 100644 src/main/java/com/nhn/hippo/web/calltree/ServerRequest.java create mode 100644 src/main/java/com/nhn/hippo/web/calltree/server/Server.java create mode 100644 src/main/java/com/nhn/hippo/web/calltree/server/ServerCallTree.java create mode 100644 src/main/java/com/nhn/hippo/web/calltree/server/ServerRequest.java rename src/main/java/com/nhn/hippo/web/{service => calltree/span}/SpanAlign.java (100%) rename src/main/java/com/nhn/hippo/web/{service => calltree/span}/SpanAligner.java (100%) create mode 100644 src/test/java/com/nhn/hippo/web/path/PathTest.java diff --git a/src/main/java/com/nhn/hippo/web/calltree/Server.java b/src/main/java/com/nhn/hippo/web/calltree/Server.java deleted file mode 100644 index 1d0c291a1..000000000 --- a/src/main/java/com/nhn/hippo/web/calltree/Server.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.nhn.hippo.web.calltree; - -/** - * - * - * @author netspider - * - */ -public class Server implements Comparable { - private int sequence; - private final String id; - private final String agentId; - private final String endPoint; - private final boolean terminal; - - public Server(String agentId, String endPoint, boolean terminal) { - this.id = agentId + ":" + endPoint; - this.agentId = agentId; - this.endPoint = endPoint; - this.terminal = terminal; - } - - public String getId() { - return this.id; - } - - public void setSequence(int sequence) { - this.sequence = sequence; - } - - public int getSequence() { - return sequence; - } - - public String getAgentId() { - return agentId; - } - - public String getEndPoint() { - return endPoint; - } - - public boolean isTerminal() { - return terminal; - } - - @Override - public int compareTo(Server server) { - return id.compareTo(server.id); - } - - @Override - public String toString() { - return id; - } -} diff --git a/src/main/java/com/nhn/hippo/web/calltree/ServerCallTree.java b/src/main/java/com/nhn/hippo/web/calltree/ServerCallTree.java deleted file mode 100644 index 3730923ea..000000000 --- a/src/main/java/com/nhn/hippo/web/calltree/ServerCallTree.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.nhn.hippo.web.calltree; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import com.nhn.hippo.web.vo.BusinessTransactions; -import com.profiler.common.dto.thrift.Span; - -/** - * Call Tree - * - * @author netspider - * - */ -public class ServerCallTree { - - private final String PREFIX_CLIENT = "CLIENT:"; - - private final Map servers = new HashMap(); - private final Map spanIdToServerId = new HashMap(); - private final Map ServerRequests = new HashMap(); - private final List spans = new ArrayList(); - private final BusinessTransactions businessTransactions = new BusinessTransactions(); - - private boolean isBuilt = false; - - public void addSpan(Span span) { - /** - * make Servers - */ - // TODO: 여기에서 이러지말고 수집할 때 처음부터 table에 저장해둘 수 있나?? - Server Server = new Server(span.getAgentID(), span.getEndPoint(), span.isTerminal()); - - // TODO: remove this later. - if (Server.getId().contains("mysql:jdbc:") || Server.getId().contains("favicon")) { - return; - } - - if (!servers.containsKey(Server.getId())) { - servers.put(Server.getId(), Server); - } - spanIdToServerId.put(String.valueOf(span.getSpanID()), Server.getId()); - - // TODO: remove client node -// if (span.getParentSpanId() == -1) { -// Server client = new Server(PREFIX_CLIENT + span.getAgentID(), span.getEndPoint(), false); -// servers.put(client.getId(), client); -// spanIdToServerId.put(PREFIX_CLIENT + span.getSpanID(), client.getId()); -// } - - /** - * Preparing makes link (ServerRequests) - */ - if (span.getParentSpanId() == -1) { - businessTransactions.add(span); - } else { - spans.add(span); - } - } - - public ServerCallTree build() { - if (isBuilt) - return this; - - int i = 0; - for (Entry entry : servers.entrySet()) { - entry.getValue().setSequence(i++); - } - - for (Span span : spans) { - String from = String.valueOf(span.getParentSpanId()); - String to = String.valueOf(span.getSpanID()); - - Server fromServer = servers.get(spanIdToServerId.get(from)); - Server toServer = servers.get(spanIdToServerId.get(to)); - - if (fromServer == null) { - fromServer = servers.get(spanIdToServerId.get(PREFIX_CLIENT + to)); - } - - ServerRequest serverRequest = new ServerRequest(fromServer, toServer); - - // TODO: local call인 경우 보여주지 않음. - if (serverRequest.isSelfCalled()) { - continue; - } - - if (ServerRequests.containsKey(serverRequest.getId())) { - ServerRequests.get(serverRequest.getId()).increaseCallCount(); - } else { - ServerRequests.put(serverRequest.getId(), serverRequest); - } - } - - isBuilt = true; - return this; - } - - public Collection getNodes() { - return this.servers.values(); - } - - public Collection getLinks() { - return this.ServerRequests.values(); - } - - public BusinessTransactions getBusinessTransactions() { - return businessTransactions; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - - sb.append("Server=").append(servers); - sb.append("\n"); - sb.append("ServerRequest=").append(ServerRequests.values()); - - return sb.toString(); - } -} diff --git a/src/main/java/com/nhn/hippo/web/calltree/ServerRequest.java b/src/main/java/com/nhn/hippo/web/calltree/ServerRequest.java deleted file mode 100644 index 820321782..000000000 --- a/src/main/java/com/nhn/hippo/web/calltree/ServerRequest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.nhn.hippo.web.calltree; - -/** - * - * @author netspider - * - */ -public class ServerRequest { - private final String id; - private final Server from; - private final Server to; - private int callCount = 1; - - public ServerRequest(Server from, Server to) { - this.from = from; - this.to = to; - this.id = from.getId() + to.getId(); - } - - public boolean isSelfCalled() { - return from.getSequence() == to.getSequence(); - } - - public void increaseCallCount() { - callCount++; - } - - public String getId() { - return id; - } - - public Server getFrom() { - return from; - } - - public Server getTo() { - return to; - } - - public int getCallCount() { - return callCount; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("{from=").append(from).append(", to=").append(to).append(", cc=").append(callCount).append("}"); - return sb.toString(); - } -} diff --git a/src/main/java/com/nhn/hippo/web/calltree/server/Server.java b/src/main/java/com/nhn/hippo/web/calltree/server/Server.java new file mode 100644 index 000000000..3609b70bd --- /dev/null +++ b/src/main/java/com/nhn/hippo/web/calltree/server/Server.java @@ -0,0 +1,53 @@ +package com.nhn.hippo.web.calltree.server; + +/** + * @author netspider + */ +public class Server implements Comparable { + private int sequence; + private final String id; + private final String agentId; + private final String endPoint; + private final boolean terminal; + + public Server(String agentId, String endPoint, boolean terminal) { + this.id = agentId + ":" + endPoint; + this.agentId = agentId; + this.endPoint = endPoint; + this.terminal = terminal; + } + + public String getId() { + return this.id; + } + + public void setSequence(int sequence) { + this.sequence = sequence; + } + + public int getSequence() { + return sequence; + } + + public String getAgentId() { + return agentId; + } + + public String getEndPoint() { + return endPoint; + } + + public boolean isTerminal() { + return terminal; + } + + @Override + public int compareTo(Server server) { + return id.compareTo(server.id); + } + + @Override + public String toString() { + return id; + } +} diff --git a/src/main/java/com/nhn/hippo/web/calltree/server/ServerCallTree.java b/src/main/java/com/nhn/hippo/web/calltree/server/ServerCallTree.java new file mode 100644 index 000000000..89a1e23fc --- /dev/null +++ b/src/main/java/com/nhn/hippo/web/calltree/server/ServerCallTree.java @@ -0,0 +1,124 @@ +package com.nhn.hippo.web.calltree.server; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import com.nhn.hippo.web.vo.BusinessTransactions; +import com.profiler.common.dto.thrift.Span; + +/** + * Call Tree + * + * @author netspider + */ +public class ServerCallTree { + + private final String PREFIX_CLIENT = "CLIENT:"; + + private final Map servers = new HashMap(); + private final Map spanIdToServerId = new HashMap(); + private final Map ServerRequests = new HashMap(); + private final List spans = new ArrayList(); + private final BusinessTransactions businessTransactions = new BusinessTransactions(); + + private boolean isBuilt = false; + + public void addSpan(Span span) { + /** + * make Servers + */ + // TODO: 여기에서 이러지말고 수집할 때 처음부터 table에 저장해둘 수 있나?? + Server Server = new Server(span.getAgentID(), span.getEndPoint(), span.isTerminal()); + + // TODO: remove this later. + if (Server.getId().contains("mysql:jdbc:") || Server.getId().contains("favicon")) { + return; + } + + if (!servers.containsKey(Server.getId())) { + servers.put(Server.getId(), Server); + } + spanIdToServerId.put(String.valueOf(span.getSpanID()), Server.getId()); + + // TODO: remove client node +// if (span.getParentSpanId() == -1) { +// Server client = new Server(PREFIX_CLIENT + span.getAgentID(), span.getEndPoint(), false); +// servers.put(client.getId(), client); +// spanIdToServerId.put(PREFIX_CLIENT + span.getSpanID(), client.getId()); +// } + + /** + * Preparing makes link (ServerRequests) + */ + if (span.getParentSpanId() == -1) { + businessTransactions.add(span); + } else { + spans.add(span); + } + } + + public ServerCallTree build() { + if (isBuilt) + return this; + + int i = 0; + for (Entry entry : servers.entrySet()) { + entry.getValue().setSequence(i++); + } + + for (Span span : spans) { + String from = String.valueOf(span.getParentSpanId()); + String to = String.valueOf(span.getSpanID()); + + Server fromServer = servers.get(spanIdToServerId.get(from)); + Server toServer = servers.get(spanIdToServerId.get(to)); + + if (fromServer == null) { + fromServer = servers.get(spanIdToServerId.get(PREFIX_CLIENT + to)); + } + + ServerRequest serverRequest = new ServerRequest(fromServer, toServer); + + // TODO: local call인 경우 보여주지 않음. + if (serverRequest.isSelfCalled()) { + continue; + } + + if (ServerRequests.containsKey(serverRequest.getId())) { + ServerRequests.get(serverRequest.getId()).increaseCallCount(); + } else { + ServerRequests.put(serverRequest.getId(), serverRequest); + } + } + + isBuilt = true; + return this; + } + + public Collection getNodes() { + return this.servers.values(); + } + + public Collection getLinks() { + return this.ServerRequests.values(); + } + + public BusinessTransactions getBusinessTransactions() { + return businessTransactions; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + + sb.append("Server=").append(servers); + sb.append("\n"); + sb.append("ServerRequest=").append(ServerRequests.values()); + + return sb.toString(); + } +} diff --git a/src/main/java/com/nhn/hippo/web/calltree/server/ServerRequest.java b/src/main/java/com/nhn/hippo/web/calltree/server/ServerRequest.java new file mode 100644 index 000000000..09ec67dc3 --- /dev/null +++ b/src/main/java/com/nhn/hippo/web/calltree/server/ServerRequest.java @@ -0,0 +1,48 @@ +package com.nhn.hippo.web.calltree.server; + +/** + * @author netspider + */ +public class ServerRequest { + private final String id; + private final Server from; + private final Server to; + private int callCount = 1; + + public ServerRequest(Server from, Server to) { + this.from = from; + this.to = to; + this.id = from.getId() + to.getId(); + } + + public boolean isSelfCalled() { + return from.getSequence() == to.getSequence(); + } + + public void increaseCallCount() { + callCount++; + } + + public String getId() { + return id; + } + + public Server getFrom() { + return from; + } + + public Server getTo() { + return to; + } + + public int getCallCount() { + return callCount; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{from=").append(from).append(", to=").append(to).append(", cc=").append(callCount).append("}"); + return sb.toString(); + } +} diff --git a/src/main/java/com/nhn/hippo/web/service/SpanAlign.java b/src/main/java/com/nhn/hippo/web/calltree/span/SpanAlign.java similarity index 100% rename from src/main/java/com/nhn/hippo/web/service/SpanAlign.java rename to src/main/java/com/nhn/hippo/web/calltree/span/SpanAlign.java diff --git a/src/main/java/com/nhn/hippo/web/service/SpanAligner.java b/src/main/java/com/nhn/hippo/web/calltree/span/SpanAligner.java similarity index 100% rename from src/main/java/com/nhn/hippo/web/service/SpanAligner.java rename to src/main/java/com/nhn/hippo/web/calltree/span/SpanAligner.java diff --git a/src/main/java/com/nhn/hippo/web/controller/BusinessTransactionController.java b/src/main/java/com/nhn/hippo/web/controller/BusinessTransactionController.java index 6dbea8183..b8610301a 100644 --- a/src/main/java/com/nhn/hippo/web/controller/BusinessTransactionController.java +++ b/src/main/java/com/nhn/hippo/web/controller/BusinessTransactionController.java @@ -1,8 +1,6 @@ package com.nhn.hippo.web.controller; -import com.nhn.hippo.web.service.SpanAlign; import com.nhn.hippo.web.service.SpanService; -import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import java.util.List; -import java.util.UUID; /** * diff --git a/src/main/java/com/nhn/hippo/web/controller/FlowChartController.java b/src/main/java/com/nhn/hippo/web/controller/FlowChartController.java index 0bef8cf22..8dc7eff89 100644 --- a/src/main/java/com/nhn/hippo/web/controller/FlowChartController.java +++ b/src/main/java/com/nhn/hippo/web/controller/FlowChartController.java @@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.nhn.hippo.web.calltree.rpc.RPCCallTree; -import com.nhn.hippo.web.calltree.ServerCallTree; +import com.nhn.hippo.web.calltree.server.ServerCallTree; import com.nhn.hippo.web.service.FlowChartService; import com.nhn.hippo.web.vo.TraceId; diff --git a/src/main/java/com/nhn/hippo/web/service/FlowChartService.java b/src/main/java/com/nhn/hippo/web/service/FlowChartService.java index 57ea56fd4..87dbfe7ac 100755 --- a/src/main/java/com/nhn/hippo/web/service/FlowChartService.java +++ b/src/main/java/com/nhn/hippo/web/service/FlowChartService.java @@ -5,7 +5,7 @@ import java.util.Map; import java.util.Set; import com.nhn.hippo.web.calltree.rpc.RPCCallTree; -import com.nhn.hippo.web.calltree.ServerCallTree; +import com.nhn.hippo.web.calltree.server.ServerCallTree; import com.nhn.hippo.web.vo.TraceId; import com.profiler.common.dto.thrift.Span; diff --git a/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java b/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java index 74bb388c8..ce06f40f4 100755 --- a/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java +++ b/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java @@ -20,7 +20,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import com.nhn.hippo.web.calltree.rpc.RPCCallTree; -import com.nhn.hippo.web.calltree.ServerCallTree; +import com.nhn.hippo.web.calltree.server.ServerCallTree; import com.nhn.hippo.web.service.TracesProcessor.SpanHandler; import com.nhn.hippo.web.vo.TraceId; import com.profiler.common.dto.thrift.Span; diff --git a/src/main/resources/hbase.properties b/src/main/resources/hbase.properties index 2fca7995f..2bbb9d2c0 100644 --- a/src/main/resources/hbase.properties +++ b/src/main/resources/hbase.properties @@ -1,3 +1,3 @@ -hbase.client.host=localhost -#hbase.client.host=10.25.131.38 +#hbase.client.host=localhost +hbase.client.host=10.25.131.38 hbase.client.port=2181 \ No newline at end of file diff --git a/src/test/java/com/nhn/hippo/web/path/PathTest.java b/src/test/java/com/nhn/hippo/web/path/PathTest.java new file mode 100644 index 000000000..36ff9f496 --- /dev/null +++ b/src/test/java/com/nhn/hippo/web/path/PathTest.java @@ -0,0 +1,58 @@ +package com.nhn.hippo.web.path; + +import com.profiler.common.dto.thrift.Endpoint; +import com.profiler.common.dto.thrift.Span; + +import com.profiler.context.TraceID; +import org.junit.Test; + +import java.text.SimpleDateFormat; +import java.util.UUID; + +/** + * + */ +public class PathTest { + int index; + SimpleDateFormat format = new SimpleDateFormat("ss.SSS"); + + @Test + public void testPath() { + //root -> next1 -> next2 + // > - -> next3 + +// Span root = root(); +// printSpan("root", root); +// +// Span next1 = createNextSpan(root); +// printSpan("next1", next1); +// +// Span next2 = createNextSpan(next1); +// printSpan("next2", next2); +// +// Span next3 = createNextSpan(next1); +// printSpan("next3", next3); + + } + + public void printSpan(String msg, Span span) { +// System.out.println(msg + " id:" + span.getSpanID() + " pid:" + span.getParentSpanId() + " time:" + format.format(new Date(span.getTimestamp()))); + System.out.println(msg + " id:" + span.getSpanID() + " pid:" + span.getParentSpanId() + " time:" + span.getTimestamp()); + } +// private Span root() { +// TraceID traceID = TraceID.newTraceId(); +// UUID uuid = traceID.getId(); +// Span root = new Span("test", System.currentTimeMillis(), uuid.getMostSignificantBits(), uuid.getLeastSignificantBits(), Integer.toString(index++), "serviceName", traceID.getSpanId(), null, null, "http:ip:23"); +// root.setParentSpanId(traceID.getParentSpanId()); +// return root; +// } + +// private Span createNextSpan(Span span) { +// UUID uuid = new UUID(span.getMostTraceID(), span.getLeastTraceID()); +// TraceID traceID = new TraceID(uuid, span.getParentSpanId(), span.getSpanID(), true, 0); +// TraceID nextTraceId = traceID.getNextTraceId(); +// Span next = new Span("test", System.currentTimeMillis(), span.getMostTraceID(), span.getLeastTraceID(), Integer.toString(index++), "serviceName", nextTraceId.getSpanId(), null, null, "http:ip:23"); +// next.setParentSpanId(nextTraceId.getParentSpanId()); +// return next; +// } +}