public static Span sourceToSpan()

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