in research/zipkin-opensearch-to-otel/src/main/java/com/amazon/dataprepper/research/zipkin/ZipkinOpenSearchToOtelPrepper.java [50:90]
public static Span sourceToSpan(final Map<String, Object> source) {
final String traceID = (String) source.get(TRACE_ID);
final String spanID = (String) source.get(SPAN_ID);
final String name = (String) source.get(NAME);
final Long startTime = (Long) source.get(TIME_STAMP);
final Long duration = Long.valueOf((Integer) source.get(DURATION));
final long endTime = startTime + duration;
final String parentID = (String) source.get(PARENT_ID);
final String spanKind = (String) source.get(SPAN_KIND);
// TODO: read span status from tags
final Map<String, Object> tags = (Map<String, Object>) source.get(TAGS);
Integer statusCode = null;
if (tags != null) {
statusCode = extractStatusCodeFromTags(tags);
}
final Span.Builder spanBuilder = Span.newBuilder()
.setStartTimeUnixNano(startTime * 1000) // Convert to UnixNano
.setEndTimeUnixNano(endTime * 1000); // Convert to UnixNano
if (traceID != null) {
spanBuilder.setTraceId(ByteString.copyFromUtf8(traceID));
}
if (spanID != null) {
spanBuilder.setSpanId(ByteString.copyFromUtf8(spanID));
}
if (name != null) {
spanBuilder.setName(name);
}
if (parentID != null) {
spanBuilder.setParentSpanId(ByteString.copyFromUtf8(parentID));
}
if (spanKind != null) {
spanBuilder.setKind(Span.SpanKind.valueOf(spanKind));
}
if (statusCode != null) {
spanBuilder.setStatus(Status.newBuilder().setCodeValue(statusCode));
}
return spanBuilder.build();
}