Skip to content

Commit

Permalink
[pinpoint-apm#9945] add time aggregation to new servermap api
Browse files Browse the repository at this point in the history
  • Loading branch information
donghun-cho committed Aug 31, 2023
1 parent ba2b3b1 commit c5a3ca1
Show file tree
Hide file tree
Showing 42 changed files with 601 additions and 136 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public void collect() {
return;
}

LinkDataMap callerDataMap = mapStatisticsCallerDao.selectCaller(application, Range.between(timeSlotEndTime - slotInterval, timeSlotEndTime));
LinkDataMap callerDataMap = mapStatisticsCallerDao.selectCaller(application, Range.between(timeSlotEndTime - slotInterval, timeSlotEndTime), false);

for (LinkData linkData : callerDataMap.getLinkDataList()) {
LinkCallDataMap linkCallDataMap = linkData.getLinkCallDataMap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public static void before() {
dao = new MapStatisticsCallerDao() {

@Override
public LinkDataMap selectCaller(Application callerApplication, Range range) {
public LinkDataMap selectCaller(Application callerApplication, Range range, boolean timeAggregated) {
long timeStamp = 1409814914298L;
LinkDataMap linkDataMap = new LinkDataMap();
Application fromApplication = new Application(FROM_SERVICE_NAME, ServiceType.STAND_ALONE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static void before() {
dao = new MapStatisticsCallerDao() {

@Override
public LinkDataMap selectCaller(Application callerApplication, Range range) {
public LinkDataMap selectCaller(Application callerApplication, Range range, boolean timeAggregated) {
long timeStamp = 1409814914298L;
LinkDataMap linkDataMap = new LinkDataMap();
Application fromApplication = new Application(FROM_SERVICE_NAME, ServiceType.STAND_ALONE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static void before() {
dao = new MapStatisticsCallerDao() {

@Override
public LinkDataMap selectCaller(Application callerApplication, Range range) {
public LinkDataMap selectCaller(Application callerApplication, Range range, boolean timeAggregated) {
long timeStamp = 1409814914298L;
LinkDataMap linkDataMap = new LinkDataMap();
Application fromApplication = new Application(FROM_SERVICE_NAME, ServiceType.STAND_ALONE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static void before() {
dao = new MapStatisticsCallerDao() {

@Override
public LinkDataMap selectCaller(Application callerApplication, Range range) {
public LinkDataMap selectCaller(Application callerApplication, Range range, boolean timeAggregated) {
long timeStamp = 1409814914298L;
LinkDataMap linkDataMap = new LinkDataMap();
Application fromApplication = new Application(FROM_SERVICE_NAME, ServiceType.STAND_ALONE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static void before() {
dao = new MapStatisticsCallerDao() {

@Override
public LinkDataMap selectCaller(Application callerApplication, Range range) {
public LinkDataMap selectCaller(Application callerApplication, Range range, boolean timeAggregated) {
long timeStamp = 1409814914298L;
LinkDataMap linkDataMap = new LinkDataMap();
Application fromApplication = new Application(FROM_SERVICE_NAME, ServiceType.STAND_ALONE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,6 @@ public FilterMapWrap(ApplicationMap applicationMap, TimeHistogramFormat timeHist
}
}

public void setV3Format(boolean v3Format) {
for(Node node : applicationMap.getNodes()) {
node.setV3Format(v3Format);
}
for(Link link : applicationMap.getLinks()) {
link.setV3Format(v3Format);
}
}

public void setLastFetchedTimestamp(Long lastFetchedTimestamp) {
this.lastFetchedTimestamp = lastFetchedTimestamp;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,6 @@ public MapWrap(ApplicationMap applicationMap, final TimeHistogramFormat timeHist
}
}

public void setV3Format(boolean v3Format) {
for(Node node : applicationMap.getNodes()) {
node.setV3Format(v3Format);
}
for(Link link : applicationMap.getLinks()) {
link.setV3Format(v3Format);
}
}

@JsonProperty("applicationMapData")
public ApplicationMap getApplicationMap() {
return applicationMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package com.navercorp.pinpoint.web.applicationmap.appender.histogram;

import com.navercorp.pinpoint.common.server.util.time.Range;
import com.navercorp.pinpoint.web.applicationmap.appender.histogram.datasource.WasNodeHistogramDataSource;
import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram;
import com.navercorp.pinpoint.web.applicationmap.link.Link;
import com.navercorp.pinpoint.web.applicationmap.link.LinkList;
import com.navercorp.pinpoint.web.applicationmap.rawdata.AgentHistogram;
import com.navercorp.pinpoint.web.applicationmap.rawdata.AgentHistogramList;
import com.navercorp.pinpoint.web.applicationmap.rawdata.LinkCallDataMap;
import com.navercorp.pinpoint.web.vo.Application;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public class SimplifiedNodeHistogramFactory implements NodeHistogramFactory {

private final Logger logger = LogManager.getLogger(this.getClass());

private final WasNodeHistogramDataSource wasNodeHistogramDataSource;

public SimplifiedNodeHistogramFactory(WasNodeHistogramDataSource wasNodeHistogramDataSource) {
this.wasNodeHistogramDataSource = Objects.requireNonNull(wasNodeHistogramDataSource, "wasNodeHistogramDataSource");
}

@Override
public NodeHistogram createWasNodeHistogram(Application wasApplication, Range range) {
return wasNodeHistogramDataSource.createNodeHistogram(wasApplication, range);
}

@Override
public NodeHistogram createTerminalNodeHistogram(Application terminalApplication, Range range, LinkList linkList) {
// for Terminal nodes, add all links pointing to the application and create the histogram
final NodeHistogram nodeHistogram = new NodeHistogram(terminalApplication, range);

// create applicationHistogram
final List<Link> toLinkList = linkList.findToLink(terminalApplication);
final Histogram applicationHistogram = new Histogram(terminalApplication.getServiceType());
for (Link link : toLinkList) {
applicationHistogram.add(link.getHistogram());
}
nodeHistogram.setApplicationHistogram(applicationHistogram);

// create Agent histogram map for StatisticsAgentState
if (terminalApplication.getServiceType().isTerminal() || terminalApplication.getServiceType().isAlias()) {
final Map<String, Histogram> agentHistogramMap = new HashMap<>();
for (Link link : toLinkList) {
LinkCallDataMap sourceLinkCallDataMap = link.getSourceLinkCallDataMap();
AgentHistogramList targetList = sourceLinkCallDataMap.getTargetList();
for (AgentHistogram histogram : targetList.getAgentHistogramList()) {
Histogram find = agentHistogramMap.get(histogram.getId());
if (find == null) {
find = new Histogram(histogram.getServiceType());
agentHistogramMap.put(histogram.getId(), find);
}
find.add(histogram.getHistogram());
}
nodeHistogram.setAgentHistogramMap(agentHistogramMap);
}
}

return nodeHistogram;
}

@Override
public NodeHistogram createUserNodeHistogram(Application userApplication, Range range, LinkList linkList) {
// for User nodes, find its source link and create the histogram
final NodeHistogram nodeHistogram = new NodeHistogram(userApplication, range);
final List<Link> fromLink = linkList.findFromLink(userApplication);
if (fromLink.isEmpty()) {
logger.warn("from UserNode not found:{}", userApplication);
return createEmptyNodeHistogram(userApplication, range);
} else if (fromLink.size() > 1) {
// log and use first(0) link.
logger.warn("Invalid from UserNode:{}", linkList.getLinkList());
}
final Link sourceLink = fromLink.get(0);
nodeHistogram.setApplicationHistogram(sourceLink.getHistogram());

return nodeHistogram;
}

@Override
public NodeHistogram createQueueNodeHistogram(Application queueApplication, Range range, LinkList linkList) {
final List<Link> toLinkList = linkList.findToLink(queueApplication);
if (toLinkList.isEmpty()) {
return new NodeHistogram(queueApplication, range);
}

final NodeHistogram nodeHistogram = new NodeHistogram(queueApplication, range);

// create applicationHistogram
final Histogram applicationHistogram = new Histogram(queueApplication.getServiceType());
for (Link link : toLinkList) {
applicationHistogram.add(link.getHistogram());
}
nodeHistogram.setApplicationHistogram(applicationHistogram);

return nodeHistogram;
}

@Override
public NodeHistogram createEmptyNodeHistogram(Application application, Range range) {
return new NodeHistogram(application, range);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@

package com.navercorp.pinpoint.web.applicationmap.appender.histogram.datasource;

import com.navercorp.pinpoint.common.server.util.time.Range;
import com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram;
import com.navercorp.pinpoint.web.dao.MapResponseDao;
import com.navercorp.pinpoint.web.vo.Application;
import com.navercorp.pinpoint.web.vo.ResponseTime;

import java.util.List;
import java.util.Objects;

public class MapResponseSimplifiedNodeHistogramDataSource implements WasNodeHistogramDataSource {

private final MapResponseDao mapResponseDao;

public MapResponseSimplifiedNodeHistogramDataSource(MapResponseDao mapResponseDao) {
this.mapResponseDao = Objects.requireNonNull(mapResponseDao, "mapResponseDao");
}

@Override
public NodeHistogram createNodeHistogram(Application application, Range range) {
List<ResponseTime> responseTimes = mapResponseDao.selectResponseTime(application, range);
final NodeHistogram nodeHistogram = new NodeHistogram(application, range);
nodeHistogram.setApplicationHistogram(responseTimes);
nodeHistogram.setAgentHistogramMap(responseTimes);
return nodeHistogram;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,20 @@ public void setApplicationHistogram(Histogram applicationHistogram) {
this.applicationHistogram = Objects.requireNonNull(applicationHistogram, "applicationHistogram");
}

public void setApplicationHistogram(List<ResponseTime> responseTimeList) {
Objects.requireNonNull(responseTimeList, "responseTimeList");
this.applicationHistogram = createApplicationLevelResponseTime(responseTimeList);
}

public void setAgentHistogramMap(Map<String, Histogram> agentHistogramMap) {
this.agentHistogramMap = agentHistogramMap;
}

public void setAgentHistogramMap(List<ResponseTime> responseTimeList) {
Objects.requireNonNull(responseTimeList, "responseTimeList");
this.agentHistogramMap = createAgentLevelResponseTime(responseTimeList);
}

public Map<String, Histogram> getAgentHistogramMap() {
return agentHistogramMap;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@
import com.navercorp.pinpoint.web.applicationmap.rawdata.LinkCallDataMap;
import com.navercorp.pinpoint.web.view.AgentResponseTimeViewModelList;
import com.navercorp.pinpoint.web.view.LinkSerializer;
import com.navercorp.pinpoint.web.view.TimeSeries.TimeSeriesView;
import com.navercorp.pinpoint.web.view.TimeViewModel;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramChartBuilder;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramType;
import com.navercorp.pinpoint.web.view.TimeSeries.TimeSeriesView;
import com.navercorp.pinpoint.web.vo.Application;

import java.util.Collection;
Expand Down Expand Up @@ -74,7 +74,6 @@ public class Link {

private Histogram linkHistogram;
private TimeHistogramFormat timeHistogramFormat = TimeHistogramFormat.V1;
private boolean v3Format = false;

public Link(CreateType createType, Node fromNode, Node toNode, Range range) {
this(LinkType.DETAILED, createType, fromNode, toNode, range);
Expand Down Expand Up @@ -133,14 +132,6 @@ public void setTimeHistogramFormat(TimeHistogramFormat timeHistogramFormat) {
this.timeHistogramFormat = timeHistogramFormat;
}

public boolean isV3Format() {
return v3Format;
}

public void setV3Format(boolean v3Format) {
this.v3Format = v3Format;
}

public LinkCallDataMap getSourceLinkCallDataMap() {
return sourceLinkCallDataMap;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
* @author HyunGil Jeong
*/
public enum LinkType {
SIMPLIFIED,
BASIC,
DETAILED
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ public class Node {

private boolean authorized = true;
private TimeHistogramFormat timeHistogramFormat = TimeHistogramFormat.V1;
private boolean v3Format = false;

public Node(Application application) {
this(NodeType.DETAILED, application);
Expand Down Expand Up @@ -126,14 +125,6 @@ public void setTimeHistogramFormat(TimeHistogramFormat timeHistogramFormat) {
this.timeHistogramFormat = timeHistogramFormat;
}

public boolean isV3Format() {
return v3Format;
}

public void setV3Format(boolean v3Format) {
this.v3Format = v3Format;
}

@Override
public String toString() {
return "Node [" + application + "]";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
* @author HyunGil Jeong
*/
public enum NodeType {
SIMPLIFIED,
BASIC,
DETAILED
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import java.util.Objects;

public class LinkDataMap {
public static final long AGGREGATE_TIMESTAMP = 0;

private final Map<LinkKey, LinkData> linkDataMap = new HashMap<>();
private TimeWindow timeWindow;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public TimeSeriesView getWasTimeHistogramChart(
}
TimeHistogramType timeHistogramType = TimeHistogramType.valueOf(type);

ResponseTimeHistogramServiceOption option = buildOption(application, range, ApplicationPairs.empty(), false);
ResponseTimeHistogramServiceOption option = buildOption(application, range, ApplicationPairs.empty(), true);
NodeHistogramSummary nodeHistogramSummary = responseTimeHistogramService.selectNodeHistogramData(option);

return nodeHistogramSummary.getNodeTimeHistogram(timeHistogramType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,7 @@ public FilterMapWrap getFilteredServerMapDataMadeOfDotGroupV3(
}

FilterMapWrap mapWrap;
mapWrap = new FilterMapWrap(map, TimeHistogramFormat.V2);
mapWrap.setV3Format(true);
mapWrap = new FilterMapWrap(map, TimeHistogramFormat.V1);
mapWrap.setLastFetchedTimestamp(lastScanTime);
return mapWrap;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -445,14 +445,12 @@ public MapWrap getServerMapDataV3(
final Range range = Range.between(from, to);
this.dateLimit.limit(range);

final Application application = applicationFactory.createApplication(applicationName, serviceTypeCode);
SearchOption searchOption = new SearchOption(callerRange, calleeRange, bidirectional, wasOnly);
assertSearchOption(searchOption);

Application application = applicationFactory.createApplication(applicationName, serviceTypeCode);

MapWrap mapWrap = selectApplicationMap(application, range, searchOption, NodeType.BASIC, LinkType.BASIC, useStatisticsAgentState, true);
mapWrap.setV3Format(true);
return mapWrap;
return selectApplicationMap(application, range, searchOption, NodeType.SIMPLIFIED, LinkType.SIMPLIFIED,
useStatisticsAgentState, false);
}

@GetMapping(value = "/getServerMapDataV3", params = "serviceTypeName")
Expand All @@ -466,17 +464,15 @@ public MapWrap getServerMapDataV3(
@RequestParam(value = "bidirectional", defaultValue = "true", required = false) boolean bidirectional,
@RequestParam(value = "wasOnly", defaultValue = "false", required = false) boolean wasOnly,
@RequestParam(value = "useStatisticsAgentState", defaultValue = "false", required = false)
boolean useStatisticsAgentState
) {
boolean useStatisticsAgentState) {
final Range range = Range.between(from, to);
this.dateLimit.limit(range);

final Application application = applicationFactory.createApplicationByTypeName(applicationName, serviceTypeName);
SearchOption searchOption = new SearchOption(callerRange, calleeRange, bidirectional, wasOnly);
assertSearchOption(searchOption);

Application application = applicationFactory.createApplicationByTypeName(applicationName, serviceTypeName);
MapWrap mapWrap = selectApplicationMap(application, range, searchOption, NodeType.BASIC, LinkType.BASIC, useStatisticsAgentState, true);
mapWrap.setV3Format(true);
return mapWrap;
return selectApplicationMap(application, range, searchOption, NodeType.SIMPLIFIED, LinkType.SIMPLIFIED,
useStatisticsAgentState, false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@
*
*/
public interface MapStatisticsCalleeDao {
LinkDataMap selectCallee(Application calleeApplication, Range range);
LinkDataMap selectCallee(Application calleeApplication, Range range, boolean timeAggregated);

}
Loading

0 comments on commit c5a3ca1

Please sign in to comment.