Commit 6f08371c authored by ascrutae's avatar ascrutae
Browse files

1. 添加TraceSpanTree序列化方法

2. 将Mapper的Keyout对象修改成TraceSpanTree
parent 06445fc5
Loading
Loading
Loading
Loading
+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;
@@ -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);

@@ -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);
+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;

@@ -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) {
+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;
@@ -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;
    }
}