diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMap.java
index 0217e6170aec..2e390cef705f 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMap.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMap.java
@@ -15,7 +15,9 @@
package com.navercorp.pinpoint.web.applicationmap;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.navercorp.pinpoint.common.server.util.time.Range;
import com.navercorp.pinpoint.web.applicationmap.link.Link;
import com.navercorp.pinpoint.web.applicationmap.nodes.Node;
@@ -33,4 +35,6 @@ public interface ApplicationMap {
@JsonProperty("linkDataArray")
Collection getLinks();
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ Range getRange();
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java
index 4c5c3778ef58..edb196e9886c 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapBuilder.java
@@ -95,7 +95,7 @@ public ApplicationMap build(Application application, long timeoutMillis) {
NodeHistogramAppender nodeHistogramAppender = nodeHistogramAppenderFactory.create(nodeHistogramFactory);
nodeHistogramAppender.appendNodeHistogram(range, nodeList, emptyLinkList, timeoutMillis);
- return new DefaultApplicationMap(range, nodeList, emptyLinkList);
+ return DefaultApplicationMap.build(nodeList, emptyLinkList, range);
}
public ApplicationMap build(LinkDataDuplexMap linkDataDuplexMap, long timeoutMillis) {
@@ -122,7 +122,7 @@ public ApplicationMap build(LinkDataDuplexMap linkDataDuplexMap, long timeoutMil
ServerInfoAppender serverInfoAppender = serverInfoAppenderFactory.create(serverGroupListFactory);
serverInfoAppender.appendServerInfo(range, nodeList, linkDataDuplexMap, timeoutWatcher.remainingTimeMillis());
- return new DefaultApplicationMap(range, nodeList, linkList);
+ return DefaultApplicationMap.build(nodeList, linkList, range);
}
private static class TimeoutWatcher {
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterData.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterData.java
deleted file mode 100644
index 454d4dffebae..000000000000
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterData.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2016 NAVER Corp.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.navercorp.pinpoint.web.applicationmap;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonValue;
-import com.navercorp.pinpoint.web.applicationmap.link.Link;
-import com.navercorp.pinpoint.web.applicationmap.nodes.Node;
-import com.navercorp.pinpoint.web.scatter.ScatterData;
-import com.navercorp.pinpoint.web.vo.Application;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * @author Taejin Koo
- */
-public class ApplicationMapWithScatterData implements ApplicationMap {
-
- private final ApplicationMap applicationMap;
- private final Map applicationScatterDataMap;
-
- public ApplicationMapWithScatterData(ApplicationMap applicationMap, Map applicationScatterDataMap) {
- this.applicationMap = applicationMap;
- this.applicationScatterDataMap = applicationScatterDataMap;
- }
-
- @Override
- public Collection getNodes() {
- return applicationMap.getNodes();
- }
-
- @Override
- public Collection getLinks() {
- return applicationMap.getLinks();
- }
-
- @JsonValue
- public ApplicationMap getApplicationMap() {
- return applicationMap;
- }
-
- @JsonIgnore
- public Map getApplicationScatterDataMap() {
- return applicationScatterDataMap;
- }
-
-}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterScanResult.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterScanResult.java
deleted file mode 100644
index d433d4786736..000000000000
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterScanResult.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2016 NAVER Corp.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.navercorp.pinpoint.web.applicationmap;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonValue;
-import com.navercorp.pinpoint.web.applicationmap.link.Link;
-import com.navercorp.pinpoint.web.applicationmap.nodes.Node;
-import com.navercorp.pinpoint.web.vo.scatter.ApplicationScatterScanResult;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Taejin Koo
- */
-public class ApplicationMapWithScatterScanResult implements ApplicationMap {
-
- private final ApplicationMap applicationMap;
- private final List applicationScatterScanResultList;
-
- public ApplicationMapWithScatterScanResult(ApplicationMap applicationMap, List applicationScatterScanResultList) {
- this.applicationMap = applicationMap;
- this.applicationScatterScanResultList = applicationScatterScanResultList;
- }
-
- @Override
- public Collection getNodes() {
- return applicationMap.getNodes();
- }
-
- @Override
- public Collection getLinks() {
- return applicationMap.getLinks();
- }
-
- @JsonValue
- public ApplicationMap getApplicationMap() {
- return applicationMap;
- }
-
- @JsonIgnore
- public List getApplicationScatterScanResultList() {
- return applicationScatterScanResultList;
- }
-
-}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/DefaultApplicationMap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/DefaultApplicationMap.java
index a02ba5212f7a..d37054e83013 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/DefaultApplicationMap.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/DefaultApplicationMap.java
@@ -16,17 +16,14 @@
package com.navercorp.pinpoint.web.applicationmap;
-import com.navercorp.pinpoint.common.util.CollectionUtils;
+import com.navercorp.pinpoint.common.server.util.time.Range;
import com.navercorp.pinpoint.web.applicationmap.link.Link;
import com.navercorp.pinpoint.web.applicationmap.link.LinkList;
import com.navercorp.pinpoint.web.applicationmap.nodes.Node;
import com.navercorp.pinpoint.web.applicationmap.nodes.NodeList;
-import com.navercorp.pinpoint.common.server.util.time.Range;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Collection;
-import java.util.Objects;
+import java.util.List;
/**
* Node map
@@ -34,27 +31,12 @@
* @author netspider
* @author emeroad
*/
-public class DefaultApplicationMap implements ApplicationMap {
-
- private final NodeList nodeList;
- private final LinkList linkList;
-
- private final Range range;
-
-// private List applicationScatterScanResultList;
-
- public DefaultApplicationMap(Range range, NodeList nodeList, LinkList linkList) {
- this.range = Objects.requireNonNull(range, "range");
- this.nodeList = Objects.requireNonNull(nodeList, "nodeList");
+public class DefaultApplicationMap {
- Objects.requireNonNull(linkList, "linkList");
- this.linkList = createNewLinkList(linkList);
- }
-
- private LinkList createNewLinkList(LinkList originalLinkList) {
+ private static Collection createNewLinkList(LinkList originalLinkList) {
Collection linkList = originalLinkList.getLinkList();
- if (CollectionUtils.nullSafeSize(linkList) == 0) {
- return originalLinkList;
+ if (linkList.isEmpty()) {
+ return List.of();
}
LinkList newLinkList = new LinkList();
@@ -64,25 +46,17 @@ private LinkList createNewLinkList(LinkList originalLinkList) {
}
if (link.getHistogram().getTotalCount() == 0) {
continue;
-
}
newLinkList.addLink(link);
}
- return newLinkList;
+ return newLinkList.getLinkList();
}
- @JsonProperty("nodeDataArray")
- public Collection getNodes() {
- return this.nodeList.getNodeList();
+ public static ApplicationMap build(NodeList nodeList, LinkList linkList, Range range) {
+ Collection nodes = nodeList.getNodeList();
+ Collection links = createNewLinkList(linkList);
+ return new SimpleApplicationMap(nodes, links, range);
}
- @JsonProperty("linkDataArray")
- public Collection getLinks() {
- return this.linkList.getLinkList();
- }
-
- public Range getRange() {
- return range;
- }
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/FilterMapWithScatter.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/FilterMapWithScatter.java
new file mode 100644
index 000000000000..de9f5a3e3e7e
--- /dev/null
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/FilterMapWithScatter.java
@@ -0,0 +1,29 @@
+package com.navercorp.pinpoint.web.applicationmap;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.navercorp.pinpoint.web.scatter.ScatterData;
+import com.navercorp.pinpoint.web.vo.Application;
+
+import java.util.Map;
+import java.util.Objects;
+
+public class FilterMapWithScatter {
+ private final ApplicationMap applicationMap;
+ private final Map applicationScatterDataMap;
+
+ public FilterMapWithScatter(ApplicationMap applicationMap, Map applicationScatterDataMap) {
+ this.applicationMap = Objects.requireNonNull(applicationMap, "applicationMap");
+ this.applicationScatterDataMap = Objects.requireNonNull(applicationScatterDataMap, "applicationScatterDataMap");
+ }
+
+ @JsonValue
+ public ApplicationMap getApplicationMap() {
+ return applicationMap;
+ }
+
+ @JsonIgnore
+ public Map getScatterDataMap() {
+ return applicationScatterDataMap;
+ }
+}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/FilterMapWrap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/FilterMapWrap.java
index 6f8a25fd18d7..8a22c1a7cbd3 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/FilterMapWrap.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/FilterMapWrap.java
@@ -16,30 +16,37 @@
package com.navercorp.pinpoint.web.applicationmap;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogramFormat;
import com.navercorp.pinpoint.web.applicationmap.link.Link;
import com.navercorp.pinpoint.web.applicationmap.nodes.Node;
-import com.navercorp.pinpoint.web.view.FilterMapWrapSerializer;
+import com.navercorp.pinpoint.web.applicationmap.view.FilteredHistogramView;
+import com.navercorp.pinpoint.web.applicationmap.view.ScatterDataMapView;
+import com.navercorp.pinpoint.web.scatter.ScatterData;
+import com.navercorp.pinpoint.web.vo.Application;
+
+import java.util.Map;
+import java.util.Objects;
/**
* @author emeroad
*/
-@JsonSerialize(using = FilterMapWrapSerializer.class)
public class FilterMapWrap {
private final ApplicationMap applicationMap;
private Long lastFetchedTimestamp;
+ private boolean filteredHistogram = false;
+
+ private Map scatterDataMap;
public FilterMapWrap(ApplicationMap applicationMap, TimeHistogramFormat timeHistogramFormat) {
- this.applicationMap = applicationMap;
-
- if(timeHistogramFormat == TimeHistogramFormat.V2) {
- for (Node node : applicationMap.getNodes()) {
- node.setTimeHistogramFormat(timeHistogramFormat);
- }
- for(Link link : applicationMap.getLinks()) {
- link.setTimeHistogramFormat(timeHistogramFormat);
- }
+ this.applicationMap = Objects.requireNonNull(applicationMap, "applicationMap");
+
+ for (Node node : applicationMap.getNodes()) {
+ node.setTimeHistogramFormat(timeHistogramFormat);
+ }
+ for (Link link : applicationMap.getLinks()) {
+ link.setTimeHistogramFormat(timeHistogramFormat);
}
}
@@ -47,7 +54,7 @@ public void setLastFetchedTimestamp(Long lastFetchedTimestamp) {
this.lastFetchedTimestamp = lastFetchedTimestamp;
}
- public ApplicationMap getApplicationMap() {
+ public ApplicationMap getApplicationMapData() {
return applicationMap;
}
@@ -55,4 +62,29 @@ public Long getLastFetchedTimestamp() {
return lastFetchedTimestamp;
}
+ public void setFilteredHistogram(boolean filteredHistogram) {
+ this.filteredHistogram = filteredHistogram;
+ }
+
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public Map getApplicationScatterData() {
+ if (scatterDataMap == null) {
+ return null;
+ }
+ return new ScatterDataMapView(scatterDataMap).getDataMap();
+ }
+
+ public void setScatterDataMap(Map scatterDataMap) {
+ this.scatterDataMap = scatterDataMap;
+ }
+
+ @JsonUnwrapped
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public FilteredHistogramView getFilteredHistogramView() {
+ if (filteredHistogram) {
+ return new FilteredHistogramView(applicationMap);
+ }
+ return null;
+ }
+
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/MapWrap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/MapWrap.java
index dea57cd3308b..1760ffe78f85 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/MapWrap.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/MapWrap.java
@@ -31,7 +31,7 @@ public class MapWrap {
public MapWrap(ApplicationMap applicationMap, final TimeHistogramFormat timeHistogramFormat) {
this.applicationMap = applicationMap;
- if(timeHistogramFormat == TimeHistogramFormat.V2) {
+ if (timeHistogramFormat == TimeHistogramFormat.V2) {
for(Node node : applicationMap.getNodes()) {
node.setTimeHistogramFormat(timeHistogramFormat);
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/SimpleApplicationMap.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/SimpleApplicationMap.java
index d57ecf1b293a..695522a2d757 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/SimpleApplicationMap.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/SimpleApplicationMap.java
@@ -1,7 +1,9 @@
package com.navercorp.pinpoint.web.applicationmap;
+import com.navercorp.pinpoint.common.server.util.time.Range;
import com.navercorp.pinpoint.web.applicationmap.link.Link;
import com.navercorp.pinpoint.web.applicationmap.nodes.Node;
+import jakarta.annotation.Nullable;
import java.util.Collection;
import java.util.Objects;
@@ -10,9 +12,19 @@ public class SimpleApplicationMap implements ApplicationMap {
private final Collection nodes;
private final Collection links;
+ @Nullable
+ private final Range range;
+
public SimpleApplicationMap(Collection nodes, Collection links) {
this.nodes = Objects.requireNonNull(nodes, "nodes");
this.links = Objects.requireNonNull(links, "links");
+ this.range = null;
+ }
+
+ public SimpleApplicationMap(Collection nodes, Collection links, Range range) {
+ this.nodes = Objects.requireNonNull(nodes, "nodes");
+ this.links = Objects.requireNonNull(links, "links");
+ this.range = Objects.requireNonNull(range, "range");
}
@Override
@@ -24,4 +36,9 @@ public Collection getNodes() {
public Collection getLinks() {
return links;
}
+
+ @Override
+ public Range getRange() {
+ return range;
+ }
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/FilteredMapController.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/FilteredMapController.java
index 649fcd0fbce4..05db95b02ac1 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/FilteredMapController.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/FilteredMapController.java
@@ -24,6 +24,7 @@
import com.navercorp.pinpoint.common.server.util.time.Range;
import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
+import com.navercorp.pinpoint.web.applicationmap.FilterMapWithScatter;
import com.navercorp.pinpoint.web.applicationmap.FilterMapWrap;
import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogramFormat;
import com.navercorp.pinpoint.web.applicationmap.map.MapViews;
@@ -146,7 +147,8 @@ public FilterMapWrap getFilteredServerMapDataMadeOfDotGroup(
.Builder(limitedScanResult.scanData(), originalRange, xGroupUnit, yGroupUnit, filter, viewVersion)
.setUseStatisticsAgentState(useStatisticsAgentState)
.build();
- final ApplicationMap map = filteredMapService.selectApplicationMapWithScatterData(option);
+ final FilterMapWithScatter scatter = filteredMapService.selectApplicationMapWithScatterData(option);
+ ApplicationMap map = scatter.getApplicationMap();
if (logger.isDebugEnabled()) {
logger.debug("getFilteredServerMapData range scan(limit:{}) range:{} lastFetchedTimestamp:{}",
@@ -155,6 +157,7 @@ public FilterMapWrap getFilteredServerMapDataMadeOfDotGroup(
final FilterMapWrap mapWrap = new FilterMapWrap(map, getTimeHistogramFormat(useLoadHistogramFormat));
mapWrap.setLastFetchedTimestamp(lastScanTime);
+ mapWrap.setScatterDataMap(scatter.getScatterDataMap());
return mapWrap;
}
@@ -232,15 +235,16 @@ public FilterMapWrap getFilteredServerMapDataMadeOfDotGroupV3(
.Builder(limitedScanResult.scanData(), originalRange, xGroupUnit, yGroupUnit, filter, viewVersion)
.setUseStatisticsAgentState(useStatisticsAgentState)
.build();
- final ApplicationMap map = filteredMapService.selectApplicationMapWithScatterDataV3(option);
+ final FilterMapWithScatter map = filteredMapService.selectApplicationMapWithScatterData(option);
if (logger.isDebugEnabled()) {
logger.debug("getFilteredServerMapData range scan(limit:{}) range:{} lastFetchedTimestamp:{}", limit, range.prettyToString(), DateTimeFormatUtils.format(lastScanTime));
}
- FilterMapWrap mapWrap;
- mapWrap = new FilterMapWrap(map, TimeHistogramFormat.V1);
+ FilterMapWrap mapWrap = new FilterMapWrap(map.getApplicationMap(), TimeHistogramFormat.V1);
mapWrap.setLastFetchedTimestamp(lastScanTime);
+ mapWrap.setFilteredHistogram(true);
+ mapWrap.setScatterDataMap(map.getScatterDataMap());
return mapWrap;
}
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapService.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapService.java
index 5835c0fa198b..6c0d4de73fe6 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapService.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapService.java
@@ -20,6 +20,7 @@
import com.navercorp.pinpoint.common.profiler.util.TransactionId;
import com.navercorp.pinpoint.common.server.util.time.Range;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
+import com.navercorp.pinpoint.web.applicationmap.FilterMapWithScatter;
import com.navercorp.pinpoint.web.vo.LimitedScanResult;
import java.util.List;
@@ -37,7 +38,6 @@ public interface FilteredMapService {
ApplicationMap selectApplicationMap(FilteredMapServiceOption option);
- ApplicationMap selectApplicationMapWithScatterData(FilteredMapServiceOption option);
+ FilterMapWithScatter selectApplicationMapWithScatterData(FilteredMapServiceOption option);
- ApplicationMap selectApplicationMapWithScatterDataV3(FilteredMapServiceOption option);
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java
index 080b890e77d9..0de6085f396b 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImpl.java
@@ -25,8 +25,7 @@
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMapBuilder;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMapBuilderFactory;
-import com.navercorp.pinpoint.web.applicationmap.ApplicationMapWithScatterData;
-import com.navercorp.pinpoint.web.applicationmap.ApplicationMapWithScatterDataV3;
+import com.navercorp.pinpoint.web.applicationmap.FilterMapWithScatter;
import com.navercorp.pinpoint.web.applicationmap.appender.histogram.DefaultNodeHistogramFactory;
import com.navercorp.pinpoint.web.applicationmap.appender.histogram.datasource.ResponseHistogramsNodeHistogramDataSource;
import com.navercorp.pinpoint.web.applicationmap.appender.histogram.datasource.WasNodeHistogramDataSource;
@@ -137,11 +136,10 @@ public ApplicationMap selectApplicationMap(FilteredMapServiceOption option) {
filteredMapBuilder.addTransactions(filterList);
FilteredMap filteredMap = filteredMapBuilder.build();
- ApplicationMap map = createMap(option, filteredMap, false);
- return map;
+ return createMap(option, filteredMap);
}
- public ApplicationMap selectApplicationMapWithScatterData(FilteredMapServiceOption option) {
+ public FilterMapWithScatter selectApplicationMapWithScatterData(FilteredMapServiceOption option) {
StopWatch watch = new StopWatch();
watch.start();
@@ -151,38 +149,16 @@ public ApplicationMap selectApplicationMapWithScatterData(FilteredMapServiceOpti
filteredMapBuilder.addTransactions(filterList);
FilteredMap filteredMap = filteredMapBuilder.build();
- ApplicationMap map = createMap(option, filteredMap, false);
+ ApplicationMap map = createMap(option, filteredMap);
Map applicationScatterData = filteredMap.getApplicationScatterData(option.getOriginalRange().getFrom(), option.getOriginalRange().getTo(), option.getxGroupUnit(), option.getyGroupUnit());
- ApplicationMapWithScatterData applicationMapWithScatterData = new ApplicationMapWithScatterData(map, applicationScatterData);
watch.stop();
logger.debug("Select filtered application map elapsed. {}ms", watch.getTotalTimeMillis());
- return applicationMapWithScatterData;
+ return new FilterMapWithScatter(map, applicationScatterData);
}
- @Override
- public ApplicationMap selectApplicationMapWithScatterDataV3(FilteredMapServiceOption option) {
- StopWatch watch = new StopWatch();
- watch.start();
-
- final List> filterList = selectFilteredSpan(option.getTransactionIdList(), option.getFilter(), option.getColumnGetCount());
- FilteredMapBuilder filteredMapBuilder = new FilteredMapBuilder(applicationFactory, registry, option.getOriginalRange(), option.getVersion());
- filteredMapBuilder.serverMapDataFilter(serverMapDataFilter);
- filteredMapBuilder.addTransactions(filterList);
- FilteredMap filteredMap = filteredMapBuilder.build();
-
- ApplicationMap map = createMap(option, filteredMap, true);
-
- Map applicationScatterData = filteredMap.getApplicationScatterData(option.getOriginalRange().getFrom(), option.getOriginalRange().getTo(), option.getxGroupUnit(), option.getyGroupUnit());
- ApplicationMapWithScatterDataV3 applicationMapWithScatterDataV3 = new ApplicationMapWithScatterDataV3(map, applicationScatterData);
-
- watch.stop();
- logger.debug("Select filtered application map elapsed. {}ms", watch.getTotalTimeMillis());
-
- return applicationMapWithScatterDataV3;
- }
private List> selectFilteredSpan(List transactionIdList, Filter> filter, ColumnGetCount columnGetCount) {
// filters out recursive calls by looking at each objects
@@ -195,12 +171,8 @@ private List> selectFilteredSpan(List transactionIdL
return filterList2(originalList, filter);
}
- private ApplicationMap createMap(FilteredMapServiceOption option, FilteredMap filteredMap, boolean v3Format) {
+ private ApplicationMap createMap(FilteredMapServiceOption option, FilteredMap filteredMap) {
final ApplicationMapBuilder applicationMapBuilder = applicationMapBuilderFactory.createApplicationMapBuilder(option.getOriginalRange());
- if (v3Format) {
-// applicationMapBuilder.linkType(LinkType.SIMPLIFIED);
-// applicationMapBuilder.nodeType(NodeType.SIMPLIFIED);
- }
final WasNodeHistogramDataSource wasNodeHistogramDataSource = new ResponseHistogramsNodeHistogramDataSource(filteredMap.getResponseHistograms());
applicationMapBuilder.includeNodeHistogram(new DefaultNodeHistogramFactory(wasNodeHistogramDataSource));
ServerGroupListDataSource serverGroupListDataSource = serverInstanceDatasourceService.getServerGroupListDataSource();
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterDataV3.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/view/FilteredHistogramView.java
similarity index 57%
rename from web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterDataV3.java
rename to web/src/main/java/com/navercorp/pinpoint/web/applicationmap/view/FilteredHistogramView.java
index 863360241cdb..9e7d298e7bba 100644
--- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapWithScatterDataV3.java
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/view/FilteredHistogramView.java
@@ -1,63 +1,25 @@
-/*
- * Copyright 2023 NAVER Corp.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+package com.navercorp.pinpoint.web.applicationmap.view;
-package com.navercorp.pinpoint.web.applicationmap;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonValue;
+import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogram;
import com.navercorp.pinpoint.web.applicationmap.link.Link;
import com.navercorp.pinpoint.web.applicationmap.nodes.Node;
-import com.navercorp.pinpoint.web.scatter.ScatterData;
import com.navercorp.pinpoint.web.view.histogram.HistogramView;
import com.navercorp.pinpoint.web.view.histogram.ServerHistogramView;
-import com.navercorp.pinpoint.web.vo.Application;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
-import java.util.Map;
-public class ApplicationMapWithScatterDataV3 implements ApplicationMap {
+public class FilteredHistogramView {
private final ApplicationMap applicationMap;
- private final Map applicationScatterDataMap;
- public ApplicationMapWithScatterDataV3(ApplicationMap applicationMap, Map applicationScatterDataMap) {
+ public FilteredHistogramView(ApplicationMap applicationMap) {
this.applicationMap = applicationMap;
- this.applicationScatterDataMap = applicationScatterDataMap;
- }
-
- @Override
- public Collection getNodes() {
- return applicationMap.getNodes();
- }
-
- @Override
- public Collection getLinks() {
- return applicationMap.getLinks();
}
- @JsonValue
- public ApplicationMap getApplicationMap() {
- return applicationMap;
- }
-
- @JsonIgnore
public List getNodeServerHistogramData() {
final List result = new ArrayList<>();
for (Node node : applicationMap.getNodes()) {
@@ -66,7 +28,6 @@ public List getNodeServerHistogramData() {
return result;
}
- @JsonIgnore
public List getNodeHistogramData() {
final List result = new ArrayList<>();
for (Node node : applicationMap.getNodes()) {
@@ -84,7 +45,6 @@ private HistogramView getNodeHistogramView(Node node) {
return new HistogramView(nodeName, histogram, histogramList);
}
- @JsonIgnore
public List getLinkHistogramData() {
final List result = new ArrayList<>();
for (Link link : applicationMap.getLinks()) {
@@ -101,9 +61,4 @@ private HistogramView getLinkHistogramView(Link link) {
return new HistogramView(linkName, histogram, histogramList);
}
- @JsonIgnore
- public Map getApplicationScatterDataMap() {
- return applicationScatterDataMap;
- }
-
}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/view/ScatterDataMapView.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/view/ScatterDataMapView.java
new file mode 100644
index 000000000000..f9c63a3cec08
--- /dev/null
+++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/view/ScatterDataMapView.java
@@ -0,0 +1,35 @@
+package com.navercorp.pinpoint.web.applicationmap.view;
+
+import com.navercorp.pinpoint.web.applicationmap.nodes.NodeName;
+import com.navercorp.pinpoint.web.scatter.ScatterData;
+import com.navercorp.pinpoint.web.vo.Application;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+public class ScatterDataMapView {
+ private final Map dataMap;
+
+ public ScatterDataMapView(Map dataMap) {
+ this.dataMap = Objects.requireNonNull(dataMap, "dataMap");
+ }
+
+ public Map getDataMap() {
+
+ return dataMap.entrySet()
+ .stream()
+ .collect(Collectors.toMap(e -> nodeName(e.getKey()), e -> scatterDataView(e.getValue())));
+ }
+
+ private String nodeName(Application application) {
+ return NodeName.of(application).getName();
+ }
+
+ private ScatterDataView scatterDataView(ScatterData data) {
+ return new ScatterDataView(data.getFrom(), data.getTo(), data.getOldestAcceptedTime(), data.getLatestAcceptedTime(), data);
+ }
+
+ public record ScatterDataView(long from, long to, long resultFrom, long resultTo, ScatterData scatter) {
+ }
+}
diff --git a/web/src/main/java/com/navercorp/pinpoint/web/view/FilterMapWrapSerializer.java b/web/src/main/java/com/navercorp/pinpoint/web/view/FilterMapWrapSerializer.java
deleted file mode 100644
index c55653d3f079..000000000000
--- a/web/src/main/java/com/navercorp/pinpoint/web/view/FilterMapWrapSerializer.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2014 NAVER Corp.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.navercorp.pinpoint.web.view;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.navercorp.pinpoint.web.applicationmap.ApplicationMapWithScatterData;
-import com.navercorp.pinpoint.web.applicationmap.ApplicationMapWithScatterDataV3;
-import com.navercorp.pinpoint.web.applicationmap.ApplicationMapWithScatterScanResult;
-import com.navercorp.pinpoint.web.applicationmap.FilterMapWrap;
-import com.navercorp.pinpoint.web.applicationmap.nodes.NodeName;
-import com.navercorp.pinpoint.web.scatter.ScatterData;
-import com.navercorp.pinpoint.web.vo.Application;
-import com.navercorp.pinpoint.web.vo.scatter.ApplicationScatterScanResult;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author emeroad
- */
-public class FilterMapWrapSerializer extends JsonSerializer {
- @Override
- public void serialize(FilterMapWrap wrap, JsonGenerator jgen, SerializerProvider provider) throws IOException {
- jgen.writeStartObject();
-
- jgen.writeObjectField("applicationMapData", wrap.getApplicationMap());
- jgen.writeNumberField("lastFetchedTimestamp", wrap.getLastFetchedTimestamp());
-
- if (wrap.getApplicationMap() instanceof ApplicationMapWithScatterScanResult applicationMap) {
- final List applicationScatterScanResult = applicationMap.getApplicationScatterScanResultList();
-
- jgen.writeFieldName("applicationScatterScanResult");
- jgen.writeStartObject();
- for (ApplicationScatterScanResult scatterScanResult : applicationScatterScanResult) {
- NodeName nodeName = NodeName.of(scatterScanResult.getApplication());
- jgen.writeObjectField(nodeName.getName(), scatterScanResult.getScatterScanResult());
- }
- jgen.writeEndObject();
- }
-
- if (wrap.getApplicationMap() instanceof ApplicationMapWithScatterData applicationMap) {
- Map applicationScatterDataMap = applicationMap.getApplicationScatterDataMap();
-
- writeScatterData(jgen, applicationScatterDataMap);
- }
-
- if (wrap.getApplicationMap() instanceof ApplicationMapWithScatterDataV3 applicationMap) {
- Map applicationScatterDataMap = applicationMap.getApplicationScatterDataMap();
-
- writeScatterData(jgen, applicationScatterDataMap);
- jgen.writeObjectField("nodeServerHistogramData", applicationMap.getNodeServerHistogramData());
- jgen.writeObjectField("nodeHistogramData", applicationMap.getNodeHistogramData());
- jgen.writeObjectField("linkHistogramData", applicationMap.getLinkHistogramData());
- }
-
- jgen.writeEndObject();
- }
-
- private void writeScatterData(JsonGenerator jgen, Map applicationScatterDataMap) throws IOException {
- jgen.writeFieldName("applicationScatterData");
- jgen.writeStartObject();
-
- for (Map.Entry entry : applicationScatterDataMap.entrySet()) {
- NodeName nodeName = NodeName.of(entry.getKey());
- jgen.writeFieldName(nodeName.getName());
-
- ScatterData scatterData = entry.getValue();
-
- jgen.writeStartObject();
- jgen.writeObjectField("from", scatterData.getFrom());
- jgen.writeObjectField("to", scatterData.getTo());
- jgen.writeObjectField("resultFrom", scatterData.getOldestAcceptedTime());
- jgen.writeObjectField("resultTo", scatterData.getLatestAcceptedTime());
- jgen.writeObjectField("scatter", scatterData);
- jgen.writeEndObject();
- }
-
- jgen.writeEndObject();
- }
-}
diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapTest.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapTest.java
index fc6eed109041..79ed4640c6e5 100644
--- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapTest.java
+++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/ApplicationMapTest.java
@@ -37,7 +37,7 @@ public class ApplicationMapTest {
@Test
public void root() throws IOException {
- ApplicationMap app = new DefaultApplicationMap(Range.between(0, 1), new NodeList(), new LinkList());
+ ApplicationMap app = DefaultApplicationMap.build(new NodeList(), new LinkList(), Range.between(0, 1));
String s = mapper.writeValueAsString(app);
logger.debug(s);
}
diff --git a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java
index e7ecb431eaed..d94e52114d83 100644
--- a/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java
+++ b/web/src/test/java/com/navercorp/pinpoint/web/applicationmap/service/FilteredMapServiceImplTest.java
@@ -31,6 +31,7 @@
import com.navercorp.pinpoint.web.TestTraceUtils;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMap;
import com.navercorp.pinpoint.web.applicationmap.ApplicationMapBuilderFactory;
+import com.navercorp.pinpoint.web.applicationmap.FilterMapWithScatter;
import com.navercorp.pinpoint.web.applicationmap.appender.histogram.NodeHistogramAppenderFactory;
import com.navercorp.pinpoint.web.applicationmap.appender.server.ServerInfoAppenderFactory;
import com.navercorp.pinpoint.web.applicationmap.appender.server.datasource.AgentInfoServerGroupListDataSource;
@@ -210,7 +211,8 @@ public void twoTier() {
// When
final FilteredMapServiceOption option = new FilteredMapServiceOption.Builder(Collections.emptyList(), originalRange, 1, 1, Filter.acceptAllFilter(), 0).build();
- ApplicationMap applicationMap = filteredMapService.selectApplicationMapWithScatterData(option);
+ FilterMapWithScatter filterMapWithScatter = filteredMapService.selectApplicationMapWithScatterData(option);
+ ApplicationMap applicationMap = filterMapWithScatter.getApplicationMap();
// Then
Collection nodes = applicationMap.getNodes();