增加计算单位可选方法.

优化图形分析根据可选时间补0逻辑,完成度70%。
优化业务自定义95值计算功能修改相关数据方法。
This commit is contained in:
gaoyutao
2025-11-04 19:11:07 +08:00
parent fe1763386a
commit 84e003893d
18 changed files with 438 additions and 53 deletions

View File

@@ -1,5 +1,7 @@
package com.ruoyi.common.core.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -42,10 +44,244 @@ public class EchartsDataUtils {
return result;
}
/**
* 微秒转秒
*/
public static double convertMicrosecondsToSeconds(long microseconds) {
return microseconds / 1_000_000.0;
}
/**
* 构建ECharts图表数据带时间补全和0值填充
* @param list 原始数据列表
* @param timeExtractor 时间字段提取函数
* @param dataExtractors 数据提取器Map
* @param startTime 开始时间字符串格式yyyy-MM-dd HH:mm:ss
* @param endTime 结束时间字符串格式yyyy-MM-dd HH:mm:ss
* @param <T> 数据类型泛型
* @return 包含xData和yData的Map
*/
public static <T> Map<String, Object> buildEchartsDataAutoPadding(
List<T> list,
Function<T, Date> timeExtractor,
Map<String, Function<T, ?>> dataExtractors,
String startTime,
String endTime) {
try {
// 解析时间字符串
Date startDate = parseStringToDate(startTime);
Date endDate = parseStringToDate(endTime);
if (startDate == null || endDate == null) {
throw new IllegalArgumentException("开始时间或结束时间格式错误");
}
if (startDate.after(endDate)) {
throw new IllegalArgumentException("开始时间不能晚于结束时间");
}
if (list == null || list.isEmpty()) {
return createEmptyResult(dataExtractors.keySet(), startTime, endTime);
}
// 按时间排序
List<T> sortedList = list.stream()
.sorted(Comparator.comparing(timeExtractor))
.collect(Collectors.toList());
// 自动检测时间间隔
long timeInterval = detectTimeInterval(sortedList, timeExtractor);
// 生成完整的时间序列
List<Date> fullTimeSeries = generateTimeSeries(startDate, endDate, timeInterval);
// 创建时间到数据的映射(考虑时间精度)
Map<Long, T> timeDataMap = sortedList.stream()
.collect(Collectors.toMap(
item -> normalizeTime(timeExtractor.apply(item), timeInterval),
Function.identity(),
(a, b) -> a
));
// 准备X轴和Y轴数据
List<String> xAxisData = new ArrayList<>();
Map<String, Object> yData = new LinkedHashMap<>();
// 初始化Y轴数据结构
dataExtractors.keySet().forEach(name ->
yData.put(name, new ArrayList<Object>()));
for (Date time : fullTimeSeries) {
// X轴数据
xAxisData.add(parseDateToStr(time));
// Y轴数据
Long normalizedTime = normalizeTime(time, timeInterval);
T item = timeDataMap.get(normalizedTime);
for (Map.Entry<String, Function<T, ?>> entry : dataExtractors.entrySet()) {
String name = entry.getKey();
Function<T, ?> extractor = entry.getValue();
@SuppressWarnings("unchecked")
List<Object> seriesData = (List<Object>) yData.get(name);
if (item != null) {
Object value = extractor.apply(item);
seriesData.add(value != null ? value : 0);
} else {
seriesData.add(0); // 补0
}
}
}
Map<String, Object> result = new HashMap<>();
result.put("xData", xAxisData);
result.put("yData", yData);
return result;
} catch (Exception e) {
// 记录日志
System.err.println("构建图表数据失败: " + e.getMessage());
return createEmptyResult(dataExtractors.keySet(), startTime, endTime);
}
}
/**
* 字符串转日期
*/
private static Date parseStringToDate(String dateStr) {
if (dateStr == null || dateStr.trim().isEmpty()) {
return null;
}
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setLenient(false); // 严格模式
return sdf.parse(dateStr);
} catch (ParseException e) {
System.err.println("日期解析失败: " + dateStr);
return null;
}
}
/**
* 日期转字符串
*/
private static String parseDateToStr(Date date) {
if (date == null) {
return "";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
/**
* 生成完整的时间序列
*/
private static List<Date> generateTimeSeries(Date start, Date end, long interval) {
List<Date> timeSeries = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(start);
// 确保开始时间对齐到时间间隔
long startMillis = normalizeTime(start, interval);
calendar.setTimeInMillis(startMillis);
while (!calendar.getTime().after(end)) {
timeSeries.add(calendar.getTime());
calendar.setTimeInMillis(calendar.getTimeInMillis() + interval);
}
return timeSeries;
}
/**
* 自动检测时间间隔
*/
private static <T> long detectTimeInterval(List<T> list, Function<T, Date> timeExtractor) {
if (list.size() < 2) {
return 300000; // 默认5分钟
}
// 计算时间间隔的众数
Map<Long, Integer> intervalCount = new HashMap<>();
for (int i = 1; i < list.size(); i++) {
long interval = timeExtractor.apply(list.get(i)).getTime() -
timeExtractor.apply(list.get(i - 1)).getTime();
if (interval > 0) {
intervalCount.merge(interval, 1, Integer::sum);
}
}
// 如果没有有效间隔,使用默认值
if (intervalCount.isEmpty()) {
return 300000L;
}
return intervalCount.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse(300000L);
}
/**
* 时间标准化(对齐到时间间隔)
*/
private static long normalizeTime(Date time, long interval) {
long timeMillis = time.getTime();
return (timeMillis / interval) * interval;
}
/**
* 创建空结果(包含完整的时间序列)
*/
private static Map<String, Object> createEmptyResult(Set<String> dataNames, String startTime, String endTime) {
Map<String, Object> result = new HashMap<>();
try {
// 解析时间范围
Date startDate = parseStringToDate(startTime);
Date endDate = parseStringToDate(endTime);
if (startDate != null && endDate != null && !startDate.after(endDate)) {
// 使用默认时间间隔生成完整时间序列
long defaultInterval = 300000L; // 5分钟
List<Date> fullTimeSeries = generateTimeSeries(startDate, endDate, defaultInterval);
// 构建x轴数据
List<String> xAxisData = new ArrayList<>();
for (Date date : fullTimeSeries) {
xAxisData.add(parseDateToStr(date));
}
result.put("xData", xAxisData);
// 构建y轴数据全部补0
Map<String, Object> yData = new LinkedHashMap<>();
int dataSize = xAxisData.size();
dataNames.forEach(name -> {
List<Object> zeroData = new ArrayList<>();
for (int i = 0; i < dataSize; i++) {
zeroData.add(0);
}
yData.put(name, zeroData);
});
result.put("yData", yData);
} else {
// 时间解析失败时返回空数据
result.put("xData", new ArrayList<>());
Map<String, Object> yData = new LinkedHashMap<>();
dataNames.forEach(name -> yData.put(name, new ArrayList<>()));
result.put("yData", yData);
}
} catch (Exception e) {
// 异常时返回空数据
result.put("xData", new ArrayList<>());
Map<String, Object> yData = new LinkedHashMap<>();
dataNames.forEach(name -> yData.put(name, new ArrayList<>()));
result.put("yData", yData);
}
return result;
}
}

View File

@@ -0,0 +1,19 @@
package com.ruoyi.common.core.utils;
public class UnitChangeUtil {
private static final double GB = 1024.0 * 1024.0 * 1024.0;
public static double bytesToGb(long bytes) {
return bytes / GB;
}
public static double convertKbToGb(String kbValue) {
if (kbValue == null || kbValue.trim().isEmpty()) {
throw new IllegalArgumentException("KB值不能为空");
}
double kb = Double.parseDouble(kbValue.trim());
return kb / (1024.0 * 1024.0);
}
}

View File

@@ -120,6 +120,8 @@ public class EpsInitialTrafficData extends BaseEntity {
private String calculationMode;
/** 95值 */
private BigDecimal percentile95;
/** 单位 */
private String unit;
}

View File

@@ -124,4 +124,6 @@ public class InitialSwitchInfoDetails extends BaseEntity
private String interfaceNameRemark;
/** 95值 */
private BigDecimal percentile95;
/** 单位 */
private String unit;
}

View File

@@ -496,9 +496,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
joiner.add("" + businessName + "");
}
String name = joiner.toString();
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
if(resultMap != null){
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
}
} catch (Exception e){
e.printStackTrace();
}
@@ -574,9 +576,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
joiner.add("" + businessName + "");
}
String name = joiner.toString();
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
if(resultMap != null){
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
}
} catch (Exception e){
e.printStackTrace();
}
@@ -592,34 +596,41 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
*/
public Map<String, Object> serverNetSpeedEcharts(EpsInitialTrafficData epsInitialTrafficData, BigDecimal percentile95) {
List<EpsInitialTrafficData> list = getTrafficListByClientIds(epsInitialTrafficData);
if(!list.isEmpty()){
try {
list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95)));
SpeedUtils.SpeedResult result = SpeedUtils.calculateWithStringTraffic(list, "inSpeed", "outSpeed");
BigDecimal divisor = SpeedUtils.getDivisor(result.getRecommendedUnit());
Map<String, Function<EpsInitialTrafficData, ?>> extractors = new LinkedHashMap<>();
extractors.put("netOutSpeedData", info ->
info != null && info.getOutSpeed() != null ?
new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("netMachineFlowData", info ->
info != null && info.getMachineFlow() != null ?
new BigDecimal(info.getMachineFlow()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("percentile95", info ->
info != null && info.getPercentile95() != null ?
info.getPercentile95().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsData(list, EpsInitialTrafficData::getCreateTime, extractors);
resultMap.put("other", result);
resultMap.put("95value", percentile95);
return resultMap;
} catch (Exception e){
e.printStackTrace();
}
if(list == null){
list = new ArrayList<>();
}
return new HashMap<>();
try {
list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95)));
SpeedUtils.SpeedResult result = SpeedUtils.calculateWithStringTraffic(list, "inSpeed", "outSpeed");
String unit = result.getRecommendedUnit();
if(epsInitialTrafficData.getUnit() != null){
unit = epsInitialTrafficData.getUnit();
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<EpsInitialTrafficData, ?>> extractors = new LinkedHashMap<>();
extractors.put("netOutSpeedData", info ->
info != null && info.getOutSpeed() != null ?
new BigDecimal(info.getOutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("netMachineFlowData", info ->
info != null && info.getMachineFlow() != null ?
new BigDecimal(info.getMachineFlow()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("percentile95", info ->
info != null && info.getPercentile95() != null ?
info.getPercentile95().divide(divisor, 2, RoundingMode.HALF_UP) :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, EpsInitialTrafficData::getCreateTime, extractors, epsInitialTrafficData.getStartTime(), epsInitialTrafficData.getEndTime()
);
resultMap.put("other", result);
resultMap.put("95value", percentile95);
return resultMap;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 提取公共方法

View File

@@ -85,6 +85,14 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService
timeRange = startTime + "~" + endTime;
}
taskStatistics.setTimeRange(timeRange);
// 处理包含资源
String resources = taskStatistics.getIncludedResources();
String result = Arrays.stream(resources.split(","))
.map(msg -> msg.split(";"))
.filter(resource -> resource.length >= 4)
.map(resource -> "[" + resource[3] + "].[" + resource[2] + "]")
.collect(Collectors.joining("\n"));
taskStatistics.setIncludedResources(result);
}
return epsTaskStatisticsList;
}
@@ -437,15 +445,38 @@ public class EpsTaskStatisticsServiceImpl implements IEpsTaskStatisticsService
Long taskId = epsTaskStatistics.getId();
EpsTaskStatistics taskMsg = epsTaskStatisticsMapper.selectEpsTaskStatisticsById(taskId);
if(StringUtils.equals("1", taskMsg.getResourceType())){
EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData();
epsInitialTrafficData.setOutSpeed(epsTaskStatistics.getNeedSpeed().toString());
epsInitialTrafficData.setCreateTime(DateUtils.parseDate(epsTaskStatistics.getNeedTime()));
trafficRedisHashUtil.updateItemInHash(taskId.toString(), epsInitialTrafficData, epsTaskStatistics.getNeedTime());
trafficRedisHashUtil.updateItemPropertyInHash(taskId.toString(), epsTaskStatistics.getNeedTime(),
item -> {
if (item instanceof EpsInitialTrafficData) {
EpsInitialTrafficData trafficItem = (EpsInitialTrafficData) item;
trafficItem.setOutSpeed(epsTaskStatistics.getNeedSpeed().toString()); // 只修改outSpeed属性
}
},
Comparator.comparing(
(EpsInitialTrafficData item) -> {
String speed = item.getOutSpeed();
return speed != null ? Double.parseDouble(speed) : 0.0;
},
Comparator.reverseOrder() // 倒序
)
);
}else{
InitialSwitchInfoDetails initialSwitchInfoDetails = new InitialSwitchInfoDetails();
initialSwitchInfoDetails.setMaxSpeed(epsTaskStatistics.getNeedSpeed());
initialSwitchInfoDetails.setCreateTime(DateUtils.parseDate(epsTaskStatistics.getNeedTime()));
trafficRedisHashUtil.updateItemInHash(taskId.toString(), initialSwitchInfoDetails, epsTaskStatistics.getNeedTime());
trafficRedisHashUtil.updateItemPropertyInHash(taskId.toString(), epsTaskStatistics.getNeedTime(),
item -> {
if (item instanceof InitialSwitchInfoDetails) {
InitialSwitchInfoDetails trafficItem = (InitialSwitchInfoDetails) item;
trafficItem.setMaxSpeed(epsTaskStatistics.getNeedSpeed()); // 只修改outSpeed属性
}
},
Comparator.comparing(
(InitialSwitchInfoDetails item) ->
item.getMaxSpeed() != null ? item.getMaxSpeed() : BigDecimal.ZERO,
Comparator.reverseOrder() // 倒序
)
);
}
return 1;
}

View File

@@ -803,9 +803,11 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
joiner.add("" + businessName + "");
}
String name = joiner.toString();
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
if(resultMap != null){
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
}
} catch (Exception e){
e.printStackTrace();
}
@@ -900,9 +902,11 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
joiner.add("" + businessName + "");
}
String name = joiner.toString();
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
if(resultMap != null){
resultMap.put("name", name);
resultMap.put("timeRange", timeRange);
resultList.add(resultMap);
}
} catch (Exception e){
e.printStackTrace();
}
@@ -922,7 +926,11 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
try {
list.forEach(data -> data.setPercentile95(SpeedUtils.mbitToBit(percentile95)));
SpeedUtils.SpeedResult result = SpeedUtils.calculateWithAverageBasedUnit(list, "inSpeed", "outSpeed");
BigDecimal divisor = SpeedUtils.getDivisor(result.getRecommendedUnit());
String unit = result.getRecommendedUnit();
if(initialSwitchInfoDetails.getUnit() != null){
unit = initialSwitchInfoDetails.getUnit();
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<InitialSwitchInfoDetails, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInSpeedData", info ->
info != null && info.getInSpeed() != null ?
@@ -944,6 +952,6 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
} catch (Exception e){
e.printStackTrace();
}
return new HashMap<>();
return null;
}
}

View File

@@ -8,7 +8,7 @@ import java.util.regex.Pattern;
public class CalculateUtil {
private static final Pattern SPEED_PATTERN = Pattern.compile("(\\d+\\.?\\d*)\\s*(\\S*)");
private static final Pattern SPEED_PATTERN = Pattern.compile("^\\s*([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][-+]?\\d+)?)\\s*([a-zA-Z/]*)?\\s*$");
/**
* 单位换算
* @param speedWithUnit

View File

@@ -77,6 +77,38 @@ public class TrafficRedisHashUtil {
saveListToHash(taskId, dataList);
}
}
/**
* 修改列表中某条数据的特定属性值,并重新排序
* @param taskId 任务ID
* @param createTime 用于匹配的时间
* @param propertyUpdater 属性修改器
* @param comparator 排序比较器(用于重新排序)
*/
public <T> void updateItemPropertyInHash(String taskId, String createTime,
java.util.function.Consumer<T> propertyUpdater,
java.util.Comparator<T> comparator) {
List<T> dataList = (List<T>) getListFromHash(taskId);
if (dataList != null) {
boolean modified = false;
for (int i = 0; i < dataList.size(); i++) {
T item = dataList.get(i);
String itemCreateTime = getCreateTimeFromObject(item);
if (itemCreateTime != null && itemCreateTime.equals(createTime)) {
// 只修改匹配项的属性
propertyUpdater.accept(item);
modified = true;
break;
}
}
if (modified) {
// 重新排序(从大到小)
dataList.sort(comparator);
saveListToHash(taskId, dataList);
}
}
}
/**
* 更新Hash中的特定项使用自定义匹配器

View File

@@ -76,6 +76,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<when test="userId != null">
and user_id = #{userId}
</when>
<when test="pageRoute != null">
and page_route = #{pageRoute}
</when>
<otherwise>
and 1=0 <!-- 如果两个条件都不满足,则不更新任何记录 -->
</otherwise>

View File

@@ -72,5 +72,7 @@ public class InitialBandwidthTraffic extends BaseEntity
private String startTime;
/** 结束时间 */
private String endTime;
/** 单位 */
private String unit;
}

View File

@@ -67,6 +67,8 @@ public class InitialSwitchInfo extends BaseEntity
private String endTime;
/** 计算方式 */
private String calculationMode;
/* 单位 */
private String unit;
}

View File

@@ -228,6 +228,9 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf
List<InitialBandwidthTraffic> list = getListByTableName(initialBandwidthTraffic);
try {
String unit = SpeedUtils.calculateUnitWithStringTraffic(list, "inSpeed", "outSpeed");
if(initialBandwidthTraffic.getUnit() != null){
unit = initialBandwidthTraffic.getUnit();
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<InitialBandwidthTraffic, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInSpeedData", info ->

View File

@@ -2,6 +2,7 @@ package com.ruoyi.rocketmq.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.EchartsDataUtils;
import com.ruoyi.common.core.utils.UnitChangeUtil;
import com.ruoyi.rocketmq.domain.InitialMountPointInfo;
import com.ruoyi.rocketmq.mapper.InitialMountPointInfoMapper;
import com.ruoyi.rocketmq.service.IInitialMountPointInfoService;
@@ -133,8 +134,8 @@ public class InitialMountPointInfoServiceImpl implements IInitialMountPointInfoS
public Map<String, Object> spaceEcharts(InitialMountPointInfo initialMountPointInfo) {
List<InitialMountPointInfo> list = initialMountPointInfoMapper.selectInitialMountPointInfoList(initialMountPointInfo);
Map<String, Function<InitialMountPointInfo, ?>> extractors = new LinkedHashMap<>();
extractors.put("vfsFreeData", info -> info.getVfsFree() / 1024.0);
extractors.put("vfsTotalData", info -> info.getVfsTotal() / 1024.0);
extractors.put("vfsFreeData", info -> UnitChangeUtil.bytesToGb(info.getVfsFree()));
extractors.put("vfsTotalData", info -> UnitChangeUtil.bytesToGb(info.getVfsTotal()));
return EchartsDataUtils.buildEchartsData(list,InitialMountPointInfo::getCreateTime, extractors);
}

View File

@@ -136,7 +136,7 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService
@Override
public InitialSwitchInfo getSwitchNetDetailsMsg(InitialSwitchInfo initialSwitchInfo) {
InitialSwitchInfo info = initialSwitchInfoMapper.getSwitchNetDetailsMsg(initialSwitchInfo);
if(info.getType()!=null){
if(info != null && info.getType()!=null){
info.setType(ConvertOtherTypeUtil.getInterfaceTypeName(Integer.parseInt(info.getType())));
}
return info;
@@ -152,6 +152,9 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService
List<InitialSwitchInfo> list = initialSwitchInfoMapper.selectInitialSwitchInfoList(initialSwitchInfo);
try {
String unit = SpeedUtils.calculateUnit(list, "inSpeed", "outSpeed");
if(initialSwitchInfo.getUnit() != null){
unit = initialSwitchInfo.getUnit();
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<InitialSwitchInfo, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInSpeedData", info ->

View File

@@ -2,6 +2,7 @@ package com.ruoyi.rocketmq.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.EchartsDataUtils;
import com.ruoyi.common.core.utils.UnitChangeUtil;
import com.ruoyi.rocketmq.domain.InitialCpuInfo;
import com.ruoyi.rocketmq.domain.InitialSystemOtherCollectData;
import com.ruoyi.rocketmq.enums.ServerLogoEnum;
@@ -199,7 +200,14 @@ public class InitialSystemOtherCollectDataServiceImpl implements IInitialSystemO
List<InitialSystemOtherCollectData> list = initialSystemOtherCollectDataMapper.selectInitialSystemOtherCollectDataList(initialSystemOtherCollectData);
Map<String, Function<InitialSystemOtherCollectData, ?>> extractors = new LinkedHashMap<>();
extractors.put("memorySizeAvailableData", InitialSystemOtherCollectData::getCollectValue);
extractors.put("memorySizeAvailableData", data -> {
try {
String kbValue = data.getCollectValue();
return kbValue == null ? "0.00" : UnitChangeUtil.convertKbToGb(kbValue);
} catch (Exception e) {
return "0.00";
}
});
return EchartsDataUtils.buildEchartsData(list, InitialSystemOtherCollectData::getCreateTime, extractors);
}

View File

@@ -1,6 +1,8 @@
package com.ruoyi.rocketmq.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.MsgEnum;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
@@ -14,6 +16,7 @@ import com.ruoyi.rocketmq.service.IRmMonitorPolicyService;
import com.ruoyi.rocketmq.snmp.scheduler.MultiSwitchCollectionScheduler;
import com.ruoyi.rocketmq.utils.DataProcessUtil;
import com.ruoyi.rocketmq.utils.FieldNameConverterUtil;
import com.ruoyi.system.api.RemoteRevenueConfigService;
import com.ruoyi.system.api.domain.RmResourceRegistrationRemote;
import com.ruoyi.system.api.domain.RmSwitchManagementRemote;
import lombok.extern.slf4j.Slf4j;
@@ -53,6 +56,8 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService
private RmInitialMonitorItemMapper rmInitialMonitorItemMapper;
@Autowired
private DataProcessUtil dataProcessUtil;
@Autowired
private RemoteRevenueConfigService remoteRevenueConfigService;
private final MultiSwitchCollectionScheduler scheduler;
@@ -82,6 +87,21 @@ public class RmMonitorPolicyServiceImpl implements IRmMonitorPolicyService
@Override
public List<RmMonitorPolicy> selectRmMonitorPolicyList(RmMonitorPolicy rmMonitorPolicy)
{
if("switch".equals(rmMonitorPolicy.getResourceType()) && rmMonitorPolicy.getQueryName() != null){
// 查询交换机clientId
String queryName = rmMonitorPolicy.getQueryName();
RmSwitchManagementRemote rmSwitchManagementRemote = new RmSwitchManagementRemote();
rmSwitchManagementRemote.setSwitchName(queryName);
R<List<RmSwitchManagementRemote>> switchMsgR = remoteRevenueConfigService.getSwitchNameByClientId(rmSwitchManagementRemote, SecurityConstants.INNER);
if(switchMsgR != null && !switchMsgR.getData().isEmpty()){
StringJoiner joiner = new StringJoiner(",");
for (RmSwitchManagementRemote switchMsg : switchMsgR.getData()) {
joiner.add(switchMsg.getClientId());
}
rmMonitorPolicy.setQueryName(joiner.toString());
}
}
List<RmMonitorPolicy> list = rmMonitorPolicyMapper.selectRmMonitorPolicyList(rmMonitorPolicy);
for (RmMonitorPolicy monitorPolicy : list) {
// 资源组名称

View File

@@ -39,8 +39,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="priority != null "> and priority = #{priority}</if>
<if test="queryName != null and queryName != ''">
and (policy_name like concat('%', #{queryName}, '%')
or template_id in (select id from rm_monitor_template where template_name like concat('%', #{queryName}, '%'))
or resource_group_id in (select id from rm_resource_group where group_name like concat('%', #{queryName}, '%'))
or
<foreach item="item" index="index" collection="queryName.split(',')" open="(" close=")" separator="or">
FIND_IN_SET(#{item}, REPLACE(deploy_device, '\n', ',')) > 0
</foreach>
)
</if>
</where>