diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/AnalysisServerDriver.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/AnalysisServerDriver.java index c21773ead..cbbb3b580 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/AnalysisServerDriver.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/AnalysisServerDriver.java @@ -5,6 +5,9 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import com.ai.cloud.skywalking.analysis.chainbuild.ChainBuildMapper; +import com.ai.cloud.skywalking.analysis.chainbuild.ChainBuildReducer; +import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; import org.apache.hadoop.conf.Configuration; @@ -20,9 +23,6 @@ import org.apache.hadoop.util.ToolRunner; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.ai.cloud.skywalking.analysis.categorize2chain.Categorize2ChainMapper; -import com.ai.cloud.skywalking.analysis.categorize2chain.Categorize2ChainReducer; -import com.ai.cloud.skywalking.analysis.categorize2chain.po.ChainInfo; import com.ai.cloud.skywalking.analysis.config.Config; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; @@ -52,10 +52,10 @@ public class AnalysisServerDriver extends Configured implements Tool { job.setJarByClass(AnalysisServerDriver.class); Scan scan = buildHBaseScan(args); - TableMapReduceUtil.initTableMapperJob(HBaseTableMetaData.TABLE_CALL_CHAIN.TABLE_NAME, scan, Categorize2ChainMapper.class, + TableMapReduceUtil.initTableMapperJob(HBaseTableMetaData.TABLE_CALL_CHAIN.TABLE_NAME, scan, ChainBuildMapper.class, Text.class, ChainInfo.class, job); - job.setReducerClass(Categorize2ChainReducer.class); + job.setReducerClass(ChainBuildReducer.class); job.setNumReduceTasks(Config.Reducer.REDUCER_NUMBER); job.setOutputFormatClass(NullOutputFormat.class); return job.waitForCompletion(true) ? 0 : 1; diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryMapper.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryMapper.java deleted file mode 100644 index 6324d9a89..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary; - -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; -import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; - -import org.apache.hadoop.hbase.Cell; -import org.apache.hadoop.hbase.client.Result; -import org.apache.hadoop.hbase.io.ImmutableBytesWritable; -import org.apache.hadoop.hbase.mapreduce.TableMapper; -import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.io.Text; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; - -public class Chain2SummaryMapper extends TableMapper { - - private Logger logger = LoggerFactory - .getLogger(Chain2SummaryMapper.class); - - - @Override - protected void setup(Context context) throws IOException, - InterruptedException { - ConfigInitializer.initialize(); - } - - @Override - protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException { - try { - ChainSpecificTimeSummary summary = new ChainSpecificTimeSummary(Bytes.toString(key.get())); - for (Cell cell : value.rawCells()) { - summary.addChainNodeSummaryResult(Bytes.toString(cell.getValueArray(), - cell.getValueOffset(), cell.getValueLength())); - } - context.write(new Text(summary.buildMapperKey()), summary); - } catch (Exception e) { - logger.error("Failed to mapper call chain[" + key.toString() + "]", - e); - } - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryReducer.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryReducer.java deleted file mode 100644 index fc51ad6f2..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Chain2SummaryReducer.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary; - -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; -import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; - -import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.io.IntWritable; -import org.apache.hadoop.io.Text; -import org.apache.hadoop.mapreduce.Reducer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.Iterator; - -public class Chain2SummaryReducer extends Reducer { - private Logger logger = LoggerFactory - .getLogger(Chain2SummaryReducer.class); - - @Override - protected void setup(Context context) throws IOException, InterruptedException { - ConfigInitializer.initialize(); - } - - @Override - protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { - doReduceAction(Bytes.toString(key.getBytes()), values.iterator()); - } - - public void doReduceAction(String key, Iterator summaryIterator) { - try { - ChainRelationship4Search chainRelationship = ChainRelationship4Search.load(Bytes.toString(key.getBytes())); - Summary summary = new Summary(); - while (summaryIterator.hasNext()) { - try { - ChainSpecificTimeSummary timeSummary = summaryIterator.next(); - summary.summary(timeSummary, chainRelationship); - } catch (Exception e) { - logger.error("Failed to reduce", e); - } - } - - summary.saveToHBase(); - } catch (Exception e) { - e.printStackTrace(); - logger.error("Failed to reduce key=" + Bytes.toString(key.getBytes()), e); - } - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/ChainRelationship4Search.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/ChainRelationship4Search.java deleted file mode 100644 index 06736e117..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/ChainRelationship4Search.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary; - -import com.ai.cloud.skywalking.analysis.categorize2chain.util.HBaseUtil; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class ChainRelationship4Search { - - // key: 正常链路ID value: 正常链路ID - // key: 异常链路ID value: 正常链路ID - // key: 未分类链路ID value: 未分类链路ID - private Map chainRelationshipMap = new HashMap(); - - public static ChainRelationship4Search load(String rowkey) throws IOException { - ChainRelationship4Search chainRelationship4Search = HBaseUtil.queryChainRelationship(rowkey); - return chainRelationship4Search; - } - - public void addRelationship(String cid) { - chainRelationshipMap.put(cid, cid); - } - - public void addRelationship(String normalCID, String abnormalCID) { - chainRelationshipMap.put(normalCID, abnormalCID); - } - - public String searchRelationship(String cid) { - return chainRelationshipMap.get(cid); - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Summary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Summary.java deleted file mode 100644 index 227743cb4..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/Summary.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary; - -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import com.ai.cloud.skywalking.analysis.chain2summary.entity.ChainSummaryWithRelationship; -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; - -public class Summary { - private Map summaryWithRelationshipMap; - - public Summary(){ - summaryWithRelationshipMap = new ConcurrentHashMap(); - } - - public void summary(ChainSpecificTimeSummary timeSummary, ChainRelationship4Search chainRelationship) throws IOException { - String cid = chainRelationship.searchRelationship(timeSummary.getcId()); - if (cid == null || cid.length() == 0) { - cid = timeSummary.getcId(); - } - - if (!summaryWithRelationshipMap.containsKey(cid)) { - summaryWithRelationshipMap.put(cid, new ChainSummaryWithRelationship(cid)); - } - - ChainSummaryWithRelationship chainSummaryWithRelationship = summaryWithRelationshipMap.get(cid); - chainSummaryWithRelationship.summary(timeSummary); - } - - public void saveToHBase() throws IOException, InterruptedException { - for (Map.Entry entry : summaryWithRelationshipMap.entrySet()) { - entry.getValue().saveToHBase(); - } - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificDaySummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificDaySummary.java deleted file mode 100644 index dafbbf633..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificDaySummary.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummaryValue; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; - -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -public class ChainNodeSpecificDaySummary { - private String traceLevelId; - // key: 天 - private Map summaryValueMap; - private String key; - - public ChainNodeSpecificDaySummary() { - summaryValueMap = new HashMap(); - } - - public ChainNodeSpecificDaySummary(String originData) { - JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData); - traceLevelId = jsonObject.get("traceLevelId").getAsString(); - summaryValueMap = new Gson().fromJson(jsonObject.get("summaryValueMap").toString(), - new TypeToken>() { - }.getType()); - } - - public String getTraceLevelId() { - return traceLevelId; - } - - public void summary(long summaryTimestamp, ChainNodeSpecificTimeWindowSummary value) { - key = generateSummaryValueMapKey(summaryTimestamp); - for (Map.Entry entry : value.getSummerValueMap().entrySet()) { - if (summaryValueMap.get(key) == null) { - summaryValueMap.put(key, new ChainNodeSpecificTimeWindowSummaryValue()); - } - summaryValueMap.get(key).accumulate(entry.getValue()); - } - } - - private String generateSummaryValueMapKey(long timeStamp) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date(timeStamp)); - return String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)); - } - - @Override - public String toString() { - return new Gson().toJson(this); - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificHourSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificHourSummary.java deleted file mode 100644 index 50f3406c2..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificHourSummary.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummaryValue; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; - -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -public class ChainNodeSpecificHourSummary { - private String traceLevelId; - // key : 小时 - private Map summerValueMap; - - public ChainNodeSpecificHourSummary() { - summerValueMap = new HashMap(); - } - - public ChainNodeSpecificHourSummary(String originData) { - JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData); - traceLevelId = jsonObject.get("traceLevelId").getAsString(); - summerValueMap = new Gson().fromJson(jsonObject.get("summerValueMap").toString(), - new TypeToken>() { - }.getType()); - } - - public String getTraceLevelId() { - return traceLevelId; - } - - public void summary(long summaryTimestamp, ChainNodeSpecificTimeWindowSummary value) { - String key = generateSummaryValueMapKey(summaryTimestamp); - for (Map.Entry entry : value.getSummerValueMap().entrySet()) { - if (summerValueMap.get(key) == null) { - summerValueMap.put(key, new ChainNodeSpecificTimeWindowSummaryValue()); - } - summerValueMap.get(key).accumulate(entry.getValue()); - } - } - - private String generateSummaryValueMapKey(long timeStamp) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date(timeStamp)); - return String.valueOf(calendar.get(Calendar.HOUR)); - } - - @Override - public String toString() { - return new Gson().toJson(this); - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificMinSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificMinSummary.java deleted file mode 100644 index b56c40cee..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificMinSummary.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummaryValue; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; - -import java.util.HashMap; -import java.util.Map; - -public class ChainNodeSpecificMinSummary { - - private String traceLevelId; - // key: 分钟 value: 统计结果 - private Map summerValueMap; - - - public ChainNodeSpecificMinSummary(){ - summerValueMap = new HashMap(); - } - - public ChainNodeSpecificMinSummary(String originData) { - JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData); - traceLevelId = jsonObject.get("traceLevelId").getAsString(); - summerValueMap = new Gson().fromJson(jsonObject.get("summerValueMap").toString(), - new TypeToken>() { - }.getType()); - } - - public String getTraceLevelId() { - return traceLevelId; - } - - public void summary(ChainNodeSpecificTimeWindowSummary value) { - for (Map.Entry entry :value.getSummerValueMap().entrySet()){ - if (summerValueMap.get(entry.getKey()) == null){ - summerValueMap.put(entry.getKey(), new ChainNodeSpecificTimeWindowSummaryValue()); - } - summerValueMap.get(entry.getKey()).accumulate(entry.getValue()); - } - } - - @Override - public String toString() { - return new Gson().toJson(this); - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificMonthSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificMonthSummary.java deleted file mode 100644 index d39bc6d42..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainNodeSpecificMonthSummary.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummaryValue; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; - -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -public class ChainNodeSpecificMonthSummary { - - private Map summaryValueMap; - private String traceLevelId; - private String key; - - public ChainNodeSpecificMonthSummary() { - summaryValueMap = new HashMap(); - } - - public ChainNodeSpecificMonthSummary(String originData) { - JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData); - traceLevelId = jsonObject.get("traceLevelId").getAsString(); - summaryValueMap = new Gson().fromJson(jsonObject.get("summaryValueMap").toString(), - new TypeToken>() { - }.getType()); - } - - public void summary(long summaryTimestamp, ChainNodeSpecificTimeWindowSummary value) { - key = generateSummaryValueMapKey(summaryTimestamp); - for (Map.Entry entry : value.getSummerValueMap().entrySet()) { - if (summaryValueMap.get(key) == null) { - summaryValueMap.put(key, new ChainNodeSpecificTimeWindowSummaryValue()); - } - summaryValueMap.get(key).accumulate(entry.getValue()); - } - } - - public String getTraceLevelId() { - return traceLevelId; - } - - private String generateSummaryValueMapKey(long timeStamp) { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date(timeStamp)); - return String.valueOf(calendar.get(Calendar.MONTH)); - } - - @Override - public String toString() { - return new Gson().toJson(this); - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificDaySummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificDaySummary.java deleted file mode 100644 index 852c590b0..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificDaySummary.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; -import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; - -import org.apache.hadoop.hbase.client.Put; - -import java.util.HashMap; -import java.util.Map; - -public class ChainSpecificDaySummary { - private Map chainNodeSpecificHourSummaryMap; - - public ChainSpecificDaySummary() { - chainNodeSpecificHourSummaryMap = new HashMap(); - } - - public void addNodeSummaryResult(ChainNodeSpecificDaySummary chainNodeSpecificHourSummary) { - chainNodeSpecificHourSummaryMap.put(chainNodeSpecificHourSummary.getTraceLevelId(), chainNodeSpecificHourSummary); - } - - public void summary(ChainSpecificTimeSummary timeSummary) { - Map chainNodeSpecificTimeWindowSummaryMap = timeSummary.getSummaryMap(); - - for (Map.Entry entry : chainNodeSpecificTimeWindowSummaryMap.entrySet()) { - if (chainNodeSpecificHourSummaryMap.get(entry.getKey()) == null){ - chainNodeSpecificHourSummaryMap.put(entry.getKey(), new ChainNodeSpecificDaySummary()); - } - chainNodeSpecificHourSummaryMap.get(entry.getKey()).summary(timeSummary.getSummaryTimestamp(), entry.getValue()); - } - } - - public void save(Put put) { - for (Map.Entry entry : chainNodeSpecificHourSummaryMap.entrySet()) { - put.addColumn(HBaseTableMetaData.TABLE_CHAIN_ONE_DAY_SUMMARY_INCLUDE_RELATIONSHIP. - COLUMN_FAMILY_NAME.getBytes(), entry.getKey().getBytes(), - entry.getValue().toString().getBytes()); - } - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificHourSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificHourSummary.java deleted file mode 100644 index b8b1da14f..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificHourSummary.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; -import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; - -import org.apache.hadoop.hbase.client.Put; - -import java.util.HashMap; -import java.util.Map; - -public class ChainSpecificHourSummary { - // key : TraceLevelId - private Map chainNodeSpecificHourSummaryMap; - - public ChainSpecificHourSummary() { - chainNodeSpecificHourSummaryMap = new HashMap(); - } - - public void addNodeSummaryResult(ChainNodeSpecificHourSummary chainNodeSpecificHourSummary) { - chainNodeSpecificHourSummaryMap.put(chainNodeSpecificHourSummary.getTraceLevelId(), chainNodeSpecificHourSummary); - } - - public void summary(ChainSpecificTimeSummary timeSummary) { - Map chainNodeSpecificTimeWindowSummaryMap = timeSummary.getSummaryMap(); - - for (Map.Entry entry : chainNodeSpecificTimeWindowSummaryMap.entrySet()){ - if (chainNodeSpecificHourSummaryMap.get(entry.getKey()) == null){ - chainNodeSpecificHourSummaryMap.put(entry.getKey(), new ChainNodeSpecificHourSummary()); - } - chainNodeSpecificHourSummaryMap.get(entry.getKey()).summary(timeSummary.getSummaryTimestamp(),entry.getValue()); - } - } - - public void save(Put put) { - for (Map.Entry entry : chainNodeSpecificHourSummaryMap.entrySet()) { - put.addColumn(HBaseTableMetaData.TABLE_CHAIN_ONE_HOUR_SUMMARY_INCLUDE_RELATIONSHIP. - COLUMN_FAMILY_NAME.getBytes(), entry.getKey().getBytes(), - entry.getValue().toString().getBytes()); - } - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificMinSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificMinSummary.java deleted file mode 100644 index 3d32566f4..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificMinSummary.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; -import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; - -import org.apache.hadoop.hbase.client.Put; - -import java.util.HashMap; -import java.util.Map; - -public class ChainSpecificMinSummary { - - // Key: TraceLevelId - private Map chainNodeSpecificMinSummaryMap; - - public ChainSpecificMinSummary() { - this.chainNodeSpecificMinSummaryMap = new HashMap(); - } - - public void addNodeSummaryResult(ChainNodeSpecificMinSummary chainNodeSpecificMinSummary) { - chainNodeSpecificMinSummaryMap.put(chainNodeSpecificMinSummary.getTraceLevelId(), chainNodeSpecificMinSummary); - } - - public void summary(ChainSpecificTimeSummary timeSummary) { - Map chainNodeSpecificTimeWindowSummaryMap = timeSummary.getSummaryMap(); - - for (Map.Entry entry : chainNodeSpecificTimeWindowSummaryMap.entrySet()) { - if (chainNodeSpecificMinSummaryMap.get(entry.getKey()) == null){ - chainNodeSpecificMinSummaryMap.put(entry.getKey(), new ChainNodeSpecificMinSummary()); - } - chainNodeSpecificMinSummaryMap.get(entry.getKey()).summary(entry.getValue()); - } - } - - public void save(Put put) { - for (Map.Entry entry : chainNodeSpecificMinSummaryMap.entrySet()) { - put.addColumn(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_INCLUDE_RELATIONSHIP. - COLUMN_FAMILY_NAME.getBytes(), entry.getKey().getBytes(), - entry.getValue().toString().getBytes()); - } - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificMonthSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificMonthSummary.java deleted file mode 100644 index 478a82396..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSpecificMonthSummary.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; -import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; - -import org.apache.hadoop.hbase.client.Put; - -import java.util.Map; - -public class ChainSpecificMonthSummary { - - // Key: TraceLevelId - private Map chainNodeSpecificMinSummaryMap; - - public void addNodeSummaryResult(ChainNodeSpecificMonthSummary chainNodeSpecificDaySummary) { - chainNodeSpecificMinSummaryMap.put(chainNodeSpecificDaySummary.getTraceLevelId(), chainNodeSpecificDaySummary); - } - - public void summary(ChainSpecificTimeSummary timeSummary) { - Map chainNodeSpecificTimeWindowSummaryMap = timeSummary.getSummaryMap(); - - for (Map.Entry entry : chainNodeSpecificTimeWindowSummaryMap.entrySet()) { - if (chainNodeSpecificMinSummaryMap.get(entry.getKey()) == null){ - chainNodeSpecificMinSummaryMap.put(entry.getKey(), new ChainNodeSpecificMonthSummary()); - } - chainNodeSpecificMinSummaryMap.get(entry.getKey()).summary(timeSummary.getSummaryTimestamp(), entry.getValue()); - } - } - - public void save(Put put) { - for (Map.Entry entry : chainNodeSpecificMinSummaryMap.entrySet()) { - put.addColumn(HBaseTableMetaData.TABLE_CHAIN_ONE_MONTH_SUMMARY_INCLUDE_RELATIONSHIP. - COLUMN_FAMILY_NAME.getBytes(), entry.getKey().getBytes(), - entry.getValue().toString().getBytes()); - } - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSummaryWithRelationship.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSummaryWithRelationship.java deleted file mode 100644 index ffaafb298..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/entity/ChainSummaryWithRelationship.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.entity; - -import com.ai.cloud.skywalking.analysis.categorize2chain.util.HBaseUtil; -import com.ai.cloud.skywalking.analysis.chain2summary.po.ChainSpecificTimeSummary; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class ChainSummaryWithRelationship { - - private String cid; - // key : cid + userId + 小时 - private Map minSummary; - // key : cid + userId + 天 - private Map hourSummary; - // key : cid + userId + 月 - private Map daySummary; - // key : cid + userId + 年 - private Map monthSummary; - - public ChainSummaryWithRelationship(String cid) { - this.cid = cid; - minSummary = new HashMap(); - hourSummary = new HashMap(); - daySummary = new HashMap(); - monthSummary = new HashMap(); - } - - public void saveToHBase() throws IOException, InterruptedException { - HBaseUtil.batchSaveSpecificMinSummary(minSummary); - HBaseUtil.batchSaveSpecificHourSummary(hourSummary); - HBaseUtil.batchSaveSpecificDaySummary(daySummary); - HBaseUtil.batchSaveSpecificMonthSummary(monthSummary); - } - - public void summary(ChainSpecificTimeSummary timeSummary) throws IOException { - loadSummaryIfNecessary(cid,timeSummary); - // - minSummary.get(buildMinSummaryRowKey(cid, timeSummary)).summary(timeSummary); - hourSummary.get(buildHourSummaryRowKey(cid, timeSummary)).summary(timeSummary); - daySummary.get(buildDaySummaryRowKey(cid, timeSummary)).summary(timeSummary); - monthSummary.get(buildMonthSummaryRowKey(cid, timeSummary)).summary(timeSummary); - } - - - private void loadSummaryIfNecessary(String cid, ChainSpecificTimeSummary timeSummary) throws IOException { - loadMinSummaryIfNecessary(cid, timeSummary); - loadHourSummaryIfNecessary(cid, timeSummary); - loadDaySummaryIfNecessary(cid, timeSummary); - loadMonthSummaryIfNecessary(cid, timeSummary); - } - - private void loadMonthSummaryIfNecessary(String cid, ChainSpecificTimeSummary timeSummary) throws IOException { - String month_RowKey = buildMonthSummaryRowKey(cid, timeSummary); - if (!monthSummary.containsKey(month_RowKey)) { - monthSummary.put(month_RowKey, HBaseUtil.loadSpecificMonthSummary(month_RowKey)); - } - } - - private void loadDaySummaryIfNecessary(String cid, ChainSpecificTimeSummary timeSummary) throws IOException { - String day_RowKey = buildDaySummaryRowKey(cid, timeSummary); - if (!daySummary.containsKey(day_RowKey)) { - daySummary.put(day_RowKey, HBaseUtil.loadSpecificDaySummary(day_RowKey)); - } - } - - private void loadHourSummaryIfNecessary(String cid, ChainSpecificTimeSummary timeSummary) throws IOException { - String hour_RowKey = buildHourSummaryRowKey(cid, timeSummary); - if (!hourSummary.containsKey(hour_RowKey)) { - hourSummary.put(hour_RowKey, HBaseUtil.loadSpecificHourSummary(hour_RowKey)); - } - } - - private void loadMinSummaryIfNecessary(String cid, ChainSpecificTimeSummary timeSummary) throws IOException { - String min_RowKey = buildMinSummaryRowKey(cid, timeSummary); - if (!minSummary.containsKey(min_RowKey)) { - minSummary.put(min_RowKey, HBaseUtil.loadSpecificMinSummary(min_RowKey)); - } - } - - // 月统计是以年作为RowKey的 - private static String buildMonthSummaryRowKey(String cid, ChainSpecificTimeSummary timeSummary) { - return cid + "-" + timeSummary.getUserId() + "-" + timeSummary.getYearKey(); - } - - // 天统计是以月作为RowKey的 - private static String buildDaySummaryRowKey(String cid, ChainSpecificTimeSummary timeSummary) { - return cid + "-" + timeSummary.getUserId() + "-" + timeSummary.getMonthKey(); - } - - // 小时统计是以天作为RowKey的 - private static String buildHourSummaryRowKey(String cid, ChainSpecificTimeSummary timeSummary) { - return cid + "-" + timeSummary.getUserId() + "-" + timeSummary.getDayKey(); - } - - // 分钟统计是以小时作为RowKey的 - private static String buildMinSummaryRowKey(String cid, ChainSpecificTimeSummary timeSummary) { - return cid + "-" + timeSummary.getUserId() + "-" + timeSummary.getHourKey(); - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/po/ChainSpecificTimeSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/po/ChainSpecificTimeSummary.java deleted file mode 100644 index ef9922d23..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chain2summary/po/ChainSpecificTimeSummary.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chain2summary.po; - -import com.ai.cloud.skywalking.analysis.categorize2chain.entity.ChainNodeSpecificTimeWindowSummary; -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 java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -public class ChainSpecificTimeSummary implements Writable { - private String cId; - private String userId; - private String entranceNodeToken; - //key : TraceLevelId - private Map summaryMap; - private long summaryTimestamp; - - public ChainSpecificTimeSummary() { - } - - public ChainSpecificTimeSummary(String rowKey) throws ParseException { - String[] splitValue = rowKey.split("-"); - this.cId = splitValue[0]; - this.userId = splitValue[1]; - this.summaryTimestamp = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse(splitValue[2]).getTime(); - summaryMap = new HashMap(); - } - - @Override - public void write(DataOutput out) throws IOException { - out.write(new Gson().toJson(this).getBytes()); - } - - @Override - public void readFields(DataInput in) throws IOException { - JsonObject jsonObject = (JsonObject) new JsonParser().parse(in.readLine()); - cId = jsonObject.get("cId").getAsString(); - userId = jsonObject.get("userId").getAsString(); - if (jsonObject.get("entranceNodeToken") == null) { - throw new IOException("No entryNode Token CId[" + cId + "]"); - } - entranceNodeToken = jsonObject.get("entranceNodeToken").getAsString(); - summaryMap = new Gson().fromJson(jsonObject.get("summaryMap").toString(), - new TypeToken>() { - }.getType()); - } - - public void addChainNodeSummaryResult(String summaryResult) { - ChainNodeSpecificTimeWindowSummary chainNodeSpecificTimeWindowSummary = new Gson(). - fromJson(summaryResult, ChainNodeSpecificTimeWindowSummary.class); - - if ("0".equals(chainNodeSpecificTimeWindowSummary.getTraceLevelId())) { - this.entranceNodeToken = chainNodeSpecificTimeWindowSummary.getNodeToken(); - } - - summaryMap.put(chainNodeSpecificTimeWindowSummary.getTraceLevelId(), chainNodeSpecificTimeWindowSummary); - } - - public String buildMapperKey() { - return userId + ":" + entranceNodeToken; - } - - - public String getcId() { - return cId; - } - - public String getHourKey() { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date(summaryTimestamp)); - return calendar.get(Calendar.YEAR) + "/" + (calendar.get(Calendar.MONTH) + 1) + "/" +calendar.get(Calendar.DAY_OF_MONTH) - + " " + calendar.get(Calendar.HOUR) + ":00:00"; - } - - public String getDayKey() { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date(summaryTimestamp)); - return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + (calendar.get(Calendar.DAY_OF_MONTH) + 1); - } - - public String getMonthKey() { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date(summaryTimestamp)); - return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1); - } - - public String getYearKey() { - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date(summaryTimestamp)); - return String.valueOf(calendar.get(Calendar.YEAR)); - } - - public String getUserId() { - return userId; - } - - public Map getSummaryMap() { - return summaryMap; - } - - public long getSummaryTimestamp() { - return summaryTimestamp; - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java index 9a2c09fea..b950fb270 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildMapper.java @@ -82,7 +82,7 @@ public class ChainBuildMapper extends TableMapper { filter.doFilter(entry.getValue(), chainNode, costMap); chainInfo.addNodes(chainNode); } - //chainInfo.generateChainToken(); + chainInfo.generateChainToken(); //HBaseUtil.saveCidTidMapping(key, chainInfo); return chainInfo; } diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java index f94f1b67e..4f683f177 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java @@ -1,5 +1,6 @@ package com.ai.cloud.skywalking.analysis.chainbuild; +import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainTree; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; import com.ai.cloud.skywalking.analysis.config.ConfigInitializer; import org.apache.hadoop.hbase.util.Bytes; diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/CallChainTree.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainTree.java similarity index 83% rename from skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/CallChainTree.java rename to skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainTree.java index b37a2de53..4c8d7bea8 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/CallChainTree.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainTree.java @@ -1,6 +1,5 @@ -package com.ai.cloud.skywalking.analysis.chainbuild; +package com.ai.cloud.skywalking.analysis.chainbuild.entity; -import com.ai.cloud.skywalking.analysis.chainbuild.po.CallChainTreeNode; 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.HBaseUtil; @@ -17,6 +16,8 @@ public class CallChainTree { private String callEntrance; + private String treeId; + //存放已经合并过的调用链ID private List hasBeenMergedChainIds; @@ -35,7 +36,7 @@ public class CallChainTree { } public static CallChainTree load(String callEntrance) throws IOException { - CallChainTree chain = HBaseUtil.loadMergedCallChain(callEntrance); + CallChainTree chain = HBaseUtil.loadCallChainTree(callEntrance); chain.hasBeenMergedChainIds.addAll(HBaseUtil.loadHasBeenMergeChainIds(callEntrance)); if (chain == null) { chain = new CallChainTree(callEntrance); @@ -57,14 +58,14 @@ public class CallChainTree { } } - hasBeenMergedChainIds.add(chainInfo.getChainToken()); - combineChains.put(chainInfo.getChainToken(), chainInfo); + hasBeenMergedChainIds.add(chainInfo.getCID()); + combineChains.put(chainInfo.getCID(), chainInfo); } - public void summary(ChainInfo chainInfo) { + public void summary(ChainInfo chainInfo) throws IOException { for (ChainNode node : chainInfo.getNodes()) { CallChainTreeNode callChainTreeNode = nodes.get(node.getTraceLevelId()); - callChainTreeNode.summary(node); + callChainTreeNode.summary(treeId, node); } } @@ -77,6 +78,11 @@ public class CallChainTree { } HBaseUtil.saveCallChainTree(this); + + //save summary value + for (CallChainTreeNode entry : nodes.values()) { + entry.saveSummaryResultToHBase(); + } } public String getCallEntrance() { diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainTreeNode.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainTreeNode.java new file mode 100644 index 000000000..272b5d6be --- /dev/null +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainTreeNode.java @@ -0,0 +1,81 @@ +package com.ai.cloud.skywalking.analysis.chainbuild.entity; + +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.*; + +public class CallChainTreeNode { + @Expose + private String traceLevelId; + @Expose + private String viewPointId; + + // key: treeId + 小时 + private Map chainNodeContainer; + + + public CallChainTreeNode(ChainNode node) { + this.traceLevelId = node.getTraceLevelId(); + chainNodeContainer.put(node.getNodeToken(), new ChainNodeSpecificMinSummary()); + } + + public CallChainTreeNode(String originData) { + JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData); + traceLevelId = jsonObject.get("traceLevelId").getAsString(); + viewPointId = jsonObject.get("viewPointId").getAsString(); + } + + 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 + String keyOfMinSummaryTable = generateKeyOfMinSummaryTable(treeId, calendar); + ChainNodeSpecificMinSummary minSummary = chainNodeContainer.get(keyOfMinSummaryTable); + if (minSummary == null) { + minSummary = HBaseUtil.loadSpecificMinSummary(keyOfMinSummaryTable, node.getNodeToken()); + chainNodeContainer.put(keyOfMinSummaryTable, minSummary); + } + + minSummary.summary(String.valueOf(calendar.get(Calendar.MINUTE) + 1), node); + } + + private String generateKeyOfMinSummaryTable(String treeId, Calendar calendar) { + return treeId + "/" + calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) + "-" + + calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.HOUR) + ":00:00"; + } + + public String getTraceLevelId() { + return traceLevelId; + } + + @Override + public String toString() { + return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(this); + } + + public void saveSummaryResultToHBase() { + List puts = new ArrayList(); + for (Map.Entry entry : chainNodeContainer.entrySet()) { + Put put = new Put(entry.getKey().getBytes()); + put.addColumn(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.COLUMN_FAMILY_NAME.getBytes() + , traceLevelId.getBytes(), entry.getValue().toString().getBytes()); + puts.add(put); + } + + HBaseUtil.batchSaveMinSummaryResult(puts); + } +} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeForSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeForSummary.java deleted file mode 100644 index 157582a6f..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeForSummary.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chainbuild.entity; - -import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode; - -public class ChainNodeForSummary { - - private String traceLevelId; - private String viewPointId; - - public ChainNodeForSummary(ChainNode node) { - this.traceLevelId = node.getTraceLevelId(); - this.viewPointId = node.getViewPoint(); - } - - public void summary(ChainNode node) { - - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeSpecificMinSummary.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeSpecificMinSummary.java new file mode 100644 index 000000000..414366ca9 --- /dev/null +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeSpecificMinSummary.java @@ -0,0 +1,42 @@ +package com.ai.cloud.skywalking.analysis.chainbuild.entity; + +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 : 分钟 + private Map summaryValueMap; + + public ChainNodeSpecificMinSummary(String originData) { + JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData); + summaryValueMap = new Gson().fromJson(jsonObject.get("summaryValueMap").toString(), + new TypeToken>() { + }.getType()); + } + + public ChainNodeSpecificMinSummary() { + summaryValueMap = new HashMap(); + } + + public void summary(String minute, ChainNode node) { + ChainNodeSpecificTimeWindowSummaryValue summarValue = summaryValueMap.get(minute); + if (summarValue == null) { + summarValue = new ChainNodeSpecificTimeWindowSummaryValue(); + summaryValueMap.put(minute, summarValue); + } + + summarValue.summary(node); + } + + @Override + public String toString() { + return new Gson().toJson(this); + } +} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeSpecificTimeWindowSummaryValue.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeSpecificTimeWindowSummaryValue.java new file mode 100644 index 000000000..9aabee5c8 --- /dev/null +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/ChainNodeSpecificTimeWindowSummaryValue.java @@ -0,0 +1,30 @@ +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; + private long humanInterruptionNumber; + + public ChainNodeSpecificTimeWindowSummaryValue() { + totalCall = 0; + totalCostTime = 0; + correctNumber = 0; + humanInterruptionNumber = 0; + } + + + public void summary(ChainNode node) { + totalCall++; + if (node.getStatus() == ChainNode.NodeStatus.NORMAL) { + correctNumber++; + } + if (node.getStatus() == ChainNode.NodeStatus.HUMAN_INTERRUPTION) { + humanInterruptionNumber++; + } + totalCostTime += node.getCost(); + } +} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/CallChainTreeNode.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/CallChainTreeNode.java deleted file mode 100644 index dadd34d5d..000000000 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/CallChainTreeNode.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ai.cloud.skywalking.analysis.chainbuild.po; - -import com.ai.cloud.skywalking.analysis.chainbuild.entity.ChainNodeForSummary; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.reflect.TypeToken; - -import java.util.Map; - -public class CallChainTreeNode { - - private String traceLevelId; - - // key: nodeToken - private Map chainNodeContainer; - - - public CallChainTreeNode(ChainNode node) { - this.traceLevelId = node.getTraceLevelId(); - chainNodeContainer.put(node.getNodeToken(), new ChainNodeForSummary(node)); - } - - public CallChainTreeNode(String originData) { - JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData); - traceLevelId = jsonObject.get("traceLevelId").getAsString(); - chainNodeContainer = new Gson().fromJson(jsonObject.get("chainNodeContainer").getAsString(), - new TypeToken>() { - }.getType()); - } - - public void mergeIfNess(ChainNode node) { - if (!chainNodeContainer.containsKey(node.getNodeToken())) { - chainNodeContainer.put(node.getNodeToken(), new ChainNodeForSummary(node)); - } - } - - public void summary(ChainNode node) { - ChainNodeForSummary chainNode = chainNodeContainer.get(node.getNodeToken()); - chainNode.summary(node); - } - - public String getTraceLevelId() { - return traceLevelId; - } - - @Override - public String toString() { - return new Gson().toJson(this); - } -} diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainInfo.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainInfo.java index 621977e08..c2a15ec70 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainInfo.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainInfo.java @@ -15,130 +15,131 @@ import java.util.ArrayList; import java.util.List; public class ChainInfo implements Writable { - private String cid; - private ChainStatus chainStatus = ChainStatus.NORMAL; - private List nodes; - private String userId = null; - private ChainNode firstChainNode; - private long startDate; - private String chainToken; + private String callEntrance; + private String cid; + private ChainStatus chainStatus = ChainStatus.NORMAL; + private List nodes; + private String userId = null; + private ChainNode firstChainNode; + private long startDate; - public ChainInfo(String userId) { - super(); - this.userId = userId; - } + public ChainInfo(String userId) { + super(); + this.userId = userId; + } - public ChainInfo() { - this.nodes = new ArrayList(); - } + public ChainInfo() { + this.nodes = new ArrayList(); + } - @Override - public void write(DataOutput out) throws IOException { - out.write(new Gson().toJson(this).getBytes()); - } + @Override + public void write(DataOutput out) throws IOException { + out.write(new Gson().toJson(this).getBytes()); + } - @Override - public void readFields(DataInput in) throws IOException { - JsonObject jsonObject = (JsonObject) new JsonParser().parse(in - .readLine()); - cid = jsonObject.get("cid").getAsString(); - chainStatus = ChainStatus.convert(jsonObject.get("chainStatus") - .getAsCharacter()); - nodes = new Gson().fromJson(jsonObject.get("nodes"), - new TypeToken>() { - }.getType()); - userId = jsonObject.get("userId").getAsString(); - } + @Override + public void readFields(DataInput in) throws IOException { + JsonObject jsonObject = (JsonObject) new JsonParser().parse(in + .readLine()); + cid = jsonObject.get("cid").getAsString(); + chainStatus = ChainStatus.convert(jsonObject.get("chainStatus") + .getAsCharacter()); + nodes = new Gson().fromJson(jsonObject.get("nodes"), + new TypeToken>() { + }.getType()); + userId = jsonObject.get("userId").getAsString(); + } - public String getCID() { - return cid; - } + public String getCID() { + return cid; + } - public String getEntranceNodeToken() { - if (firstChainNode == null) { - return ""; - } else { - return firstChainNode.getNodeToken(); - } - } + public String getEntranceNodeToken() { + if (firstChainNode == null) { + return ""; + } else { + return firstChainNode.getNodeToken(); + } + } - public ChainStatus getChainStatus() { - return chainStatus; - } + public void generateChainToken() { + StringBuilder chainTokenDesc = new StringBuilder(); + for (ChainNode node : nodes) { + chainTokenDesc.append(node.getParentLevelId() + "." + + node.getLevelId() + "-" + node.getNodeToken() + ";"); + } + this.cid = TokenGenerator.generateCID(chainTokenDesc.toString()); + } - public void setChainStatus(ChainStatus chainStatus) { - this.chainStatus = chainStatus; - } + public ChainStatus getChainStatus() { + return chainStatus; + } - public void addNodes(ChainNode chainNode) { - this.nodes.add(0, chainNode); - if (chainNode.getStatus() == ChainNode.NodeStatus.ABNORMAL - || chainNode.getStatus() == ChainNode.NodeStatus.HUMAN_INTERRUPTION) { - chainStatus = ChainStatus.ABNORMAL; - } - if (userId == null) { - userId = chainNode.getUserId(); - } - if ((chainNode.getParentLevelId() == null || chainNode - .getParentLevelId().length() == 0) - && chainNode.getLevelId() == 0) { - firstChainNode = chainNode; - startDate = chainNode.getStartDate(); - cid = firstChainNode.getViewPoint(); - } - } + public void setChainStatus(ChainStatus chainStatus) { + this.chainStatus = chainStatus; + } - public List getNodes() { - return nodes; - } + public void addNodes(ChainNode chainNode) { + this.nodes.add(0, chainNode); + if (chainNode.getStatus() == ChainNode.NodeStatus.ABNORMAL + || chainNode.getStatus() == ChainNode.NodeStatus.HUMAN_INTERRUPTION) { + chainStatus = ChainStatus.ABNORMAL; + } + if (userId == null) { + userId = chainNode.getUserId(); + } + if ((chainNode.getParentLevelId() == null || chainNode + .getParentLevelId().length() == 0) + && chainNode.getLevelId() == 0) { + firstChainNode = chainNode; + startDate = chainNode.getStartDate(); + cid = firstChainNode.getViewPoint(); + } + } - public String getUserId() { - return userId; - } + public List getNodes() { + return nodes; + } - public void setUserId(String userId) { - this.userId = userId; - } + public String getUserId() { + return userId; + } - public String getChainToken() { - return chainToken; - } + public void saveToHBase(Put put) { - public void saveToHBase(Put put) { + } - } + public enum ChainStatus { + NORMAL('N'), ABNORMAL('A'); + private char value; - public enum ChainStatus { - NORMAL('N'), ABNORMAL('A'); - private char value; + ChainStatus(char value) { + this.value = value; + } - ChainStatus(char value) { - this.value = value; - } + public static ChainStatus convert(char value) { + switch (value) { + case 'N': + return NORMAL; + case 'A': + return ABNORMAL; + default: + throw new IllegalStateException("Failed to convert[" + value + + "]"); + } + } - public static ChainStatus convert(char value) { - switch (value) { - case 'N': - return NORMAL; - case 'A': - return ABNORMAL; - default: - throw new IllegalStateException("Failed to convert[" + value - + "]"); - } - } + @Override + public String toString() { + return value + ""; + } + } - @Override - public String toString() { - return value + ""; - } - } + public void setCID(String cid) { + this.cid = cid; + } - public void setCID(String cid) { - this.cid = cid; - } - - public long getStartDate() { - return startDate; - } + public long getStartDate() { + return startDate; + } } diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainNode.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainNode.java index f07ecbf4a..5cc7971fc 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainNode.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/ChainNode.java @@ -11,6 +11,7 @@ public class ChainNode { @Expose private String businessKey; + @Expose private long cost; private NodeStatus status; @Expose @@ -19,6 +20,7 @@ public class ChainNode { private int levelId; @Expose private String callType; + @Expose private long startDate; @Expose private String userId; diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java index 2aee49d73..c1c65f1a0 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java @@ -1,9 +1,8 @@ package com.ai.cloud.skywalking.analysis.chainbuild.util; -import com.ai.cloud.skywalking.analysis.chain2summary.entity.*; -import com.ai.cloud.skywalking.analysis.chainbuild.CallChainTree; -import com.ai.cloud.skywalking.analysis.chainbuild.po.CallChainTreeNode; -import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; +import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainTree; +import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainTreeNode; +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; @@ -30,32 +29,8 @@ public class HBaseUtil { try { initHBaseClient(); -// createTableIfNeed(HBaseTableMetaData.TABLE_CID_TID_MAPPING.TABLE_NAME, -// HBaseTableMetaData.TABLE_CID_TID_MAPPING.COLUMN_FAMILY_NAME); -// -// createTableIfNeed(HBaseTableMetaData.TABLE_CALL_CHAIN_RELATIONSHIP.TABLE_NAME, -// HBaseTableMetaData.TABLE_CALL_CHAIN_RELATIONSHIP.COLUMN_FAMILY_NAME); -// -// createTableIfNeed(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_EXCLUDE_RELATIONSHIP.TABLE_NAME, -// HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_EXCLUDE_RELATIONSHIP.COLUMN_FAMILY_NAME); -// -// createTableIfNeed(HBaseTableMetaData.TABLE_CHAIN_DETAIL.TABLE_NAME, -// HBaseTableMetaData.TABLE_CHAIN_DETAIL.COLUMN_FAMILY_NAME); -// -// createTableIfNeed(HBaseTableMetaData.TABLE_CHAIN_ONE_HOUR_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME, -// HBaseTableMetaData.TABLE_CHAIN_ONE_HOUR_SUMMARY_INCLUDE_RELATIONSHIP.COLUMN_FAMILY_NAME); -// -// createTableIfNeed(HBaseTableMetaData.TABLE_CHAIN_ONE_DAY_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME, -// HBaseTableMetaData.TABLE_CHAIN_ONE_DAY_SUMMARY_INCLUDE_RELATIONSHIP.COLUMN_FAMILY_NAME); -// -// createTableIfNeed(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME, -// HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_INCLUDE_RELATIONSHIP.COLUMN_FAMILY_NAME); -// -// createTableIfNeed(HBaseTableMetaData.TABLE_CHAIN_ONE_MONTH_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME, -// HBaseTableMetaData.TABLE_CHAIN_ONE_MONTH_SUMMARY_INCLUDE_RELATIONSHIP.COLUMN_FAMILY_NAME); - - createTableIfNeed(HBaseTableMetaData.TABLE_MERGED_CHAIN_DETAIL.TABLE_NAME, - HBaseTableMetaData.TABLE_MERGED_CHAIN_DETAIL.COLUMN_FAMILY_NAME); + createTableIfNeed(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_DETAIL.TABLE_NAME, + HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_DETAIL.COLUMN_FAMILY_NAME); createTableIfNeed(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING.TABLE_NAME, HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING.COLUMN_FAMILY_NAME); @@ -87,196 +62,32 @@ public class HBaseUtil { } } - public static boolean saveCidTidMapping(String traceId, ChainInfo chainInfo) { - Table table = null; - - try { - table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CID_TID_MAPPING.TABLE_NAME)); - } catch (IOException e) { - logger.error("Cannot found table[" + HBaseTableMetaData.TABLE_CID_TID_MAPPING.TABLE_NAME + "]", e); - } - - Put put = new Put(Bytes.toBytes(traceId)); - - put.addColumn(Bytes.toBytes(HBaseTableMetaData.TABLE_CID_TID_MAPPING.COLUMN_FAMILY_NAME), - Bytes.toBytes(HBaseTableMetaData.TABLE_CID_TID_MAPPING.CID_COLUMN_NAME), - Bytes.toBytes(chainInfo.getCID())); - try { - table.put(put); - if (logger.isDebugEnabled()) { - logger.debug("Insert data[RowKey:{}] success.", put.getId()); - } - } catch (IOException e) { - logger.error("Insert data [Rowkey:{}] failed.", put.getId(), e); - return false; - } - - return true; - } - - public static void saveChainRelationship(Put put) throws IOException { - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CALL_CHAIN_RELATIONSHIP.TABLE_NAME)); - - table.put(put); - if (logger.isDebugEnabled()) { - logger.debug("Insert data[RowKey:{}] success.", put.getId()); - } - } - - public static void batchSaveChainSpecificTimeWindowSummary(List puts) throws IOException, InterruptedException { - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_EXCLUDE_RELATIONSHIP.TABLE_NAME)); - Object[] resultArrays = new Object[puts.size()]; - table.batch(puts, resultArrays); - for (Object result : resultArrays) { - if (result == null) { - logger.error("Failed to save chain specificTimeWindows Summary."); - } - } - } - - public static void saveChainDetails(List puts) throws IOException, InterruptedException { - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_DETAIL.TABLE_NAME)); - if (puts != null && puts.size() > 0) { - Object[] resultArrays = new Object[puts.size()]; - table.batch(puts, resultArrays); - for (Object result : resultArrays) { - if (result == null) { - logger.error("Failed to save chain specificTimeWindows Summary."); - } - } - } - } - - public static ChainSpecificMinSummary loadSpecificMinSummary(String key) throws IOException { - ChainSpecificMinSummary result = null; - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME)); + public static ChainNodeSpecificMinSummary loadSpecificMinSummary(String key, String qualifier) throws IOException { + ChainNodeSpecificMinSummary result = null; + Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.TABLE_NAME)); Get g = new Get(Bytes.toBytes(key)); Result r = table.get(g); if (r.rawCells().length == 0) { return null; } - result = new ChainSpecificMinSummary(); - for (Cell cell : r.rawCells()) { - if (cell.getValueArray().length > 0) - result.addNodeSummaryResult(new ChainNodeSpecificMinSummary(Bytes.toString(cell.getValueArray(), - cell.getValueOffset(), cell.getValueLength()))); + + Cell cell = r.getColumnLatestCell(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.COLUMN_FAMILY_NAME.getBytes(), + qualifier.getBytes()); + + if (cell.getValueArray().length > 0) { + result = new ChainNodeSpecificMinSummary(Bytes.toString(cell.getValueArray(), + cell.getValueOffset(), cell.getValueLength())); + } else { + result = new ChainNodeSpecificMinSummary(); } + return result; } - public static ChainSpecificHourSummary loadSpecificHourSummary(String key) throws IOException { - ChainSpecificHourSummary result = null; - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_ONE_HOUR_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME)); - Get g = new Get(Bytes.toBytes(key)); - Result r = table.get(g); - - if (r.rawCells().length == 0) { - return null; - } - result = new ChainSpecificHourSummary(); - for (Cell cell : r.rawCells()) { - if (cell.getValueArray().length > 0) - result.addNodeSummaryResult(new ChainNodeSpecificHourSummary(Bytes.toString(cell.getValueArray(), - cell.getValueOffset(), cell.getValueLength()))); - } - return result; - } - - public static ChainSpecificDaySummary loadSpecificDaySummary(String key) throws IOException { - ChainSpecificDaySummary result = null; - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_ONE_DAY_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME)); - Get g = new Get(Bytes.toBytes(key)); - Result r = table.get(g); - - if (r.rawCells().length == 0) { - return null; - } - result = new ChainSpecificDaySummary(); - for (Cell cell : r.rawCells()) { - if (cell.getValueArray().length > 0) - result.addNodeSummaryResult(new ChainNodeSpecificDaySummary(Bytes.toString(cell.getValueArray(), - cell.getValueOffset(), cell.getValueLength()))); - } - return result; - } - - public static ChainSpecificMonthSummary loadSpecificMonthSummary(String key) throws IOException { - ChainSpecificMonthSummary result = null; - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_ONE_MONTH_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME)); - Get g = new Get(Bytes.toBytes(key)); - Result r = table.get(g); - - if (r.rawCells().length == 0) { - return null; - } - result = new ChainSpecificMonthSummary(); - for (Cell cell : r.rawCells()) { - if (cell.getValueArray().length > 0) - result.addNodeSummaryResult(new ChainNodeSpecificMonthSummary(Bytes.toString(cell.getValueArray(), - cell.getValueOffset(), cell.getValueLength()))); - } - return result; - } - - public static void batchSaveSpecificMinSummary(Map minSummary) throws IOException, InterruptedException { - List puts = new ArrayList(); - for (Map.Entry entry : minSummary.entrySet()) { - Put put = new Put(entry.getKey().getBytes()); - entry.getValue().save(put); - puts.add(put); - } - - batchSavePuts(puts, HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME); - } - - public static void batchSaveSpecificDaySummary(Map daySummaryMap) throws IOException, InterruptedException { - List puts = new ArrayList(); - for (Map.Entry entry : daySummaryMap.entrySet()) { - Put put = new Put(entry.getKey().getBytes()); - entry.getValue().save(put); - puts.add(put); - } - - batchSavePuts(puts, HBaseTableMetaData.TABLE_CHAIN_ONE_DAY_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME); - } - - public static void batchSaveSpecificHourSummary(Map hourSummaryMap) throws IOException, InterruptedException { - List puts = new ArrayList(); - for (Map.Entry entry : hourSummaryMap.entrySet()) { - Put put = new Put(entry.getKey().getBytes()); - entry.getValue().save(put); - puts.add(put); - } - - batchSavePuts(puts, HBaseTableMetaData.TABLE_CHAIN_ONE_HOUR_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME); - } - - public static void batchSaveSpecificMonthSummary(Map monthSummaryMap) throws IOException, InterruptedException { - List puts = new ArrayList(); - for (Map.Entry entry : monthSummaryMap.entrySet()) { - Put put = new Put(entry.getKey().getBytes()); - entry.getValue().save(put); - puts.add(put); - } - - batchSavePuts(puts, HBaseTableMetaData.TABLE_CHAIN_ONE_MONTH_SUMMARY_INCLUDE_RELATIONSHIP.TABLE_NAME); - } - - private static void batchSavePuts(List puts, String tableName) throws IOException, InterruptedException { - Object[] resultArrays = new Object[puts.size()]; - Table table = connection.getTable(TableName.valueOf(tableName)); - table.batch(puts, resultArrays); - for (Object result : resultArrays) { - if (result == null) { - logger.error("Failed to save chain specific Summary"); - } - } - } - - public static CallChainTree loadMergedCallChain(String callEntrance) throws IOException { + public static CallChainTree loadCallChainTree(String callEntrance) throws IOException { CallChainTree result = null; - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_MERGED_CHAIN_DETAIL.TABLE_NAME)); + Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_DETAIL.TABLE_NAME)); Get g = new Get(Bytes.toBytes(callEntrance)); Result r = table.get(g); if (r.rawCells().length == 0) { @@ -298,7 +109,7 @@ public class HBaseUtil { callChainTreePut.addColumn(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_DETAIL.COLUMN_FAMILY_NAME.getBytes(), entry.getKey().getBytes(), entry.getValue().toString().getBytes()); } - Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_MERGED_CHAIN_DETAIL.TABLE_NAME)); + Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_DETAIL.TABLE_NAME)); table.put(callChainTreePut); // save relationship Put treeIdCidMappingPut = new Put(callChainTree.getCallEntrance().getBytes()); @@ -327,4 +138,17 @@ public class HBaseUtil { } return result; } + + public static void batchSaveMinSummaryResult(List puts) throws IOException, InterruptedException { + Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.TABLE_NAME)); + Object[] resultArray = new Object[puts.size()]; + table.batch(puts, resultArray); + int index = 0; + for (Object result : resultArray) { + if (result == null) { + logger.error("Failed to insert the put the Value[" + puts.get(index).getId() + "]"); + } + index++; + } + } } diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java index 55913cf24..67e1a1345 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java @@ -10,18 +10,6 @@ public class HBaseTableMetaData { public static final String TABLE_NAME = "sw-call-chain"; } - /** - * HBase 表:用于存放CID,TID的映射关系表 - * - * @author wusheng - */ - public final static class TABLE_CID_TID_MAPPING { - public static final String TABLE_NAME = "sw-cid-tid-mapping"; - - public static final String COLUMN_FAMILY_NAME = "trace_info"; - - public static final String CID_COLUMN_NAME = "cid"; - } /** * CID明细信息表 @@ -33,18 +21,6 @@ public class HBaseTableMetaData { public static final String COLUMN_FAMILY_NAME = "chain_detail"; } - - /** - * CID间关系表,记录异常CID和正常CID间的归属关系 - * - * @author wusheng - */ - public final static class TABLE_CALL_CHAIN_RELATIONSHIP { - public static final String TABLE_NAME = "sw-chain-relationship"; - - public static final String COLUMN_FAMILY_NAME = "chain-relationship"; - } - /** * 用于存放每个CID在一分钟内的汇总,汇总结果不包含关系汇总 * @@ -61,56 +37,12 @@ public class HBaseTableMetaData { * * @author wusheng */ - public final static class TABLE_CHAIN_ONE_MINUTE_SUMMARY_INCLUDE_RELATIONSHIP { + public final static class TABLE_CHAIN_ONE_MINUTE_SUMMARY { public static final String TABLE_NAME = "sw-chain-1min-summary-ic-rela"; public static final String COLUMN_FAMILY_NAME = "chain_summary"; } - /** - * 用于存放每个CID在一小时内的汇总,汇总结果不包含关系汇总 - * - * @author wusheng - */ - public final static class TABLE_CHAIN_ONE_HOUR_SUMMARY_INCLUDE_RELATIONSHIP { - public static final String TABLE_NAME = "sw-chain-1hour-summary-ic-rela"; - - public static final String COLUMN_FAMILY_NAME = "chain_summary"; - } - - /** - * 用于存放每个CID在一天内的汇总,汇总结果不包含关系汇总 - * - * @author wusheng - */ - public final static class TABLE_CHAIN_ONE_DAY_SUMMARY_INCLUDE_RELATIONSHIP { - public static final String TABLE_NAME = "sw-chain-1day-summary-ic-rela"; - - public static final String COLUMN_FAMILY_NAME = "chain_summary"; - } - - /** - * 用于存放每个CID在一月内的汇总,汇总结果不包含关系汇总 - * - * @author wusheng - */ - public final static class TABLE_CHAIN_ONE_MONTH_SUMMARY_INCLUDE_RELATIONSHIP { - public static final String TABLE_NAME = "sw-chain-1mon-summary-ic-rela"; - - public static final String COLUMN_FAMILY_NAME = "chain_summary"; - } - - /** - * 用于存放已经合并的调用链的信息 - * - * @author zhangxin - */ - public final static class TABLE_MERGED_CHAIN_DETAIL { - public static final String TABLE_NAME = "sw-merged-chain-detail"; - - public static final String COLUMN_FAMILY_NAME = "chain_detail"; - } - /** * 用于存放调用树和CID的映射关系 *