Loading skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java +41 −41 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.ai.cloud.skywalking.analysis.chainbuild.entity.TraceSpanTree; import com.ai.cloud.skywalking.analysis.chainbuild.util.VersionIdentifier; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; import com.ai.cloud.skywalking.protocol.Span; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; Loading @@ -13,12 +13,11 @@ import org.apache.hadoop.io.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ai.cloud.skywalking.analysis.chainbuild.entity.TraceSpanTree; import com.ai.cloud.skywalking.analysis.chainbuild.util.VersionIdentifier; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; import com.ai.cloud.skywalking.protocol.Span; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ChainBuildMapper extends TableMapper<Text, Text> { public class ChainBuildMapper extends TableMapper<Text, TraceSpanTree> { private Logger logger = LoggerFactory .getLogger(ChainBuildMapper.class); Loading Loading @@ -46,6 +45,7 @@ public class ChainBuildMapper extends TableMapper<Text, Text> { TraceSpanTree tree = new TraceSpanTree(); tree.build(spanList); context.write(new Text(tree.getTreeRoot().getNodeRefToken()), tree); } catch (Throwable e) { logger.error("Failed to mapper call chain[" + key.toString() + "]", e); Loading skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/TraceSpanNode.java +217 −214 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild.entity; import java.util.List; import com.ai.cloud.skywalking.analysis.chainbuild.exception.TraceSpanTreeSerializeException; import com.ai.cloud.skywalking.analysis.chainbuild.util.StringUtil; import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator; import com.ai.cloud.skywalking.protocol.CallType; import com.ai.cloud.skywalking.protocol.Span; import java.util.List; public class TraceSpanNode { protected TraceSpanNode prev = null; Loading Loading @@ -89,7 +90,9 @@ public class TraceSpanNode { this.businessKey = span.getBusinessKey(); this.applicationId = span.getApplicationId(); //TODO: to set nodeToken //nodeToken : MD5(parentLevelId + levelId + viewpoint) nodeRefToken = TokenGenerator.generateNodeToken(parentLevel + "-" + levelId + "-" + viewPointId); } protected TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next, List<TraceSpanNode> spanContainer) { Loading skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/TraceSpanTree.java +175 −135 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild.entity; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ai.cloud.skywalking.analysis.chainbuild.exception.BuildTraceSpanTreeException; import com.ai.cloud.skywalking.analysis.chainbuild.exception.TraceSpanTreeSerializeException; import com.ai.cloud.skywalking.analysis.chainbuild.util.StringUtil; import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator; import com.ai.cloud.skywalking.protocol.Span; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import org.apache.hadoop.io.Writable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class TraceSpanTree { public class TraceSpanTree implements Writable { private Logger logger = LoggerFactory.getLogger(TraceSpanTree.class); private String userId = null; Loading Loading @@ -142,4 +149,37 @@ public class TraceSpanTree { } } public String serialize() throws TraceSpanTreeSerializeException { beforeSerialize(); return new Gson().toJson(this); } @Override public void write(DataOutput out) throws IOException { try { out.write(serialize().getBytes()); } catch (TraceSpanTreeSerializeException e) { logger.error("Failed to serialize Chain Id[" + cid + "]", e); } } @Override public void readFields(DataInput in) throws IOException { String value = in.readLine(); try { JsonObject jsonObject = (JsonObject) new JsonParser().parse(value); userId = jsonObject.get("userId").getAsString(); cid = jsonObject.get("cid").getAsString(); treeRoot = new Gson().fromJson(jsonObject.get("treeRoot"), TraceSpanNode.class); spanContainer = new Gson().fromJson(jsonObject.get("spanContainer"), new TypeToken<List<TraceSpanNode>>() { }.getType()); } catch (Exception e) { logger.error("Failed to parse the value[" + value + "] to TraceSpanTree Object", e); } } public TraceSpanNode getTreeRoot() { return treeRoot; } } Loading
skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java +41 −41 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.ai.cloud.skywalking.analysis.chainbuild.entity.TraceSpanTree; import com.ai.cloud.skywalking.analysis.chainbuild.util.VersionIdentifier; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; import com.ai.cloud.skywalking.protocol.Span; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; Loading @@ -13,12 +13,11 @@ import org.apache.hadoop.io.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ai.cloud.skywalking.analysis.chainbuild.entity.TraceSpanTree; import com.ai.cloud.skywalking.analysis.chainbuild.util.VersionIdentifier; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; import com.ai.cloud.skywalking.protocol.Span; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ChainBuildMapper extends TableMapper<Text, Text> { public class ChainBuildMapper extends TableMapper<Text, TraceSpanTree> { private Logger logger = LoggerFactory .getLogger(ChainBuildMapper.class); Loading Loading @@ -46,6 +45,7 @@ public class ChainBuildMapper extends TableMapper<Text, Text> { TraceSpanTree tree = new TraceSpanTree(); tree.build(spanList); context.write(new Text(tree.getTreeRoot().getNodeRefToken()), tree); } catch (Throwable e) { logger.error("Failed to mapper call chain[" + key.toString() + "]", e); Loading
skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/TraceSpanNode.java +217 −214 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild.entity; import java.util.List; import com.ai.cloud.skywalking.analysis.chainbuild.exception.TraceSpanTreeSerializeException; import com.ai.cloud.skywalking.analysis.chainbuild.util.StringUtil; import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator; import com.ai.cloud.skywalking.protocol.CallType; import com.ai.cloud.skywalking.protocol.Span; import java.util.List; public class TraceSpanNode { protected TraceSpanNode prev = null; Loading Loading @@ -89,7 +90,9 @@ public class TraceSpanNode { this.businessKey = span.getBusinessKey(); this.applicationId = span.getApplicationId(); //TODO: to set nodeToken //nodeToken : MD5(parentLevelId + levelId + viewpoint) nodeRefToken = TokenGenerator.generateNodeToken(parentLevel + "-" + levelId + "-" + viewPointId); } protected TraceSpanNode(TraceSpanNode parent, TraceSpanNode sub, TraceSpanNode prev, TraceSpanNode next, List<TraceSpanNode> spanContainer) { Loading
skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/TraceSpanTree.java +175 −135 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild.entity; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ai.cloud.skywalking.analysis.chainbuild.exception.BuildTraceSpanTreeException; import com.ai.cloud.skywalking.analysis.chainbuild.exception.TraceSpanTreeSerializeException; import com.ai.cloud.skywalking.analysis.chainbuild.util.StringUtil; import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator; import com.ai.cloud.skywalking.protocol.Span; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import org.apache.hadoop.io.Writable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class TraceSpanTree { public class TraceSpanTree implements Writable { private Logger logger = LoggerFactory.getLogger(TraceSpanTree.class); private String userId = null; Loading Loading @@ -142,4 +149,37 @@ public class TraceSpanTree { } } public String serialize() throws TraceSpanTreeSerializeException { beforeSerialize(); return new Gson().toJson(this); } @Override public void write(DataOutput out) throws IOException { try { out.write(serialize().getBytes()); } catch (TraceSpanTreeSerializeException e) { logger.error("Failed to serialize Chain Id[" + cid + "]", e); } } @Override public void readFields(DataInput in) throws IOException { String value = in.readLine(); try { JsonObject jsonObject = (JsonObject) new JsonParser().parse(value); userId = jsonObject.get("userId").getAsString(); cid = jsonObject.get("cid").getAsString(); treeRoot = new Gson().fromJson(jsonObject.get("treeRoot"), TraceSpanNode.class); spanContainer = new Gson().fromJson(jsonObject.get("spanContainer"), new TypeToken<List<TraceSpanNode>>() { }.getType()); } catch (Exception e) { logger.error("Failed to parse the value[" + value + "] to TraceSpanTree Object", e); } } public TraceSpanNode getTreeRoot() { return treeRoot; } }