use of com.navercorp.pinpoint.web.service.map.processor.LinkDataMapProcessor in project pinpoint by naver.
the class ResponseTimeHistogramServiceImpl method selectLinkHistogramData.
@Override
public LinkHistogramSummary selectLinkHistogramData(Application fromApplication, Application toApplication, Range range) {
Objects.requireNonNull(fromApplication, "fromApplication");
Objects.requireNonNull(toApplication, "toApplication");
Objects.requireNonNull(range, "range");
LinkDataDuplexMap linkDataDuplexMap;
ServiceType fromApplicationServiceType = fromApplication.getServiceType();
CreateType createType = CreateType.Target;
// For user or queue originating links, we must scan using to applications
if (fromApplicationServiceType.isUser() || fromApplicationServiceType.isQueue()) {
createType = CreateType.Source;
LinkDataMapProcessor sourceApplicationFilter = new SourceApplicationFilter(fromApplication);
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, LinkDataMapProcessor.NO_OP, sourceApplicationFilter);
linkDataDuplexMap = linkSelector.select(Collections.singletonList(toApplication), range, 0, 1);
} else {
LinkDataMapProcessor destinationApplication = new DestinationApplicationFilter(toApplication);
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplication, LinkDataMapProcessor.NO_OP);
linkDataDuplexMap = linkSelector.select(Collections.singletonList(fromApplication), range, 1, 0);
}
NodeList nodeList = NodeListFactory.createNodeList(NodeType.DETAILED, linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(LinkType.DETAILED, nodeList, linkDataDuplexMap, range);
LinkKey linkKey = new LinkKey(fromApplication, toApplication);
Link link = linkList.getLink(linkKey);
if (link == null) {
return createEmptyLinkHistogramSummary(createType, fromApplication, toApplication, range);
}
return new LinkHistogramSummary(link);
}
use of com.navercorp.pinpoint.web.service.map.processor.LinkDataMapProcessor in project pinpoint by naver.
the class ResponseTimeHistogramServiceImpl method selectNodeHistogramData.
@Override
public NodeHistogramSummary selectNodeHistogramData(ResponseTimeHistogramServiceOption option) {
Node node = new Node(option.getApplication());
ServiceType applicationServiceType = option.getApplication().getServiceType();
List<Application> sourceApplications = option.getFromApplications();
List<Application> destinationApplications = option.getToApplications();
final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory();
final ServerInstanceListFactory serverInstanceListFactory = createServerInstanceListFactory(option);
if (applicationServiceType.isWas()) {
NodeHistogram nodeHistogram = nodeHistogramFactory.createWasNodeHistogram(option.getApplication(), option.getRange());
node.setNodeHistogram(nodeHistogram);
ServerInstanceList serverInstanceList = serverInstanceListFactory.createWasNodeInstanceList(node, option.getRange().getTo());
return new NodeHistogramSummary(serverInstanceList, nodeHistogram);
} else if (applicationServiceType.isTerminal() || applicationServiceType.isUnknown() || applicationServiceType.isAlias()) {
if (sourceApplications.isEmpty()) {
return createEmptyNodeHistogramSummary(serverInstanceListFactory, option.getApplication(), option.getRange());
}
LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(option.getApplication());
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, option.getRange(), 1, 0);
ServerInstanceList serverInstanceList = serverInstanceListFactory.createEmptyNodeInstanceList();
if (applicationServiceType.isTerminal() || applicationServiceType.isAlias()) {
serverInstanceList = serverInstanceListFactory.createTerminalNodeInstanceList(node, linkDataDuplexMap);
}
NodeList nodeList = NodeListFactory.createNodeList(NodeType.DETAILED, linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(LinkType.DETAILED, nodeList, linkDataDuplexMap, option.getRange());
NodeHistogram nodeHistogram = nodeHistogramFactory.createTerminalNodeHistogram(option.getApplication(), option.getRange(), linkList);
return new NodeHistogramSummary(serverInstanceList, nodeHistogram);
} else if (applicationServiceType.isQueue()) {
LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(option.getApplication());
if (sourceApplications.isEmpty()) {
if (destinationApplications.isEmpty()) {
return createEmptyNodeHistogramSummary(serverInstanceListFactory, option.getApplication(), option.getRange());
}
// Retrieve callers
LinkDataMapProcessor applicationFilter = new ApplicationFilter(option.getApplication());
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, LinkDataMapProcessor.NO_OP, applicationFilter);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, option.getRange(), 0, 2);
LinkDataMap linkDataMap = destinationApplicationFilter.processLinkDataMap(linkDataDuplexMap.getTargetLinkDataMap(), option.getRange());
for (LinkData linkData : linkDataMap.getLinkDataList()) {
sourceApplications.add(linkData.getFromApplication());
}
}
// Check using from applications first for caller's link data
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, option.getRange(), 1, 0);
ServerInstanceList serverInstanceList = serverInstanceListFactory.createQueueNodeInstanceList(node, linkDataDuplexMap);
NodeList nodeList = NodeListFactory.createNodeList(NodeType.DETAILED, linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(LinkType.DETAILED, nodeList, linkDataDuplexMap, option.getRange());
NodeHistogram nodeHistogram = nodeHistogramFactory.createQueueNodeHistogram(option.getApplication(), option.getRange(), linkList);
return new NodeHistogramSummary(serverInstanceList, nodeHistogram);
} else if (applicationServiceType.isUser()) {
if (destinationApplications.isEmpty()) {
return createEmptyNodeHistogramSummary(serverInstanceListFactory, option.getApplication(), option.getRange());
}
LinkDataMapProcessor sourceApplicationFilter = new SourceApplicationFilter(option.getApplication());
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, LinkDataMapProcessor.NO_OP, sourceApplicationFilter);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(destinationApplications, option.getRange(), 0, 1);
ServerInstanceList serverInstanceList = serverInstanceListFactory.createUserNodeInstanceList();
NodeList nodeList = NodeListFactory.createNodeList(NodeType.DETAILED, linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(LinkType.DETAILED, nodeList, linkDataDuplexMap, option.getRange());
NodeHistogram nodeHistogram = nodeHistogramFactory.createUserNodeHistogram(option.getApplication(), option.getRange(), linkList);
return new NodeHistogramSummary(serverInstanceList, nodeHistogram);
} else {
return createEmptyNodeHistogramSummary(serverInstanceListFactory, option.getApplication(), option.getRange());
}
}
use of com.navercorp.pinpoint.web.service.map.processor.LinkDataMapProcessor in project pinpoint by naver.
the class MapServiceImpl method selectApplicationMap.
/**
* Used in the main UI - draws the server map by querying the timeslot by time.
*/
@Override
public ApplicationMap selectApplicationMap(MapServiceOption option) {
logger.debug("SelectApplicationMap");
StopWatch watch = new StopWatch("ApplicationMap");
watch.start("ApplicationMap Hbase Io Fetch(Caller,Callee) Time");
final SearchOption searchOption = option.getSearchOption();
LinkSelectorType linkSelectorType = searchOption.getLinkSelectorType();
int callerSearchDepth = searchOption.getCallerSearchDepth();
int calleeSearchDepth = searchOption.getCalleeSearchDepth();
LinkDataMapProcessor callerLinkDataMapProcessor = LinkDataMapProcessor.NO_OP;
if (searchOption.isWasOnly()) {
callerLinkDataMapProcessor = new WasOnlyProcessor();
}
LinkDataMapProcessor calleeLinkDataMapProcessor = LinkDataMapProcessor.NO_OP;
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(linkSelectorType, callerLinkDataMapProcessor, calleeLinkDataMapProcessor);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(Collections.singletonList(option.getSourceApplication()), option.getRange(), callerSearchDepth, calleeSearchDepth);
watch.stop();
if (linkDataLimiter.excess(linkDataDuplexMap.getTotalCount())) {
throw new RuntimeException("Too many link data. Reduce the values of the Inbound/outbound or do not select the bidirectional option. limiter=" + linkDataLimiter.toString(linkDataDuplexMap.getTotalCount()));
}
watch.start("ApplicationMap MapBuilding(Response) Time");
ApplicationMapBuilder builder = createApplicationMapBuilder(option);
ApplicationMap map = builder.build(linkDataDuplexMap, buildTimeoutMillis);
if (map.getNodes().isEmpty()) {
map = builder.build(option.getSourceApplication(), buildTimeoutMillis);
}
watch.stop();
if (logger.isInfoEnabled()) {
logger.info("ApplicationMap BuildTime: {}", watch.prettyPrint());
}
if (serverMapDataFilter != null) {
map = serverMapDataFilter.dataFiltering(map);
}
return map;
}
Aggregations