mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-13 23:06:54 +10:00
[유치수] [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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user