in src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageTraceServiceImpl.java [97:128]
private MessageTraceGraph buildMessageTraceGraph(List<MessageTraceView> messageTraceViews) {
MessageTraceGraph messageTraceGraph = new MessageTraceGraph();
messageTraceGraph.setMessageTraceViews(messageTraceViews);
if (CollectionUtils.isEmpty(messageTraceViews)) {
return messageTraceGraph;
}
ProducerNode producerNode = null;
List<TraceNode> transactionNodeList = new ArrayList<>();
Map<String, Pair<MessageTraceView, MessageTraceView>> requestIdTracePairMap = Maps.newHashMap();
for (MessageTraceView messageTraceView : messageTraceViews) {
switch (TraceType.valueOf(messageTraceView.getTraceType())) {
case Pub:
producerNode = buildMessageRoot(messageTraceView);
break;
case EndTransaction:
transactionNodeList.add(buildTransactionNode(messageTraceView));
break;
case SubBefore:
case SubAfter:
putIntoMessageTraceViewGroupMap(messageTraceView, requestIdTracePairMap);
break;
default:
break;
}
}
if (producerNode != null) {
producerNode.setTransactionNodeList(sortTraceNodeListByBeginTimestamp(transactionNodeList));
}
messageTraceGraph.setProducerNode(producerNode);
messageTraceGraph.setSubscriptionNodeList(buildSubscriptionNodeList(requestIdTracePairMap));
return messageTraceGraph;
}