diff --git a/src/main/java/com/nhn/pinpoint/web/applicationmap/Node.java b/src/main/java/com/nhn/pinpoint/web/applicationmap/Node.java index 1ff5280e5..26003a0ee 100644 --- a/src/main/java/com/nhn/pinpoint/web/applicationmap/Node.java +++ b/src/main/java/com/nhn/pinpoint/web/applicationmap/Node.java @@ -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> 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; } diff --git a/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModel.java b/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModel.java index 02e8f29a8..59c6d22c8 100644 --- a/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModel.java +++ b/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModel.java @@ -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; - // public AgentResponseTimeViewModel(String agentName, List responseTimeViewModel) { - public AgentResponseTimeViewModel(List responseTimeViewModel) { - // if (agentName == null) { - // throw new NullPointerException("agentName must not be null"); - // } + public AgentResponseTimeViewModel(String agentName, List 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 getResponseTimeViewModel() { return responseTimeViewModel; } + } diff --git a/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModelSerializer.java b/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModelSerializer.java index ed4fa538e..3a00c2e49 100644 --- a/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModelSerializer.java +++ b/src/main/java/com/nhn/pinpoint/web/view/AgentResponseTimeViewModelSerializer.java @@ -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 { @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 responseTimeViewModelList = value.getResponseTimeViewModel(); + jgen.writeStartObject(); + for (ResponseTimeViewModel responseTimeViewModel : responseTimeViewModelList) { + jgen.writeFieldName(responseTimeViewModel.getColumnName()); + jgen.writeObject(responseTimeViewModel.getColumnValue()); + } + jgen.writeEndObject(); + + jgen.writeEndObject(); } } diff --git a/src/main/java/com/nhn/pinpoint/web/view/NodeSerializer.java b/src/main/java/com/nhn/pinpoint/web/view/NodeSerializer.java new file mode 100644 index 000000000..fb206d637 --- /dev/null +++ b/src/main/java/com/nhn/pinpoint/web/view/NodeSerializer.java @@ -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 { + @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 agentHistogramMap = responseHistogramSummary.getAgentHistogramMap(); + if(agentHistogramMap == null) { + writeEmptyObject(jgen, "agentHistogram"); + } else { + jgen.writeObjectField("agentHistogram", agentHistogramMap); + } + } + if (serviceType.isWas()) { + List applicationTimeSeriesHistogram = responseHistogramSummary.getApplicationTimeSeriesHistogram(); + if (applicationTimeSeriesHistogram == null) { + writeEmptyObject(jgen, "timeSeriesHistogram"); + } else { + jgen.writeObjectField("timeSeriesHistogram", applicationTimeSeriesHistogram); + } + + List 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(); + } + + +} diff --git a/src/main/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogram.java b/src/main/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogram.java index 9caaba492..85d3cf9b0 100644 --- a/src/main/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogram.java +++ b/src/main/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogram.java @@ -16,7 +16,6 @@ import java.util.*; /** * @author emeroad - * @author netspider */ public class AgentTimeSeriesHistogram { @@ -128,25 +127,24 @@ public class AgentTimeSeriesHistogram { } } - public Map createViewModel() { - final Map result = new HashMap(); + public List createViewModel() { + final List result = new ArrayList(); for (Map.Entry> 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() { - // @Override - // public int compare(AgentResponseTimeViewModel o1, AgentResponseTimeViewModel o2) { - // return o1.getAgentName().compareTo(o2.getAgentName()); - // } - // }); + Collections.sort(result, new Comparator() { + @Override + public int compare(AgentResponseTimeViewModel o1, AgentResponseTimeViewModel o2) { + return o1.getAgentName().compareTo(o2.getAgentName()); + } + }); return result; } private AgentResponseTimeViewModel createAgentResponseTimeViewModel(String agentName, List timeHistogramList) { List responseTimeViewModel = createResponseTimeViewModel(timeHistogramList); - AgentResponseTimeViewModel agentResponseTimeViewModel = new AgentResponseTimeViewModel(/*agentName,*/ responseTimeViewModel); + AgentResponseTimeViewModel agentResponseTimeViewModel = new AgentResponseTimeViewModel(agentName, responseTimeViewModel); return agentResponseTimeViewModel; } diff --git a/src/main/java/com/nhn/pinpoint/web/vo/ResponseHistogramSummary.java b/src/main/java/com/nhn/pinpoint/web/vo/ResponseHistogramSummary.java index a62210864..0411a3d5f 100644 --- a/src/main/java/com/nhn/pinpoint/web/vo/ResponseHistogramSummary.java +++ b/src/main/java/com/nhn/pinpoint/web/vo/ResponseHistogramSummary.java @@ -13,7 +13,6 @@ import java.util.*; /** * @author emeroad - * @author netspider */ public class ResponseHistogramSummary { @@ -106,9 +105,12 @@ public class ResponseHistogramSummary { } + public List getAgentTimeSeriesHistogram() { + return agentTimeSeriesHistogram.createViewModel(); + } public String getAgentTimeSeriesHistogramToJson() { try { - Map viewModel = agentTimeSeriesHistogram.createViewModel(); + List viewModel = agentTimeSeriesHistogram.createViewModel(); return MAPPER.writeValueAsString(viewModel); } catch (IOException ex) { throw new RuntimeException(ex.getMessage(), ex); diff --git a/src/main/webapp/WEB-INF/views/applicationmap.filtered.jsp b/src/main/webapp/WEB-INF/views/applicationmap.filtered.jsp index 181860495..dc45b2352 100644 --- a/src/main/webapp/WEB-INF/views/applicationmap.filtered.jsp +++ b/src/main/webapp/WEB-INF/views/applicationmap.filtered.jsp @@ -6,48 +6,7 @@ "applicationMapData" : { "nodeDataArray": [ - { - "id" : "${node.nodeName}", - "key" : "${node.nodeName}", - - - "text" : "USER", - - - "text" : "${node.applicationName}", - - - - - "category" : "USER", - - - "category" : "${node.serviceType.desc}", - - - - "fig" : "Ellipse" - "fig" : "RoundedRectangle" - "fig" : "Rectangle" - , - "serviceTypeCode" : "${node.serviceType.code}", - "terminal" : "${node.serviceType.terminal}", - "isWas" : ${node.serviceType.was}, - - "histogram" : ${node.responseHistogramSummary.applicationHistogram.json}, - "agentHistogram" : { - - "${agentHistogramMap.key}" : ${agentHistogramMap.value.json} - , - - }, - - - "timeSeriesHistogram" : ${node.responseHistogramSummary.applicationTimeSeriesHistogramToJson}, - "agentTimeSeriesHistogram" : ${node.responseHistogramSummary.agentTimeSeriesHistogramToJson}, - - "serverList" : ${node.serverInstanceListJson} - } , + ${node.nodeJson} , ], "linkDataArray": [ diff --git a/src/main/webapp/WEB-INF/views/applicationmap.jsp b/src/main/webapp/WEB-INF/views/applicationmap.jsp index 319d7aa29..8783576dc 100644 --- a/src/main/webapp/WEB-INF/views/applicationmap.jsp +++ b/src/main/webapp/WEB-INF/views/applicationmap.jsp @@ -5,48 +5,7 @@ "applicationMapData" : { "nodeDataArray": [ - { - "id" : "${node.nodeName}", - "key" : "${node.nodeName}", - - - "text" : "USER", - - - "text" : "${node.applicationName}", - - - - - "category" : "USER", - - - "category" : "${node.serviceType.desc}", - - - - "fig" : "Ellipse" - "fig" : "RoundedRectangle" - "fig" : "Rectangle" - , - "serviceTypeCode" : "${node.serviceType.code}", - "terminal" : "${node.serviceType.terminal}", - "isWas" : ${node.serviceType.was}, - - "histogram" : ${node.responseHistogramSummary.applicationHistogram.json}, - "agentHistogram" : { - - "${agentHistogramMap.key}" : ${agentHistogramMap.value.json} - , - - }, - - - "timeSeriesHistogram" : ${node.responseHistogramSummary.applicationTimeSeriesHistogramToJson}, - "agentTimeSeriesHistogram" : ${node.responseHistogramSummary.agentTimeSeriesHistogramToJson}, - - "serverList" : ${node.serverInstanceListJson} - } , + ${node.nodeJson} , ], "linkDataArray": [ diff --git a/src/test/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogramTest.java b/src/test/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogramTest.java index 0133d1c6b..cdf73f5d3 100644 --- a/src/test/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogramTest.java +++ b/src/test/java/com/nhn/pinpoint/web/vo/AgentTimeSeriesHistogramTest.java @@ -31,7 +31,7 @@ public class AgentTimeSeriesHistogramTest { List responseHistogramList = createResponseTime(app, "test1", "test2"); histogram.build(responseHistogramList); - Map viewModel = histogram.createViewModel(); + List viewModel = histogram.createViewModel(); logger.debug("{}", viewModel); ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter(); String s = writer.writeValueAsString(viewModel);