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();
}