in src/main/java/org/apache/rocketmq/dashboard/service/impl/MessageTraceServiceImpl.java [169:205]
private TraceNode buildConsumeMessageTraceNode(Pair<MessageTraceView, MessageTraceView> pair) {
MessageTraceView subBeforeTrace = pair.getObject1();
MessageTraceView subAfterTrace = pair.getObject2();
TraceNode consumeNode = new TraceNode();
consumeNode.setRequestId(getTraceValue(pair, MessageTraceView::getRequestId));
consumeNode.setStoreHost(getTraceValue(pair, MessageTraceView::getStoreHost));
consumeNode.setClientHost(getTraceValue(pair, MessageTraceView::getClientHost));
if (subBeforeTrace != null) {
consumeNode.setRetryTimes(subBeforeTrace.getRetryTimes());
consumeNode.setBeginTimestamp(subBeforeTrace.getTimeStamp());
} else {
consumeNode.setRetryTimes(MESSAGE_TRACE_MISSING_VALUE);
consumeNode.setBeginTimestamp(MESSAGE_TRACE_MISSING_VALUE);
}
if (subAfterTrace != null) {
consumeNode.setCostTime(subAfterTrace.getCostTime());
consumeNode.setStatus(subAfterTrace.getStatus());
if (subAfterTrace.getTimeStamp() > 0) {
consumeNode.setEndTimestamp(subAfterTrace.getTimeStamp());
} else {
if (subBeforeTrace != null) {
if (subAfterTrace.getCostTime() >= 0) {
consumeNode.setEndTimestamp(subBeforeTrace.getTimeStamp() + subAfterTrace.getCostTime());
} else {
consumeNode.setEndTimestamp(subBeforeTrace.getTimeStamp());
}
} else {
consumeNode.setEndTimestamp(MESSAGE_TRACE_MISSING_VALUE);
}
}
} else {
consumeNode.setCostTime(MESSAGE_TRACE_MISSING_VALUE);
consumeNode.setEndTimestamp(MESSAGE_TRACE_MISSING_VALUE);
consumeNode.setStatus(MessageTraceStatusEnum.UNKNOWN.getStatus());
}
return consumeNode;
}