Exemplo n.º 1
0
  @Override
  public void insert(TSpan span) {
    if (span == null) {
      throw new NullPointerException("span must not be null");
    }

    Trace trace = findTrace(span.getAgentId(), span.getAgentStartTime(), span.getSpanId());

    final TransactionId transactionId =
        TransactionIdUtils.parseTransactionId(span.getTransactionId());
    trace.setTraceAgentId(transactionId.getAgentId());
    if (trace.getTraceAgentId() == null) {
      trace.setTraceAgentId(span.getAgentId());
    }
    trace.setTraceAgentStartTime(transactionId.getAgentStartTime());
    trace.setTraceTransactionSequence(transactionId.getTransactionSequence());

    trace.setSpanId(span.getSpanId());
    trace.setParentSpanId(span.getParentSpanId());

    trace.setStartTime(span.getStartTime());
    trace.setElapsed(span.getElapsed());

    trace.setRpc(span.getRpc());

    trace.setServiceType(span.getServiceType());
    trace.setEndPoint(span.getEndPoint());
    trace.setFlag(span.getFlag());

    ApiMetaData apiMetaData = findApiMetaData(trace.getAgentId(), span.getApiId());
    trace.setApiId(apiMetaData.getId());

    trace.setErrCode(span.getErr());

    trace.setRemoteAddr(span.getRemoteAddr());

    final TIntStringValue exceptionInfo = span.getExceptionInfo();
    if (exceptionInfo != null) {
      trace.setHasException(true);
      trace.setExceptionId(exceptionInfo.getIntValue());
      trace.setExceptionMessage(exceptionInfo.getStringValue());
    }

    long acceptedTime = acceptedTimeService.getAcceptedTime();
    trace.setCollectorAcceptTime(acceptedTime);

    Trace savedTrace = traceRepository.saveAndFlush(trace);

    if (span.getAnnotations() != null) {
      List<Annotation> annotations =
          span.getAnnotations()
              .stream()
              .filter(tAnnotation -> tAnnotation != null)
              .map(
                  tAnnotation -> {
                    Annotation annotation = new Annotation();
                    annotation.setKey(tAnnotation.getKey());
                    Object value = transcoder.getMappingValue(tAnnotation);
                    annotation.setValueType(transcoder.getTypeCode(value));
                    annotation.setByteValue(transcoder.encode(value, annotation.getValueType()));
                    annotation.setTraceId(savedTrace.getId());
                    return annotation;
                  })
              .collect(Collectors.toList());
      annotationRepository.save(annotations);
    }

    addNestedSpanEvent(span, savedTrace);
  }