in alpha/alpha-ui/src/main/java/org/apache/servicecomb/pack/alpha/ui/controller/TransactionController.java [143:216]
public String getGlobalTransaction(ModelMap map, @PathVariable("globalTxId") String globalTxId)
throws Exception {
List<EventDTO> events = new ArrayList<>();
List<SubTransactionDTO> subTransactions = new ArrayList<>();
GlobalTransaction globalTransaction = findGlobalTransactionByGlobalTxId(globalTxId);
globalTransaction.getEvents().forEach(event -> {
EventDTO eventDTO = EventDTO.builder()
// Common Event properties
.type(event.get("type").toString())
.serviceName(event.get("serviceName").toString())
.instanceId(event.get("instanceId").toString())
.timeout(event.get("timeout") != null ? Integer.valueOf(event.get("timeout").toString()) : 0)
.globalTxId(event.get("globalTxId").toString())
.parentTxId(event.get("parentTxId") != null ? event.get("parentTxId").toString() : null)
.localTxId(event.get("localTxId") != null ? event.get("localTxId").toString() : null)
.createTime(new Date(Long.valueOf(event.get("createTime").toString())))
.build();
if (eventDTO.getType().equals("TxStartedEvent")) {
// TxStartedEvent properties
if (event.containsKey("compensationMethod")) {
eventDTO.setCompensationMethod(event.get("compensationMethod").toString());
}
if (event.containsKey("reverseRetries")) {
eventDTO.setReverseRetries(Long.valueOf(event.get("reverseRetries").toString()));
}
if (event.containsKey("forwardRetries")) {
eventDTO.setForwardRetries(Long.valueOf(event.get("forwardRetries").toString()));
}
if (event.containsKey("reverseTimeout")) {
eventDTO.setReverseTimeout(Long.valueOf(event.get("reverseTimeout").toString()));
}
if (event.containsKey("forwardTimeout")) {
eventDTO.setForwardTimeout(Long.valueOf(event.get("forwardTimeout").toString()));
}
if (event.containsKey("timeout")) {
eventDTO.setTimeout(Long.valueOf(event.get("timeout").toString()));
}
if (event.containsKey("retryDelayInMilliseconds")) {
eventDTO.setRetryDelayInMilliseconds(Long.valueOf(event.get("retryDelayInMilliseconds").toString()));
}
}
if (eventDTO.getType().equals("TxAbortedEvent") ||
eventDTO.getType().equals("SagaAbortedEvent") ||
eventDTO.getType().equals("TxCompensateAckFailedEvent") ||
eventDTO.getType().equals("TxCompensateAckTimeoutEvent")) {
if (event.containsKey("payloads")) {
Decoder decoder = Base64.getDecoder();
String exception;
try {
exception = new String(decoder.decode(event.get("payloads").toString()), "UTF-8");
} catch (IOException e) {
exception = "BASE64Decoder error";
LOG.error(e.getMessage(), e);
}
eventDTO.setException(exception);
}
}
events.add(eventDTO);
});
globalTransaction.getSubTransactions().forEach(sub -> {
subTransactions.add(
SubTransactionDTO.builder().parentTxId(globalTxId).localTxId(sub.getLocalTxId())
.beginTime(sub.getBeginTime()).endTime(sub.getEndTime())
.durationTime(sub.getDurationTime()).state(sub.getState().name()).build());
});
map.put("events", events);
map.put("globalTxId", globalTransaction.getGlobalTxId());
map.put("state", globalTransaction.getState());
map.put("endTime", globalTransaction.getEndTime());
map.put("suspendedType", globalTransaction.getSuspendedType());
map.put("subTransactions", subTransactions);
return "transaction_details";
}