All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.jaegertracing.analytics.query.json.JsonSpanStdDeserializer Maven / Gradle / Ivy

package io.jaegertracing.analytics.query.json;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import io.jaegertracing.analytics.query.JsonSpan;
import io.jaegertracing.analytics.query.KeyValue;
import io.jaegertracing.analytics.query.Reference;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * @author Pavol Loffay
 */
public class JsonSpanStdDeserializer extends StdDeserializer {

  private ObjectMapper objectMapper = JsonHelper.configure(new ObjectMapper());

  protected JsonSpanStdDeserializer() {
    super(JsonSpan.class);
  }

  @Override
  public JsonSpan deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
    JsonNode node = objectMapper.getFactory().setCodec(objectMapper).getCodec().readTree(jp);
    JsonSpan span = new JsonSpan();

    JsonNode traceIdNode = node.get("traceID");
    span.traceId = objectMapper.treeToValue(traceIdNode, String.class);
    JsonNode spanIdNode = node.get("spanID");
    span.spanId = objectMapper.treeToValue(spanIdNode, String.class);
    List references = deserializeReferences(node);
    if (references.size() > 0) {
      span.parentId = references.get(0).getSpanId();
    }

    JsonNode startTimeNode = node.get("startTime");
    span.startTimeMicros = objectMapper.treeToValue(startTimeNode, Long.class);
    JsonNode durationNode = node.get("duration");
    span.durationMicros = objectMapper.treeToValue(durationNode, Long.class);

    JsonNode tagsNode = node.get("tags");
    List tags = Arrays.asList(objectMapper.treeToValue(tagsNode, KeyValue[].class));
    span.tags = new LinkedHashMap<>();
    for (KeyValue keyValue: tags) {
      span.tags.put(keyValue.getKey(), keyValue.getValueString());
    }

    JsonNode operationNameNode = node.get("operationName");
    span.operationName = objectMapper.treeToValue(operationNameNode, String.class);
    JsonNode processIdNode = node.get("processID");
    span.processId = objectMapper.treeToValue(processIdNode, String.class);

    return span;
  }

  private List deserializeReferences(JsonNode node) throws JsonProcessingException {
    List references = new ArrayList<>();
    JsonNode parentSpanID = node.get("parentSpanID");
    if (parentSpanID != null) {
      Reference reference = new Reference();
      reference.setSpanId(parentSpanID.asText());
      references.add(reference);
    }

    Reference[] referencesArr = objectMapper.treeToValue(node.get("references"), Reference[].class);
    references.addAll(Arrays.asList(referencesArr));
    return references;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy