1. 新增天,月,小时的统计
This commit is contained in:
parent
6567962480
commit
b0c4674d2d
|
|
@ -30,31 +30,102 @@ public class CallChainTreeNode {
|
|||
* key: treeId + 小时
|
||||
* value: 当前树的当前小时范围内的,所有分钟和节点的统计数据
|
||||
*/
|
||||
private Map<String, ChainNodeSpecificMinSummary> chainNodeContainer;
|
||||
private Map<String, ChainNodeSpecificMinSummary> chainNodeSpecificMinSummaryContainer;
|
||||
|
||||
/**
|
||||
* key: treeId + 天
|
||||
* value: 当前树的当前天范围内的,所有小时和节点的统计数据
|
||||
*/
|
||||
private Map<String, ChainNodeSpecificHourSummary> chainNodeSpecificHourSummaryContainer;
|
||||
|
||||
/**
|
||||
* key: treeId + 月
|
||||
* value: 当前树的当前月范围内的,所有天和节点的统计数据
|
||||
*/
|
||||
private Map<String, ChainNodeSpecificDaySummary> chainNodeSpecificDaySummaryContainer;
|
||||
|
||||
/**
|
||||
* key: treeId + 年
|
||||
* value: 当前树的当前年范围内的,所有月份和节点的统计数据
|
||||
*/
|
||||
private Map<String, ChainNodeSpecificMonthSummary> chainNodeSpecificMonthSummaryContainer;
|
||||
|
||||
public CallChainTreeNode(ChainNode node) {
|
||||
this.traceLevelId = node.getTraceLevelId();
|
||||
chainNodeContainer = new HashMap<String, ChainNodeSpecificMinSummary>();
|
||||
chainNodeSpecificMinSummaryContainer = new HashMap<String, ChainNodeSpecificMinSummary>();
|
||||
chainNodeSpecificHourSummaryContainer = new HashMap<String, ChainNodeSpecificHourSummary>();
|
||||
chainNodeSpecificDaySummaryContainer = new HashMap<String, ChainNodeSpecificDaySummary>();
|
||||
chainNodeSpecificMonthSummaryContainer = new HashMap<String, ChainNodeSpecificMonthSummary>();
|
||||
this.viewPointId = node.getViewPoint();
|
||||
}
|
||||
|
||||
public void summary(String treeId, ChainNode node) throws IOException {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(new Date(node.getStartDate()));
|
||||
/**
|
||||
* 按分钟维度进行汇总<br/>
|
||||
* chainNodeContainer以treeId和时间(精确到分钟)为key,value为当前时间范围内的所有分钟的汇总数据
|
||||
*/
|
||||
|
||||
summaryMinResult(treeId, node, calendar);
|
||||
summaryHourResult(treeId, node, calendar);
|
||||
summaryDayResult(treeId, node, calendar);
|
||||
summaryMonthResult(treeId, node, calendar);
|
||||
}
|
||||
|
||||
private void summaryMonthResult(String treeId, ChainNode node, Calendar calendar) {
|
||||
String keyOfMonthSummaryTable = generateKeyOfMonthSummaryTable(treeId, calendar);
|
||||
ChainNodeSpecificMonthSummary monthSummary = chainNodeSpecificMonthSummaryContainer.get(keyOfMonthSummaryTable);
|
||||
if (monthSummary == null) {
|
||||
monthSummary = HBaseUtil.loadSpecificMonthSummary(keyOfMonthSummaryTable, getTreeNodeId());
|
||||
chainNodeSpecificMonthSummaryContainer.put(keyOfMonthSummaryTable, monthSummary);
|
||||
}
|
||||
monthSummary.summary(String.valueOf(calendar.get(Calendar.YEAR)), node);
|
||||
}
|
||||
|
||||
private void summaryDayResult(String treeId, ChainNode node, Calendar calendar) {
|
||||
String keyOfDaySummaryTable = generateKeyOfDaySummaryTable(treeId, calendar);
|
||||
ChainNodeSpecificDaySummary daySummary = chainNodeSpecificDaySummaryContainer.get(keyOfDaySummaryTable);
|
||||
if (daySummary == null) {
|
||||
daySummary = HBaseUtil.loadSpecificDaySummary(keyOfDaySummaryTable, getTreeNodeId());
|
||||
chainNodeSpecificDaySummaryContainer.put(keyOfDaySummaryTable, daySummary);
|
||||
}
|
||||
daySummary.summary(String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)), node);
|
||||
}
|
||||
|
||||
private void summaryHourResult(String treeId, ChainNode node, Calendar calendar) {
|
||||
String keyOfHourSummaryTable = generateKeyOfHourSummaryTable(treeId, calendar);
|
||||
ChainNodeSpecificHourSummary hourSummary = chainNodeSpecificHourSummaryContainer.get(keyOfHourSummaryTable);
|
||||
if (hourSummary == null) {
|
||||
hourSummary = HBaseUtil.loadSpecificHourSummary(keyOfHourSummaryTable, getTreeNodeId());
|
||||
chainNodeSpecificHourSummaryContainer.put(keyOfHourSummaryTable, hourSummary);
|
||||
}
|
||||
hourSummary.summary(String.valueOf(calendar.get(Calendar.HOUR)), node);
|
||||
}
|
||||
|
||||
/**
|
||||
* 按分钟维度进行汇总<br/>
|
||||
* chainNodeContainer以treeId和时间(精确到分钟)为key,value为当前时间范围内的所有分钟的汇总数据
|
||||
*/
|
||||
private void summaryMinResult(String treeId, ChainNode node, Calendar calendar) throws IOException {
|
||||
String keyOfMinSummaryTable = generateKeyOfMinSummaryTable(treeId, calendar);
|
||||
ChainNodeSpecificMinSummary minSummary = chainNodeContainer.get(keyOfMinSummaryTable);
|
||||
ChainNodeSpecificMinSummary minSummary = chainNodeSpecificMinSummaryContainer.get(keyOfMinSummaryTable);
|
||||
if (minSummary == null) {
|
||||
minSummary = HBaseUtil.loadSpecificMinSummary(keyOfMinSummaryTable, getTreeNodeId());
|
||||
chainNodeContainer.put(keyOfMinSummaryTable, minSummary);
|
||||
chainNodeSpecificMinSummaryContainer.put(keyOfMinSummaryTable, minSummary);
|
||||
}
|
||||
|
||||
minSummary.summary(String.valueOf(calendar.get(Calendar.MINUTE)), node);
|
||||
}
|
||||
|
||||
private String generateKeyOfMonthSummaryTable(String treeId, Calendar calendar) {
|
||||
return treeId + "/" + calendar.get(Calendar.YEAR);
|
||||
}
|
||||
|
||||
private String generateKeyOfDaySummaryTable(String treeId, Calendar calendar) {
|
||||
return treeId + "/" + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1);
|
||||
}
|
||||
|
||||
private String generateKeyOfHourSummaryTable(String treeId, Calendar calendar) {
|
||||
return treeId + "/" + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"
|
||||
+ calendar.get(Calendar.DAY_OF_MONTH);
|
||||
}
|
||||
|
||||
private String generateKeyOfMinSummaryTable(String treeId, Calendar calendar) {
|
||||
return treeId + "/" + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"
|
||||
+ calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.HOUR) + ":00:00";
|
||||
|
|
@ -76,7 +147,7 @@ public class CallChainTreeNode {
|
|||
*/
|
||||
public void saveSummaryResultToHBase() throws IOException, InterruptedException {
|
||||
List<Put> puts = new ArrayList<Put>();
|
||||
for (Map.Entry<String, ChainNodeSpecificMinSummary> entry : chainNodeContainer.entrySet()) {
|
||||
for (Map.Entry<String, ChainNodeSpecificMinSummary> entry : chainNodeSpecificMinSummaryContainer.entrySet()) {
|
||||
Put put = new Put(entry.getKey().getBytes());
|
||||
put.addColumn(HBaseTableMetaData.TABLE_CHAIN_ONE_MINUTE_SUMMARY.COLUMN_FAMILY_NAME.getBytes()
|
||||
, getTreeNodeId().getBytes(), entry.getValue().toString().getBytes());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
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 java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by xin on 16-3-10.
|
||||
*/
|
||||
public class ChainNodeSpecificDaySummary {
|
||||
|
||||
/**
|
||||
* key : 天
|
||||
*/
|
||||
private Map<String, ChainNodeSpecificTimeWindowSummaryValue> summaryValueMap;
|
||||
|
||||
public ChainNodeSpecificDaySummary(String originData) {
|
||||
JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData);
|
||||
summaryValueMap = new Gson().fromJson(jsonObject.get("summaryValueMap").toString(),
|
||||
new TypeToken<Map<String, ChainNodeSpecificTimeWindowSummaryValue>>() {
|
||||
}.getType());
|
||||
}
|
||||
|
||||
public ChainNodeSpecificDaySummary() {
|
||||
summaryValueMap = new HashMap<String, ChainNodeSpecificTimeWindowSummaryValue>();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
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 java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ChainNodeSpecificHourSummary {
|
||||
/**
|
||||
* key : 小时
|
||||
*/
|
||||
private Map<String, ChainNodeSpecificTimeWindowSummaryValue> summaryValueMap;
|
||||
|
||||
public ChainNodeSpecificHourSummary(String originData) {
|
||||
JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData);
|
||||
summaryValueMap = new Gson().fromJson(jsonObject.get("summaryValueMap").toString(),
|
||||
new TypeToken<Map<String, ChainNodeSpecificTimeWindowSummaryValue>>() {
|
||||
}.getType());
|
||||
}
|
||||
|
||||
public ChainNodeSpecificHourSummary() {
|
||||
summaryValueMap = new HashMap<String, ChainNodeSpecificTimeWindowSummaryValue>();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
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 java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Created by xin on 16-3-10.
|
||||
*/
|
||||
public class ChainNodeSpecificMonthSummary {
|
||||
/**
|
||||
* key : 月
|
||||
*/
|
||||
private Map<String, ChainNodeSpecificTimeWindowSummaryValue> summaryValueMap;
|
||||
|
||||
public ChainNodeSpecificMonthSummary(String originData) {
|
||||
JsonObject jsonObject = (JsonObject) new JsonParser().parse(originData);
|
||||
summaryValueMap = new Gson().fromJson(jsonObject.get("summaryValueMap").toString(),
|
||||
new TypeToken<Map<String, ChainNodeSpecificTimeWindowSummaryValue>>() {
|
||||
}.getType());
|
||||
}
|
||||
|
||||
public ChainNodeSpecificMonthSummary() {
|
||||
summaryValueMap = new HashMap<String, ChainNodeSpecificTimeWindowSummaryValue>();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,9 @@ import java.io.IOException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.entity.ChainNodeSpecificDaySummary;
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.entity.ChainNodeSpecificHourSummary;
|
||||
import com.ai.cloud.skywalking.analysis.chainbuild.entity.ChainNodeSpecificMonthSummary;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.hbase.Cell;
|
||||
import org.apache.hadoop.hbase.HBaseConfiguration;
|
||||
|
|
@ -155,4 +158,16 @@ public class HBaseUtil {
|
|||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
public static ChainNodeSpecificHourSummary loadSpecificHourSummary(String keyOfHourSummaryTable, String treeNodeId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ChainNodeSpecificDaySummary loadSpecificDaySummary(String keyOfDaySummaryTable, String treeNodeId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ChainNodeSpecificMonthSummary loadSpecificMonthSummary(String keyOfMonthSummaryTable, String treeNodeId) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue