[유치수] [NOBTS] refactoring server tree rollback

git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-web/trunk@849 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
Chisu Yu
2012-11-07 08:30:45 +00:00
parent 43375df7bc
commit d27dfa8a82
2 changed files with 101 additions and 71 deletions
@@ -1,107 +1,137 @@
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map.Entry;
import com.nhn.hippo.web.vo.BusinessTransactions;
import com.profiler.common.bo.SpanBo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Call Tree
*
*
* @author netspider
*/
public class ServerCallTree {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private Logger logger = LoggerFactory.getLogger(this.getClass());
private final String PREFIX_CLIENT = "CLIENT:";
private final String PREFIX_CLIENT = "CLIENT:";
private final Map<String, Server> servers = new HashMap<String, Server>();
private final Map<String, String> spanIdToServerId = new HashMap<String, String>();
private final Map<String, ServerRequest> ServerRequests = new HashMap<String, ServerRequest>();
private final BusinessTransactions businessTransactions = new BusinessTransactions();
private final Map<String, Server> servers = new HashMap<String, Server>();
private final Map<String, String> spanIdToServerId = new HashMap<String, String>();
private final Map<String, ServerRequest> ServerRequests = new HashMap<String, ServerRequest>();
private final List<SpanBo> spans = new ArrayList<SpanBo>();
private final BusinessTransactions businessTransactions = new BusinessTransactions();
public void addSpan(SpanBo span) {
Server server = new Server(span.getAgentId(), span.getApplicationName(), span.getEndPoint(), span.isTerminal());
private boolean isBuilt = false;
if (server.getId() == null) {
return;
}
public void addSpan(SpanBo span) {
/**
* make Servers
*/
// TODO: 여기에서 이러지말고 수집할 때 처음부터 table에 저장해둘 수 있나??
Server server = new Server(span.getAgentId(), span.getApplicationName(), span.getEndPoint(), span.isTerminal());
if (!servers.containsKey(server.getId())) {
server.setSequence(servers.size());
servers.put(server.getId(), server);
}
spanIdToServerId.put(String.valueOf(span.getSpanId()), server.getId());
if (server.getId() == null) {
return;
}
// TODO: remove this later.
if (server.getId().contains("mysql:jdbc:") || server.getId().contains("favicon")) {
return;
}
// TODO: remove client node
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.getApplicationName(), span.getEndPoint(), false);
// Server client = new Server(PREFIX_CLIENT + span.getAgentID(), span.getEndPoint(), false);
// servers.put(client.getId(), client);
// spanIdToServerId.put(PREFIX_CLIENT + span.getSpanId(), client.getId());
// spanIdToServerId.put(PREFIX_CLIENT + span.getSpanID(), client.getId());
// }
/**
* Preparing makes link (ServerRequests)
*/
if (span.getParentSpanId() == -1) {
businessTransactions.add(span);
} else {
String from = String.valueOf(span.getParentSpanId());
String to = String.valueOf(span.getSpanId());
/**
* Preparing makes link (ServerRequests)
*/
if (span.getParentSpanId() == -1) {
businessTransactions.add(span);
} else {
spans.add(span);
}
}
Server fromServer = servers.get(spanIdToServerId.get(from));
Server toServer = servers.get(spanIdToServerId.get(to));
public ServerCallTree build() {
if (isBuilt)
return this;
if (fromServer == null) {
fromServer = servers.get(spanIdToServerId.get(PREFIX_CLIENT + to));
}
int i = 0;
for (Entry<String, Server> entry : servers.entrySet()) {
entry.getValue().setSequence(i++);
}
// TODO 없는 url에 대한 호출이 고려되어야 함. 일단 임시로 회피.
if (fromServer == null) {
logger.debug("invalid form server {}", from);
return;
}
ServerRequest serverRequest = new ServerRequest(fromServer, toServer);
for (SpanBo span : spans) {
String from = String.valueOf(span.getParentSpanId());
String to = String.valueOf(span.getSpanId());
// TODO: local call인 경우 보여주지 않음.
if (serverRequest.isSelfCalled()) {
return;
}
Server fromServer = servers.get(spanIdToServerId.get(from));
Server toServer = servers.get(spanIdToServerId.get(to));
if (ServerRequests.containsKey(serverRequest.getId())) {
ServerRequests.get(serverRequest.getId()).increaseCallCount();
} else {
ServerRequests.put(serverRequest.getId(), serverRequest);
}
}
}
if (fromServer == null) {
fromServer = servers.get(spanIdToServerId.get(PREFIX_CLIENT + to));
}
public Collection<Server> getNodes() {
return this.servers.values();
}
// TODO 없는 url에 대한 호출이 고려되어야 함. 일단 임시로 회피.
if (fromServer == null) {
logger.debug("invalid form server {}", from);
continue;
}
ServerRequest serverRequest = new ServerRequest(fromServer, toServer);
public Collection<ServerRequest> getLinks() {
return this.ServerRequests.values();
}
// TODO: local call인 경우 보여주지 않음.
if (serverRequest.isSelfCalled()) {
continue;
}
public BusinessTransactions getBusinessTransactions() {
return businessTransactions;
}
if (ServerRequests.containsKey(serverRequest.getId())) {
ServerRequests.get(serverRequest.getId()).increaseCallCount();
} else {
ServerRequests.put(serverRequest.getId(), serverRequest);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
isBuilt = true;
return this;
}
sb.append("Server=").append(servers);
sb.append("\n");
sb.append("ServerRequest=").append(ServerRequests.values());
public Collection<Server> getNodes() {
return this.servers.values();
}
return sb.toString();
}
public Collection<ServerRequest> 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();
}
}
@@ -119,7 +119,7 @@ public class FlowChartServiceImpl implements FlowChartService {
tree.addSpan(eachTransaction);
}
}
return tree;
return tree.build();
}
@Override