提交 b0c4674d 编写于 作者: Z zhang.xin

1. 新增天,月,小时的统计

上级 65679624
......@@ -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());
......
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);
}
}
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);
}
}
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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册