Span generateSpan()

in exporters/trace/src/main/java/com/google/cloud/opentelemetry/trace/TraceTranslator.java [81:129]


  Span generateSpan(SpanData spanData, String projectId) {
    final String traceId = spanData.getTraceId();
    final String spanId = spanData.getSpanId();
    Map<String, AttributeValue> extraAttributes = new HashMap<>(fixedAttributes);
    // Add InstrumentationLibrary labels
    if (spanData.getInstrumentationLibraryInfo().getName() != null) {
      extraAttributes.put(
          INSTRUMENTATION_LIBRARY_NAME_KEY,
          toAttributeValueString(spanData.getInstrumentationLibraryInfo().getName()));
    }
    if (spanData.getInstrumentationLibraryInfo().getVersion() != null) {
      extraAttributes.put(
          INSTRUMENTATION_LIBRARY_VERSION_KEY,
          toAttributeValueString(spanData.getInstrumentationLibraryInfo().getVersion()));
    }
    // Add resource labels
    insertResourceAttributes(spanData.getResource(), extraAttributes);
    // Add Agent label
    extraAttributes.put(AGENT_LABEL_KEY, AGENT_LABEL_VALUE);
    SpanName spanName =
        SpanName.newBuilder().setProject(projectId).setTrace(traceId).setSpan(spanId).build();
    Span.Builder spanBuilder =
        Span.newBuilder()
            .setName(spanName.toString())
            .setSpanId(spanId)
            .setDisplayName(
                toTruncatableStringProto(toDisplayName(spanData.getName(), spanData.getKind())))
            .setStartTime(toTimestampProto(spanData.getStartEpochNanos()))
            .setAttributes(toAttributesProto(spanData.getAttributes(), extraAttributes))
            .setTimeEvents(toTimeEventsProto(spanData.getEvents()));
    StatusData status = spanData.getStatus();
    if (status != null) {
      Status statusProto = toStatusProto(status);
      if (statusProto != null) {
        spanBuilder.setStatus(statusProto);
      }
    }
    long end = spanData.getEndEpochNanos();
    if (end != 0) {
      spanBuilder.setEndTime(toTimestampProto(end));
    }
    spanBuilder.setLinks(toLinksProto(spanData.getLinks(), spanData.getTotalRecordedLinks()));
    if (spanData.getParentSpanContext().isValid()) {
      spanBuilder.setParentSpanId(spanData.getParentSpanId());
    }
    boolean hasRemoteParent = spanData.getParentSpanContext().isRemote();
    spanBuilder.setSameProcessAsParentSpan(BoolValue.of(!hasRemoteParent));
    return spanBuilder.build();
  }