优化图形分析根据可选时间补0逻辑、优化流量图形单位可选功能。

This commit is contained in:
gaoyutao
2025-11-06 18:09:29 +08:00
parent 5e5330a924
commit c4b380437f
7 changed files with 77 additions and 11 deletions
@@ -52,7 +52,7 @@ public class EchartsDataUtils {
return Math.round(microseconds / 1_000_000.0 * 100.0) / 100.0;
}
/**
* 构建ECharts图表数据(带时间补全和0值填充
* 构建ECharts图表数据(带时间补全和特殊值处理
* @param list 原始数据列表
* @param timeExtractor 时间字段提取函数
* @param dataExtractors 数据提取器Map
@@ -112,6 +112,9 @@ public class EchartsDataUtils {
dataExtractors.keySet().forEach(name ->
yData.put(name, new ArrayList<Object>()));
// 特殊处理:查找percentile95的固定值
Object fixedPercentile95Value = findFixedValueForPercentile95(sortedList, dataExtractors);
for (Date time : fullTimeSeries) {
// X轴数据
xAxisData.add(parseDateToStr(time));
@@ -126,11 +129,13 @@ public class EchartsDataUtils {
@SuppressWarnings("unchecked")
List<Object> seriesData = (List<Object>) yData.get(name);
if (item != null) {
Object value = extractor.apply(item);
seriesData.add(value != null ? value : 0);
seriesData.add(value != null ? value : getDefaultValue(name, fixedPercentile95Value));
} else {
seriesData.add(0); // 补0
// 数据补全
seriesData.add(getDefaultValue(name, fixedPercentile95Value));
}
}
}
@@ -147,6 +152,35 @@ public class EchartsDataUtils {
}
}
/**
* 查找percentile95的固定值(第一个非零值)
*/
private static <T> Object findFixedValueForPercentile95(List<T> list, Map<String, Function<T, ?>> dataExtractors) {
if (!dataExtractors.containsKey("percentile95")) {
return 0;
}
Function<T, ?> extractor = dataExtractors.get("percentile95");
for (T item : list) {
Object value = extractor.apply(item);
if (value != null && !value.equals(0)) {
return value;
}
}
return 0;
}
/**
* 根据指标名称获取默认值
*/
private static Object getDefaultValue(String metricName, Object fixedPercentile95Value) {
if ("percentile95".equals(metricName) && !fixedPercentile95Value.equals(0)) {
return fixedPercentile95Value; // percentile95使用固定值
} else {
return 0; // 其他指标补0
}
}
/**
* 字符串转日期
*/
@@ -38,6 +38,10 @@ public class SpeedUtils {
public BigDecimal getLastOutSpeedGb() { return lastOutSpeedGb; }
public String getRecommendedUnit() { return recommendedUnit; }
public void setRecommendedUnit(String recommendedUnit) {
this.recommendedUnit = recommendedUnit;
}
@Override
public String toString() {
return String.format(
@@ -65,7 +69,7 @@ public class SpeedUtils {
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
BigDecimal.ZERO, BigDecimal.ZERO,
"bit"
"Kb"
);
}
@@ -605,6 +605,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
String unit = result.getRecommendedUnit();
if(epsInitialTrafficData.getUnit() != null){
unit = epsInitialTrafficData.getUnit();
result.setRecommendedUnit(unit);
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<EpsInitialTrafficData, ?>> extractors = new LinkedHashMap<>();
@@ -769,6 +769,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
EpsNodeBandwidth nodeBandwidth = epsNodeBandwidthList.get(0);
percentile95 = nodeBandwidth.getBandwidthResult();
}
dailyQuery.setClientId(clientId);
dailyQuery.setName(rmEpsTopologyManagement.getInterfaceName());
Map<String, Object> resultMap = switchNetSpeedEcharts(dailyQuery, percentile95);
// 查询端口备注信息
@@ -868,6 +869,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
EpsNodeBandwidth nodeBandwidth = epsNodeBandwidthList.get(0);
percentile95 = nodeBandwidth.getBandwidthResult();
}
dailyQuery.setClientId(clientId);
dailyQuery.setName(rmEpsTopologyManagement.getInterfaceName());
Map<String, Object> resultMap = switchNetSpeedEcharts(dailyQuery, percentile95);
// 查询端口备注信息
@@ -923,12 +925,16 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
*/
public Map<String, Object> switchNetSpeedEcharts(InitialSwitchInfoDetails initialSwitchInfoDetails, BigDecimal percentile95) {
List<InitialSwitchInfoDetails> list = initialSwitchInfoDetailsMapper.getswitchDetailList(initialSwitchInfoDetails);
if(list == null){
list = new ArrayList<>();
}
try {
list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95)));
SpeedUtils.SpeedResult result = SpeedUtils.calculateWithAverageBasedUnit(list, "inSpeed", "outSpeed");
String unit = result.getRecommendedUnit();
if(initialSwitchInfoDetails.getUnit() != null){
unit = initialSwitchInfoDetails.getUnit();
result.setRecommendedUnit(unit);
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<InitialSwitchInfoDetails, ?>> extractors = new LinkedHashMap<>();
@@ -945,7 +951,9 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
info != null && info.getPercentile95() != null ?
info.getPercentile95().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsData(list, InitialSwitchInfoDetails::getCreateTime, extractors);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialSwitchInfoDetails::getCreateTime, extractors,
initialSwitchInfoDetails.getStartTime(), initialSwitchInfoDetails.getEndTime());
resultMap.put("other", result);
resultMap.put("95value", percentile95);
return resultMap;
@@ -242,7 +242,10 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf
info != null && info.getOutSpeed() != null ?
new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsData(list, InitialBandwidthTraffic::getCreateTime, extractors);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialBandwidthTraffic::getCreateTime, extractors,
initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime()
);
resultMap.put("unit", unit);
return resultMap;
} catch (Exception e){
@@ -271,7 +274,10 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf
extractors.put("inDroppedData", info -> info.getInDropped());
extractors.put("outDroppedData", info -> info.getOutDropped());
return EchartsDataUtils.buildEchartsData(list, InitialBandwidthTraffic::getCreateTime, extractors);
return EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialBandwidthTraffic::getCreateTime, extractors,
initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime()
);
}
}
@@ -166,7 +166,10 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService
info != null && info.getOutSpeed() != null ?
info.getOutSpeed().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialSwitchInfo::getCreateTime, extractors,
initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime()
);
resultMap.put("unit", unit);
return resultMap;
} catch (Exception e){
@@ -186,7 +189,10 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService
Map<String, Function<InitialSwitchInfo, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInDiscardsData", info -> info.getIfInDiscards());
extractors.put("netOutDiscardsData", info -> info.getIfOutDiscards());
return EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors);
return EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialSwitchInfo::getCreateTime, extractors,
initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime()
);
}
/**
@@ -200,7 +206,10 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService
Map<String, Function<InitialSwitchInfo, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInTotalData", info -> info.getInBytes().multiply(new BigDecimal(8)));
extractors.put("netOutTotalData", info -> info.getOutBytes().multiply(new BigDecimal(8)));
return EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors);
return EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialSwitchInfo::getCreateTime, extractors,
initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime()
);
}
/**
@@ -214,6 +223,9 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService
Map<String, Function<InitialSwitchInfo, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInErrDiscardsData", info -> info.getIfInErrors());
extractors.put("netOutErrDiscardsData", info -> info.getIfOutErrors());
return EchartsDataUtils.buildEchartsData(list, InitialSwitchInfo::getCreateTime, extractors);
return EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialSwitchInfo::getCreateTime, extractors,
initialSwitchInfo.getStartTime(), initialSwitchInfo.getEndTime()
);
}
}
@@ -56,6 +56,7 @@
<if test="defaultParams != null and defaultParams != ''"> and default_params = #{defaultParams}</if>
<if test="taskName != null and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
</where>
order by create_time desc
</select>
<select id="selectRmDeploymentPolicyById" parameterType="Long" resultMap="RmDeploymentPolicyResult">