1.提交大量注释

2.修改CallChainTree.nodes设置不正确的问题。
This commit is contained in:
wusheng 2016-03-08 17:16:33 +08:00
parent 42b788f10f
commit 624a46df03
5 changed files with 79 additions and 54 deletions

View File

@ -1,19 +1,22 @@
package com.ai.cloud.skywalking.analysis.chainbuild.entity;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo;
import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode;
import com.ai.cloud.skywalking.analysis.chainbuild.util.TokenGenerator;
import java.io.IOException;
import java.util.*;
public class CallChainTree {
private String callEntrance;
private String treeToken;
//合并之后的节点
// key : trace level Id
/**
* 命名规则levelId + @ + viewPoint
* 存放各级的各个viewpoint节点的统计数值
*/
private Map<String, CallChainTreeNode> nodes;
public CallChainTree(String callEntrance) {
@ -29,10 +32,11 @@ public class CallChainTree {
public void summary(ChainInfo chainInfo) throws IOException {
for (ChainNode node : chainInfo.getNodes()) {
CallChainTreeNode callChainTreeNode = nodes.get(node.getTraceLevelId());
CallChainTreeNode newCallChainTreeNode = new CallChainTreeNode(node);
CallChainTreeNode callChainTreeNode = nodes.get(newCallChainTreeNode.getTreeNodeId());
if (callChainTreeNode == null) {
callChainTreeNode = new CallChainTreeNode(node);
nodes.put(node.getTraceLevelId() + "@" + node.getViewPoint(), callChainTreeNode);
callChainTreeNode = newCallChainTreeNode;
nodes.put(newCallChainTreeNode.getTreeNodeId(), callChainTreeNode);
}
callChainTreeNode.summary(treeToken, node);
}

View File

@ -1,55 +1,58 @@
package com.ai.cloud.skywalking.analysis.chainbuild.entity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.hbase.client.Put;
import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode;
import com.ai.cloud.skywalking.analysis.chainbuild.util.HBaseUtil;
import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.annotations.Expose;
import org.apache.hadoop.hbase.client.Put;
import java.io.IOException;
import java.util.*;
/**
*
* 调用树的每个traceLevelId + "@" + viewPointId构成一个树节点<br/>
* 虚拟化节点概念节点存储落地时按照节点对应的时间戳<br/>
*
* @author wusheng
*
*/
public class CallChainTreeNode {
@Expose
private String traceLevelId;
@Expose
private String viewPointId;
// key: treeId + 小时
/**
* key: treeId + 小时
* value: 当前树的当前小时范围内的所有分钟和节点的统计数据
*/
private Map<String, ChainNodeSpecificMinSummary> chainNodeContainer;
public CallChainTreeNode(ChainNode node) {
this.traceLevelId = node.getTraceLevelId();
chainNodeContainer = new HashMap<String, ChainNodeSpecificMinSummary>();
this.viewPointId = node.getViewPoint();
}
public CallChainTreeNode(String originData) {
JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData);
traceLevelId = jsonObject.get("traceLevelId").getAsString();
viewPointId = jsonObject.get("viewPointId").getAsString();
// 每次都只load对应的节点统计结果不全部load出来
chainNodeContainer = new HashMap<String, ChainNodeSpecificMinSummary>();
}
public void mergeIfNess(ChainNode node) {
if (!chainNodeContainer.containsKey(node.getNodeToken())) {
chainNodeContainer.put(node.getNodeToken(), new ChainNodeSpecificMinSummary());
}
}
public void summary(String treeId, ChainNode node) throws IOException {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(node.getStartDate()));
// summary min
/**
* 按分钟维度进行汇总<br/>
* chainNodeContainer以treeId和时间精确到分钟为keyvalue为当前时间范围内的所有分钟的汇总数据
*/
String keyOfMinSummaryTable = generateKeyOfMinSummaryTable(treeId, calendar);
ChainNodeSpecificMinSummary minSummary = chainNodeContainer.get(keyOfMinSummaryTable);
if (minSummary == null) {
minSummary = HBaseUtil.loadSpecificMinSummary(keyOfMinSummaryTable, getTreeNodeDesc());
minSummary = HBaseUtil.loadSpecificMinSummary(keyOfMinSummaryTable, getTreeNodeId());
chainNodeContainer.put(keyOfMinSummaryTable, minSummary);
}
@ -66,19 +69,28 @@ public class CallChainTreeNode {
return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(this);
}
/**
* 存储入库时 <br/>
* hbase的key treeId + 小时 <br/>
* 列族中列为节点id规则为traceLevelId + "@" + viewPointId <br/>
* 列的值为当前节点按小时内各分钟的汇总 <br/>
*
* @throws IOException
* @throws InterruptedException
*/
public void saveSummaryResultToHBase() throws IOException, InterruptedException {
List<Put> puts = new ArrayList<Put>();
for (Map.Entry<String, ChainNodeSpecificMinSummary> entry : chainNodeContainer.entrySet()) {
Put put = new Put(entry.getKey().getBytes());
put.addColumn(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.COLUMN_FAMILY_NAME.getBytes()
, getTreeNodeDesc().getBytes(), entry.getValue().toString().getBytes());
, getTreeNodeId().getBytes(), entry.getValue().toString().getBytes());
puts.add(put);
}
HBaseUtil.batchSaveMinSummaryResult(puts);
}
public String getTreeNodeDesc() {
public String getTreeNodeId() {
return traceLevelId + "@" + viewPointId;
}
}

View File

@ -1,17 +1,19 @@
package com.ai.cloud.skywalking.analysis.chainbuild.entity;
import java.util.HashMap;
import java.util.Map;
import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode;
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.hbase.client.Put;
import java.util.HashMap;
import java.util.Map;
public class ChainNodeSpecificMinSummary {
// key : 分钟
/**
* key : 分钟
* value: 各节点统计数据
*/
private Map<String, ChainNodeSpecificTimeWindowSummaryValue> summaryValueMap;
public ChainNodeSpecificMinSummary(String originData) {

View File

@ -3,7 +3,6 @@ package com.ai.cloud.skywalking.analysis.chainbuild.entity;
import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode;
public class ChainNodeSpecificTimeWindowSummaryValue {
private long totalCall;
private long totalCostTime;
private long correctNumber;

View File

@ -1,23 +1,31 @@
package com.ai.cloud.skywalking.analysis.chainbuild.util;
import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainTree;
import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainTreeNode;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ai.cloud.skywalking.analysis.chainbuild.entity.ChainNodeSpecificMinSummary;
import com.ai.cloud.skywalking.analysis.config.Config;
import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class HBaseUtil {
private static Logger logger = LoggerFactory.getLogger(HBaseUtil.class.getName());