[강운덕] [WEB-57] 수정된 코드는 롤빽하고, view 생성 부분에서 []를 {} 로 생성하도록 수정함. node를 jackson json으로 생성하도록 수정

git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-web/trunk@3459 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
Woonduk Kang
2014-03-12 02:35:34 +00:00
parent 2eb7e88427
commit ed3ebe4ac0
9 changed files with 148 additions and 123 deletions
@@ -4,9 +4,12 @@ import java.io.IOException;
import java.util.*;
import com.nhn.pinpoint.web.applicationmap.rawdata.CallHistogramList;
import com.nhn.pinpoint.web.view.NodeSerializer;
import com.nhn.pinpoint.web.vo.Application;
import com.nhn.pinpoint.web.vo.ResponseHistogramSummary;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,6 +23,7 @@ import com.nhn.pinpoint.web.util.JsonSerializable;
* @author netspider
* @author emeroad
*/
@JsonSerialize(using = NodeSerializer.class)
public class Node implements JsonSerializable {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -30,6 +34,7 @@ public class Node implements JsonSerializable {
private ServerBuilder serverBuilder = new ServerBuilder();
private ServerInstanceList serverInstanceList;
private ResponseHistogramSummary responseHistogramSummary;
// 임시로 생성.
private static final ObjectMapper MAPPER = new ObjectMapper();
@@ -78,18 +83,21 @@ public class Node implements JsonSerializable {
this.serverBuilder = null;
}
public Map<String, List<ServerInstance>> getServerInstanceList() {
return serverInstanceList.getServerInstanceList();
public ServerInstanceList getServerInstanceList() {
return serverInstanceList;
}
public String getServerInstanceListJson() {
@JsonIgnore
public String getNodeJson() {
try {
return MAPPER.writeValueAsString(serverInstanceList);
return MAPPER.writeValueAsString(this);
} catch (IOException ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
}
public Application getApplication() {
return application;
}
@@ -1,37 +1,36 @@
package com.nhn.pinpoint.web.view;
import java.util.List;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import java.util.List;
/**
* @author emeroad
* @author netspider
*/
@JsonSerialize(using=AgentResponseTimeViewModelSerializer.class)
public class AgentResponseTimeViewModel {
// private final String agentName;
private final String agentName;
private final List<ResponseTimeViewModel> responseTimeViewModel;
// public AgentResponseTimeViewModel(String agentName, List<ResponseTimeViewModel> responseTimeViewModel) {
public AgentResponseTimeViewModel(List<ResponseTimeViewModel> responseTimeViewModel) {
// if (agentName == null) {
// throw new NullPointerException("agentName must not be null");
// }
public AgentResponseTimeViewModel(String agentName, List<ResponseTimeViewModel> responseTimeViewModel) {
if (agentName == null) {
throw new NullPointerException("agentName must not be null");
}
if (responseTimeViewModel == null) {
throw new NullPointerException("responseTimeViewModel must not be null");
}
// this.agentName = agentName;
this.agentName = agentName;
this.responseTimeViewModel = responseTimeViewModel;
}
// public String getAgentName() {
// return agentName;
// }
public String getAgentName() {
return agentName;
}
public List<ResponseTimeViewModel> getResponseTimeViewModel() {
return responseTimeViewModel;
}
}
@@ -1,22 +1,30 @@
package com.nhn.pinpoint.web.view;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import java.io.IOException;
import java.util.List;
/**
* @author emeroad
* @author netspider
*/
public class AgentResponseTimeViewModelSerializer extends JsonSerializer<AgentResponseTimeViewModel> {
@Override
public void serialize(AgentResponseTimeViewModel value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
// jgen.writeStartObject();
// jgen.writeFieldName(value.getAgentName());
jgen.writeObject(value.getResponseTimeViewModel());
// jgen.writeEndObject();
jgen.writeStartObject();
jgen.writeFieldName(value.getAgentName());
List<ResponseTimeViewModel> responseTimeViewModelList = value.getResponseTimeViewModel();
jgen.writeStartObject();
for (ResponseTimeViewModel responseTimeViewModel : responseTimeViewModelList) {
jgen.writeFieldName(responseTimeViewModel.getColumnName());
jgen.writeObject(responseTimeViewModel.getColumnValue());
}
jgen.writeEndObject();
jgen.writeEndObject();
}
}
@@ -0,0 +1,92 @@
package com.nhn.pinpoint.web.view;
import com.nhn.pinpoint.common.ServiceType;
import com.nhn.pinpoint.web.applicationmap.Node;
import com.nhn.pinpoint.web.applicationmap.rawdata.Histogram;
import com.nhn.pinpoint.web.vo.ResponseHistogramSummary;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author emeroad
*/
public class NodeSerializer extends JsonSerializer<Node> {
@Override
public void serialize(Node node, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeStringField("id", node.getNodeName());
jgen.writeStringField("key", node.getNodeName());
jgen.writeStringField("text", node.getApplicationName());
jgen.writeStringField("category", node.getServiceType().toString());
final ServiceType serviceType = node.getApplication().getServiceType();
if (serviceType.isUser()) {
jgen.writeStringField("fig", "Ellipse");
} else if(serviceType.isWas()) {
jgen.writeStringField("fig", "RoundedRectangle");
} else {
jgen.writeStringField("fig", "Rectangle");
}
jgen.writeStringField("serviceTypeCode", Short.toString(serviceType.getCode()));
jgen.writeStringField("terminal", Boolean.toString(serviceType.isTerminal()));
jgen.writeBooleanField("isWas", serviceType.isWas());
writeHistogram(jgen, node);
jgen.writeObjectField("serverList", node.getServerInstanceList());
jgen.writeEndObject();
}
private void writeHistogram(JsonGenerator jgen, Node node) throws IOException {
final ServiceType serviceType = node.getServiceType();
final ResponseHistogramSummary responseHistogramSummary = node.getResponseHistogramSummary();
if (serviceType.isWas() || serviceType.isTerminal() || serviceType.isUnknown() || serviceType.isUser()) {
Histogram applicationHistogram = responseHistogramSummary.getApplicationHistogram();
if (applicationHistogram == null) {
writeEmptyObject(jgen, "histogram");
} else {
jgen.writeObjectField("histogram", applicationHistogram);
}
Map<String, Histogram> agentHistogramMap = responseHistogramSummary.getAgentHistogramMap();
if(agentHistogramMap == null) {
writeEmptyObject(jgen, "agentHistogram");
} else {
jgen.writeObjectField("agentHistogram", agentHistogramMap);
}
}
if (serviceType.isWas()) {
List<ResponseTimeViewModel> applicationTimeSeriesHistogram = responseHistogramSummary.getApplicationTimeSeriesHistogram();
if (applicationTimeSeriesHistogram == null) {
writeEmptyObject(jgen, "timeSeriesHistogram");
} else {
jgen.writeObjectField("timeSeriesHistogram", applicationTimeSeriesHistogram);
}
List<AgentResponseTimeViewModel> agentTimeSeriesHistogram = responseHistogramSummary.getAgentTimeSeriesHistogram();
if (agentTimeSeriesHistogram == null) {
writeEmptyObject(jgen, "agentTimeSeriesHistogram");
} else {
jgen.writeObjectField("agentTimeSeriesHistogram", agentTimeSeriesHistogram);
}
}
}
private void writeEmptyObject(JsonGenerator jgen, String fieldName) throws IOException {
jgen.writeFieldName(fieldName);
jgen.writeStartObject();
jgen.writeEndObject();
}
}
@@ -16,7 +16,6 @@ import java.util.*;
/**
* @author emeroad
* @author netspider
*/
public class AgentTimeSeriesHistogram {
@@ -128,25 +127,24 @@ public class AgentTimeSeriesHistogram {
}
}
public Map<String, AgentResponseTimeViewModel> createViewModel() {
final Map<String, AgentResponseTimeViewModel> result = new HashMap<String, AgentResponseTimeViewModel>();
public List<AgentResponseTimeViewModel> createViewModel() {
final List<AgentResponseTimeViewModel> result = new ArrayList<AgentResponseTimeViewModel>();
for (Map.Entry<String, List<TimeHistogram>> entry : histogramMap.entrySet()) {
AgentResponseTimeViewModel model = createAgentResponseTimeViewModel(entry.getKey(), entry.getValue());
result.put(entry.getKey(), model);
// result.add(model);
result.add(model);
}
// Collections.sort(result, new Comparator<AgentResponseTimeViewModel>() {
// @Override
// public int compare(AgentResponseTimeViewModel o1, AgentResponseTimeViewModel o2) {
// return o1.getAgentName().compareTo(o2.getAgentName());
// }
// });
Collections.sort(result, new Comparator<AgentResponseTimeViewModel>() {
@Override
public int compare(AgentResponseTimeViewModel o1, AgentResponseTimeViewModel o2) {
return o1.getAgentName().compareTo(o2.getAgentName());
}
});
return result;
}
private AgentResponseTimeViewModel createAgentResponseTimeViewModel(String agentName, List<TimeHistogram> timeHistogramList) {
List<ResponseTimeViewModel> responseTimeViewModel = createResponseTimeViewModel(timeHistogramList);
AgentResponseTimeViewModel agentResponseTimeViewModel = new AgentResponseTimeViewModel(/*agentName,*/ responseTimeViewModel);
AgentResponseTimeViewModel agentResponseTimeViewModel = new AgentResponseTimeViewModel(agentName, responseTimeViewModel);
return agentResponseTimeViewModel;
}
@@ -13,7 +13,6 @@ import java.util.*;
/**
* @author emeroad
* @author netspider
*/
public class ResponseHistogramSummary {
@@ -106,9 +105,12 @@ public class ResponseHistogramSummary {
}
public List<AgentResponseTimeViewModel> getAgentTimeSeriesHistogram() {
return agentTimeSeriesHistogram.createViewModel();
}
public String getAgentTimeSeriesHistogramToJson() {
try {
Map<String, AgentResponseTimeViewModel> viewModel = agentTimeSeriesHistogram.createViewModel();
List<AgentResponseTimeViewModel> viewModel = agentTimeSeriesHistogram.createViewModel();
return MAPPER.writeValueAsString(viewModel);
} catch (IOException ex) {
throw new RuntimeException(ex.getMessage(), ex);
@@ -6,48 +6,7 @@
"applicationMapData" : {
"nodeDataArray": [
<c:forEach items="${nodes}" var="node" varStatus="status">
{
"id" : "${node.nodeName}",
"key" : "${node.nodeName}",
<c:choose>
<c:when test="${node.applicationName == 'USER'}">
"text" : "USER",
</c:when>
<c:otherwise>
"text" : "${node.applicationName}",
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${node.serviceType.desc == 'USER'}">
"category" : "USER",
</c:when>
<c:otherwise>
"category" : "${node.serviceType.desc}",
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${node.serviceType.desc == 'USER'}">"fig" : "Ellipse"</c:when>
<c:when test="${node.serviceType.desc == 'TOMCAT'}">"fig" : "RoundedRectangle"</c:when>
<c:otherwise>"fig" : "Rectangle"</c:otherwise>
</c:choose>,
"serviceTypeCode" : "${node.serviceType.code}",
"terminal" : "${node.serviceType.terminal}",
"isWas" : ${node.serviceType.was},
<c:if test="${node.serviceType.was || node.serviceType.terminal || node.serviceType.unknown || node.serviceType.user}" >
"histogram" : ${node.responseHistogramSummary.applicationHistogram.json},
"agentHistogram" : {
<c:forEach items="${node.responseHistogramSummary.agentHistogramMap}" var="agentHistogramMap" varStatus="agentHistogramStatus">
"${agentHistogramMap.key}" : ${agentHistogramMap.value.json}
<c:if test="${!agentHistogramStatus.last}">,</c:if>
</c:forEach>
},
</c:if>
<c:if test="${node.serviceType.was}" >
"timeSeriesHistogram" : ${node.responseHistogramSummary.applicationTimeSeriesHistogramToJson},
"agentTimeSeriesHistogram" : ${node.responseHistogramSummary.agentTimeSeriesHistogramToJson},
</c:if>
"serverList" : ${node.serverInstanceListJson}
} <c:if test="${!status.last}">,</c:if>
${node.nodeJson} <c:if test="${!status.last}">,</c:if>
</c:forEach>
],
"linkDataArray": [
@@ -5,48 +5,7 @@
"applicationMapData" : {
"nodeDataArray": [
<c:forEach items="${nodes}" var="node" varStatus="status">
{
"id" : "${node.nodeName}",
"key" : "${node.nodeName}",
<c:choose>
<c:when test="${node.applicationName == 'USER'}">
"text" : "USER",
</c:when>
<c:otherwise>
"text" : "${node.applicationName}",
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${node.serviceType.desc == 'USER'}">
"category" : "USER",
</c:when>
<c:otherwise>
"category" : "${node.serviceType.desc}",
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${node.serviceType.desc == 'USER'}">"fig" : "Ellipse"</c:when>
<c:when test="${node.serviceType.desc == 'TOMCAT'}">"fig" : "RoundedRectangle"</c:when>
<c:otherwise>"fig" : "Rectangle"</c:otherwise>
</c:choose>,
"serviceTypeCode" : "${node.serviceType.code}",
"terminal" : "${node.serviceType.terminal}",
"isWas" : ${node.serviceType.was},
<c:if test="${node.serviceType.was || node.serviceType.terminal || node.serviceType.unknown || node.serviceType.user}" >
"histogram" : ${node.responseHistogramSummary.applicationHistogram.json},
"agentHistogram" : {
<c:forEach items="${node.responseHistogramSummary.agentHistogramMap}" var="agentHistogramMap" varStatus="agentHistogramStatus">
"${agentHistogramMap.key}" : ${agentHistogramMap.value.json}
<c:if test="${!agentHistogramStatus.last}">,</c:if>
</c:forEach>
},
</c:if>
<c:if test="${node.serviceType.was}" >
"timeSeriesHistogram" : ${node.responseHistogramSummary.applicationTimeSeriesHistogramToJson},
"agentTimeSeriesHistogram" : ${node.responseHistogramSummary.agentTimeSeriesHistogramToJson},
</c:if>
"serverList" : ${node.serverInstanceListJson}
} <c:if test="${!status.last}">,</c:if>
${node.nodeJson} <c:if test="${!status.last}">,</c:if>
</c:forEach>
],
"linkDataArray": [
@@ -31,7 +31,7 @@ public class AgentTimeSeriesHistogramTest {
List<ResponseTime> responseHistogramList = createResponseTime(app, "test1", "test2");
histogram.build(responseHistogramList);
Map<String, AgentResponseTimeViewModel> viewModel = histogram.createViewModel();
List<AgentResponseTimeViewModel> viewModel = histogram.createViewModel();
logger.debug("{}", viewModel);
ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
String s = writer.writeValueAsString(viewModel);