diff --git a/web/src/main/java/com/navercorp/pinpoint/web/controller/ScatterChartController.java b/web/src/main/java/com/navercorp/pinpoint/web/controller/ScatterChartController.java index f47194bd5681..5484d095d2fd 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/controller/ScatterChartController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/controller/ScatterChartController.java @@ -172,66 +172,62 @@ private ModelAndView createModelAndView(Range range, String jsonpCallback, List< mv.addObject("resultFrom", range.getFrom()); mv.addObject("resultTo", range.getTo()); mv.addObject("scatterIndex", ScatterIndex.MATA_DATA); - if(version <= 2) { - mv.addObject("scatter", scatterData); - } else { - final Map> scatterAgentData = new HashMap<>(); - for(Dot dot : scatterData) { - List list = scatterAgentData.get(dot.getAgentId()); - if(list == null) { + final Map> scatterAgentData = new HashMap<>(); + for (Dot dot : scatterData) { + List list = scatterAgentData.get(dot.getAgentId()); + if (list == null) { + list = new ArrayList<>(); + scatterAgentData.put(dot.getAgentId(), list); + } + list.add(dot); + } + + if (version == 4) { + TimeWindow timeWindow = new TimeWindow(range); + TreeMap> sortedMap = new TreeMap<>(); + for (Dot dot : scatterData) { + long key = timeWindow.refineTimestamp(dot.getAcceptedTime()); + List list = sortedMap.get(key); + if (list == null) { list = new ArrayList<>(); - scatterAgentData.put(dot.getAgentId(), list); + sortedMap.put(key, list); } list.add(dot); } - if(version == 4) { - TimeWindow timeWindow = new TimeWindow(range); - TreeMap> sortedMap = new TreeMap<>(); - for(Dot dot : scatterData) { - long key = timeWindow.refineTimestamp(dot.getAcceptedTime()); - List list = sortedMap.get(key); - if(list == null) { - list = new ArrayList<>(); - sortedMap.put(key, list); + // average + // max + // min + List averageList = new ArrayList<>(); + List maxList = new ArrayList<>(); + List minList = new ArrayList<>(); + for (Map.Entry> entry : sortedMap.entrySet()) { + Dot max = null; + Dot min = null; + int totalTime = 0; + for (Dot dot : entry.getValue()) { + if (max == null || dot.getElapsedTime() > max.getElapsedTime()) { + max = dot; } - list.add(dot); - } - // average - // max - // min - List averageList = new ArrayList<>(); - List maxList = new ArrayList<>(); - List minList = new ArrayList<>(); - for(Map.Entry> entry : sortedMap.entrySet()) { - Dot max = null; - Dot min = null; - int totalTime = 0; - for(Dot dot : entry.getValue()) { - if(max == null || dot.getElapsedTime() > max.getElapsedTime()) { - max = dot; - } - - if(min == null || dot.getElapsedTime() < min.getElapsedTime()) { - min = dot; - } - - totalTime += dot.getElapsedTime(); + if (min == null || dot.getElapsedTime() < min.getElapsedTime()) { + min = dot; } - int averageTime = totalTime / entry.getValue().size(); - averageList.add(new Dot(new TransactionId("", 0, 0), entry.getKey(), averageTime, 0, "")); - maxList.add(new Dot(new TransactionId(max.getTransactionId()), entry.getKey(), max.getElapsedTime(), max.getExceptionCode(), max.getAgentId())); - minList.add(new Dot(new TransactionId(min.getTransactionId()), entry.getKey(), min.getElapsedTime(), min.getExceptionCode(), min.getAgentId())); + + totalTime += dot.getElapsedTime(); } - scatterAgentData.put("_#AverageAgent", averageList); - scatterAgentData.put("_#MaxAgent", maxList); - scatterAgentData.put("_#MinAgent", minList); + int averageTime = totalTime / entry.getValue().size(); + averageList.add(new Dot(new TransactionId("", 0, 0), entry.getKey(), averageTime, 0, "")); + maxList.add(new Dot(new TransactionId(max.getTransactionId()), entry.getKey(), max.getElapsedTime(), max.getExceptionCode(), max.getAgentId())); + minList.add(new Dot(new TransactionId(min.getTransactionId()), entry.getKey(), min.getElapsedTime(), min.getExceptionCode(), min.getAgentId())); } - - mv.addObject("scatter", scatterAgentData); + scatterAgentData.put("_#AverageAgent", averageList); + scatterAgentData.put("_#MaxAgent", maxList); + scatterAgentData.put("_#MinAgent", minList); } + mv.addObject("scatter", scatterAgentData); + if (jsonpCallback == null) { mv.setViewName("jsonView"); } else { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/vo/scatter/ScatterScanResult.java b/web/src/main/java/com/navercorp/pinpoint/web/vo/scatter/ScatterScanResult.java index b65c2d29d899..5914125bce10 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/vo/scatter/ScatterScanResult.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/vo/scatter/ScatterScanResult.java @@ -20,8 +20,11 @@ import com.navercorp.pinpoint.web.vo.scatter.Dot; import com.navercorp.pinpoint.web.vo.scatter.ScatterIndex; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * To be used with @ResponseBody. @@ -76,7 +79,17 @@ public ScatterIndex getScatterIndex() { } @JsonProperty("scatter") - public List getScatter() { - return scatter; + public Map> getScatter() { + final Map> scatterAgentData = new HashMap<>(); + for(Dot dot : scatter) { + List list = scatterAgentData.get(dot.getAgentId()); + if(list == null) { + list = new ArrayList<>(); + scatterAgentData.put(dot.getAgentId(), list); + } + list.add(dot); + } + + return scatterAgentData; } }