Search in sources :

Example 6 with Node

use of com.navercorp.pinpoint.web.applicationmap.nodes.Node 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());
    }
}
Also used : SourceApplicationFilter(com.navercorp.pinpoint.web.service.map.processor.SourceApplicationFilter) ServerInstanceListFactory(com.navercorp.pinpoint.web.applicationmap.appender.server.ServerInstanceListFactory) DefaultServerInstanceListFactory(com.navercorp.pinpoint.web.applicationmap.appender.server.DefaultServerInstanceListFactory) StatisticsServerInstanceListFactory(com.navercorp.pinpoint.web.applicationmap.appender.server.StatisticsServerInstanceListFactory) LinkData(com.navercorp.pinpoint.web.applicationmap.rawdata.LinkData) NodeHistogramSummary(com.navercorp.pinpoint.web.applicationmap.nodes.NodeHistogramSummary) Node(com.navercorp.pinpoint.web.applicationmap.nodes.Node) ServerInstanceList(com.navercorp.pinpoint.web.applicationmap.nodes.ServerInstanceList) NodeList(com.navercorp.pinpoint.web.applicationmap.nodes.NodeList) NodeHistogram(com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram) LinkSelector(com.navercorp.pinpoint.web.service.map.LinkSelector) LinkDataDuplexMap(com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataDuplexMap) DestinationApplicationFilter(com.navercorp.pinpoint.web.service.map.processor.DestinationApplicationFilter) DefaultNodeHistogramFactory(com.navercorp.pinpoint.web.applicationmap.appender.histogram.DefaultNodeHistogramFactory) NodeHistogramFactory(com.navercorp.pinpoint.web.applicationmap.appender.histogram.NodeHistogramFactory) ServiceType(com.navercorp.pinpoint.common.trace.ServiceType) LinkDataMapProcessor(com.navercorp.pinpoint.web.service.map.processor.LinkDataMapProcessor) DestinationApplicationFilter(com.navercorp.pinpoint.web.service.map.processor.DestinationApplicationFilter) SourceApplicationFilter(com.navercorp.pinpoint.web.service.map.processor.SourceApplicationFilter) ApplicationFilter(com.navercorp.pinpoint.web.service.map.processor.ApplicationFilter) LinkList(com.navercorp.pinpoint.web.applicationmap.link.LinkList) Application(com.navercorp.pinpoint.web.vo.Application) LinkDataMap(com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataMap)

Example 7 with Node

use of com.navercorp.pinpoint.web.applicationmap.nodes.Node in project pinpoint by naver.

the class TransactionInfoViewModel method getApplicationMapData.

@JsonProperty("applicationMapData")
public Map<String, List<Object>> getApplicationMapData() {
    Map<String, List<Object>> result = new HashMap<String, List<Object>>();
    if (timeHistogramFormat == TimeHistogramFormat.V2) {
        for (Node node : nodes) {
            node.setTimeHistogramFormat(timeHistogramFormat);
        }
        for (Link link : links) {
            link.setTimeHistogramFormat(timeHistogramFormat);
        }
    }
    List<Object> nodeDataArray = new ArrayList<>(nodes);
    result.put("nodeDataArray", nodeDataArray);
    List<Object> linkDataArray = new ArrayList<>(links);
    result.put("linkDataArray", linkDataArray);
    return result;
}
Also used : HashMap(java.util.HashMap) Node(com.navercorp.pinpoint.web.applicationmap.nodes.Node) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) Link(com.navercorp.pinpoint.web.applicationmap.link.Link) JsonProperty(com.fasterxml.jackson.annotation.JsonProperty)

Example 8 with Node

use of com.navercorp.pinpoint.web.applicationmap.nodes.Node in project pinpoint by naver.

the class ApplicationMapBuilder method build.

public ApplicationMap build(Application application, long timeoutMillis) {
    logger.info("Building empty application map");
    NodeList nodeList = new NodeList();
    LinkList emptyLinkList = new LinkList();
    NodeType nodeType = this.nodeType;
    if (nodeType == null) {
        nodeType = NodeType.DETAILED;
    }
    Node node = new Node(nodeType, application);
    if (serverInstanceListFactory != null) {
        ServerInstanceList runningInstances = serverInstanceListFactory.createWasNodeInstanceList(node, range.getTo());
        if (runningInstances.getInstanceCount() > 0) {
            node.setServerInstanceList(runningInstances);
            nodeList.addNode(node);
        }
    }
    NodeHistogramFactory nodeHistogramFactory = this.nodeHistogramFactory;
    if (nodeHistogramFactory == null) {
        nodeHistogramFactory = new EmptyNodeHistogramFactory();
    }
    NodeHistogramAppender nodeHistogramAppender = nodeHistogramAppenderFactory.create(nodeHistogramFactory);
    nodeHistogramAppender.appendNodeHistogram(range, nodeList, emptyLinkList, timeoutMillis);
    return new DefaultApplicationMap(range, nodeList, emptyLinkList);
}
Also used : NodeHistogramAppender(com.navercorp.pinpoint.web.applicationmap.appender.histogram.NodeHistogramAppender) NodeList(com.navercorp.pinpoint.web.applicationmap.nodes.NodeList) NodeType(com.navercorp.pinpoint.web.applicationmap.nodes.NodeType) Node(com.navercorp.pinpoint.web.applicationmap.nodes.Node) ServerInstanceList(com.navercorp.pinpoint.web.applicationmap.nodes.ServerInstanceList) EmptyNodeHistogramFactory(com.navercorp.pinpoint.web.applicationmap.appender.histogram.EmptyNodeHistogramFactory) LinkList(com.navercorp.pinpoint.web.applicationmap.link.LinkList) EmptyNodeHistogramFactory(com.navercorp.pinpoint.web.applicationmap.appender.histogram.EmptyNodeHistogramFactory) NodeHistogramFactory(com.navercorp.pinpoint.web.applicationmap.appender.histogram.NodeHistogramFactory)

Example 9 with Node

use of com.navercorp.pinpoint.web.applicationmap.nodes.Node in project pinpoint by naver.

the class DefaultNodeHistogramAppender method appendNodeHistogram.

@Override
public void appendNodeHistogram(final Range range, final NodeList nodeList, final LinkList linkList, final long timeoutMillis) {
    if (nodeList == null) {
        return;
    }
    final Collection<Node> nodes = nodeList.getNodeList();
    if (CollectionUtils.isEmpty(nodes)) {
        return;
    }
    final AtomicBoolean stopSign = new AtomicBoolean();
    final CompletableFuture[] futures = getNodeHistogramFutures(range, nodes, linkList, stopSign);
    if (-1 == timeoutMillis) {
        // Returns the result value when complete
        CompletableFuture.allOf(futures).join();
    } else {
        try {
            CompletableFuture.allOf(futures).get(timeoutMillis, TimeUnit.MILLISECONDS);
        } catch (Exception e) {
            // InterruptedException, ExecutionException, TimeoutException
            stopSign.set(Boolean.TRUE);
            String cause = "an error occurred while adding node histogram";
            if (e instanceof TimeoutException) {
                cause += " build timed out. timeout=" + timeoutMillis + "ms";
            }
            throw new RuntimeException(cause, e);
        }
    }
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) CompletableFuture(java.util.concurrent.CompletableFuture) Node(com.navercorp.pinpoint.web.applicationmap.nodes.Node) TimeoutException(java.util.concurrent.TimeoutException) TimeoutException(java.util.concurrent.TimeoutException)

Example 10 with Node

use of com.navercorp.pinpoint.web.applicationmap.nodes.Node in project pinpoint by naver.

the class ApplicationMapVerifier method verifyNodes.

private void verifyNodes(Collection<Node> otherNodes) {
    Collection<Node> thisNodes = applicationMap.getNodes();
    verifySize(thisNodes, otherNodes);
    for (Node otherNode : otherNodes) {
        String nodeNameToFind = otherNode.getNodeName();
        Node thisNode = findNode(thisNodes, nodeNameToFind);
        if (thisNode == null) {
            Assert.fail(otherNode + " not in " + thisNodes);
        }
        verifyNode(thisNode, otherNode);
    }
}
Also used : Node(com.navercorp.pinpoint.web.applicationmap.nodes.Node)

Aggregations

Node (com.navercorp.pinpoint.web.applicationmap.nodes.Node)28 NodeList (com.navercorp.pinpoint.web.applicationmap.nodes.NodeList)13 Application (com.navercorp.pinpoint.web.vo.Application)13 Test (org.junit.Test)13 Range (com.navercorp.pinpoint.web.vo.Range)12 Link (com.navercorp.pinpoint.web.applicationmap.link.Link)10 LinkList (com.navercorp.pinpoint.web.applicationmap.link.LinkList)9 NodeHistogram (com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram)7 LinkDataDuplexMap (com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataDuplexMap)7 Histogram (com.navercorp.pinpoint.web.applicationmap.histogram.Histogram)5 LinkData (com.navercorp.pinpoint.web.applicationmap.rawdata.LinkData)5 HistogramSlot (com.navercorp.pinpoint.common.trace.HistogramSlot)4 ServerInstanceList (com.navercorp.pinpoint.web.applicationmap.nodes.ServerInstanceList)4 CompletableFuture (java.util.concurrent.CompletableFuture)4 ServiceType (com.navercorp.pinpoint.common.trace.ServiceType)3 ArrayList (java.util.ArrayList)3 NodeHistogramFactory (com.navercorp.pinpoint.web.applicationmap.appender.histogram.NodeHistogramFactory)2 List (java.util.List)2 TimeoutException (java.util.concurrent.TimeoutException)2 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2