
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