public String getGlobalTransaction()

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";
  }