提交Live Traffic Chart重构后初版代码。(TSG-14799)
This commit is contained in:
111
src/main/java/com/zdjizhi/utils/general/MetricUtil.java
Normal file
111
src/main/java/com/zdjizhi/utils/general/MetricUtil.java
Normal file
@@ -0,0 +1,111 @@
|
||||
package com.zdjizhi.utils.general;
|
||||
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import cn.hutool.log.LogFactory;
|
||||
import com.zdjizhi.common.pojo.AppProtocol;
|
||||
import com.zdjizhi.utils.StringUtil;
|
||||
import org.apache.datasketches.hll.HllSketch;
|
||||
import org.apache.datasketches.hll.Union;
|
||||
|
||||
import java.util.Base64;
|
||||
|
||||
|
||||
/**
|
||||
* @author qidaijie
|
||||
* @Package com.zdjizhi.storm.utils.general
|
||||
* @Description:
|
||||
* @date 2021/7/2015:31
|
||||
*/
|
||||
public class MetricUtil {
|
||||
private static final Log logger = LogFactory.get();
|
||||
|
||||
|
||||
/**
|
||||
* 用于对业务指标进行统计
|
||||
*
|
||||
* @param cacheData 缓存中数据
|
||||
* @param newData 新数据
|
||||
*/
|
||||
public static void statisticsMetrics(AppProtocol cacheData, AppProtocol newData) {
|
||||
cacheData.setSessions(MetricUtil.longSum(cacheData.getSessions(), newData.getSessions()));
|
||||
|
||||
cacheData.setIn_bytes(MetricUtil.longSum(cacheData.getIn_bytes(), newData.getIn_bytes()));
|
||||
cacheData.setOut_pkts(MetricUtil.longSum(cacheData.getOut_bytes(), newData.getOut_bytes()));
|
||||
cacheData.setIn_pkts(MetricUtil.longSum(cacheData.getIn_pkts(), newData.getIn_pkts()));
|
||||
cacheData.setOut_pkts(MetricUtil.longSum(cacheData.getOut_pkts(), newData.getOut_pkts()));
|
||||
|
||||
cacheData.setC2s_bytes(MetricUtil.longSum(cacheData.getC2s_bytes(), newData.getC2s_bytes()));
|
||||
cacheData.setS2c_bytes(MetricUtil.longSum(cacheData.getS2c_bytes(), newData.getS2c_bytes()));
|
||||
cacheData.setC2s_pkts(MetricUtil.longSum(cacheData.getC2s_pkts(), newData.getC2s_pkts()));
|
||||
cacheData.setS2c_pkts(MetricUtil.longSum(cacheData.getS2c_pkts(), newData.getS2c_pkts()));
|
||||
|
||||
cacheData.setC2s_fragments(MetricUtil.longSum(cacheData.getC2s_fragments(), newData.getC2s_fragments()));
|
||||
cacheData.setS2c_fragments(MetricUtil.longSum(cacheData.getS2c_fragments(), newData.getS2c_fragments()));
|
||||
|
||||
cacheData.setC2s_tcp_lost_bytes(MetricUtil.longSum(cacheData.getC2s_tcp_lost_bytes(), newData.getC2s_tcp_lost_bytes()));
|
||||
cacheData.setS2c_tcp_lost_bytes(MetricUtil.longSum(cacheData.getS2c_tcp_lost_bytes(), newData.getS2c_tcp_lost_bytes()));
|
||||
|
||||
cacheData.setC2s_tcp_ooorder_pkts(MetricUtil.longSum(cacheData.getC2s_tcp_ooorder_pkts(), newData.getC2s_tcp_ooorder_pkts()));
|
||||
cacheData.setS2c_tcp_ooorder_pkts(MetricUtil.longSum(cacheData.getS2c_tcp_ooorder_pkts(), newData.getS2c_tcp_ooorder_pkts()));
|
||||
|
||||
cacheData.setC2s_tcp_retransmitted_bytes(MetricUtil.longSum(cacheData.getC2s_tcp_retransmitted_bytes(), newData.getC2s_tcp_retransmitted_bytes()));
|
||||
cacheData.setS2c_tcp_retransmitted_bytes(MetricUtil.longSum(cacheData.getS2c_tcp_retransmitted_bytes(), newData.getS2c_tcp_retransmitted_bytes()));
|
||||
|
||||
cacheData.setC2s_tcp_retransmitted_pkts(MetricUtil.longSum(cacheData.getC2s_tcp_retransmitted_pkts(), newData.getC2s_tcp_retransmitted_pkts()));
|
||||
cacheData.setS2c_tcp_retransmitted_pkts(MetricUtil.longSum(cacheData.getS2c_tcp_retransmitted_pkts(), newData.getS2c_tcp_retransmitted_pkts()));
|
||||
|
||||
cacheData.setClient_ip_sketch(MetricUtil.hllSketchUnion(cacheData.getClient_ip_sketch(), newData.getClient_ip_sketch()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Long类型的数据求和
|
||||
*
|
||||
* @param value1 第一个值
|
||||
* @param value2 第二个值
|
||||
* @return value1 + value2
|
||||
*/
|
||||
private static Long longSum(Long value1, Long value2) {
|
||||
Long result = 0L;
|
||||
try {
|
||||
if (value1 > 0 && value2 > 0) {
|
||||
result = value1 + value2;
|
||||
} else {
|
||||
result = value1;
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
logger.error("Abnormal sending of traffic indicator statistics! The message is:" + e.getMessage());
|
||||
result = value1;
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param cacheHll 缓存的sketch
|
||||
* @param newHll 聚合后的sketch
|
||||
* @return 合并后的sketch
|
||||
*/
|
||||
private static String hllSketchUnion(String cacheHll, String newHll) {
|
||||
Union union = new Union(12);
|
||||
try {
|
||||
if (StringUtil.isNotBlank(cacheHll)) {
|
||||
byte[] cacheHllBytes = Base64.getDecoder().decode(cacheHll);
|
||||
HllSketch cacheSketch = HllSketch.heapify(cacheHllBytes);
|
||||
union.update(cacheSketch);
|
||||
}
|
||||
|
||||
if (StringUtil.isNotBlank(newHll)) {
|
||||
byte[] newHllBytes = Base64.getDecoder().decode(newHll);
|
||||
HllSketch newSketch = HllSketch.heapify(newHllBytes);
|
||||
union.update(newSketch);
|
||||
}
|
||||
return Base64.getEncoder().encodeToString(union.getResult().toUpdatableByteArray());
|
||||
|
||||
} catch (RuntimeException e) {
|
||||
logger.error("Merge hllSketch results abnormal! The message is:" + e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user