95值计算方式新增1024
This commit is contained in:
@@ -3,6 +3,7 @@ package com.ruoyi.system.api;
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
import com.ruoyi.common.core.constant.ServiceNameConstants;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.api.domain.*;
|
||||
import com.ruoyi.system.api.factory.RemoteRevenueConfigFallbackFactory;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
@@ -70,5 +71,15 @@ public interface RemoteRevenueConfigService
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/registration/getRegistrationByIds")
|
||||
public R<List<RmResourceRegistrationRemote>> getRegistrationByIds(String[] ids, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
public R<List<RmResourceRegistrationRemote>> getRegistrationByIds(@RequestBody String[] ids, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
/**
|
||||
* 获取资源注册列表
|
||||
* @param rmResourceRegistrationRemote
|
||||
* @param source
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/registration/list")
|
||||
public R<TableDataInfo> getRegistrationList(@RequestBody RmResourceRegistrationRemote rmResourceRegistrationRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.system.api.factory;
|
||||
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.web.page.TableDataInfo;
|
||||
import com.ruoyi.system.api.RemoteRevenueConfigService;
|
||||
import com.ruoyi.system.api.domain.*;
|
||||
import org.slf4j.Logger;
|
||||
@@ -55,6 +56,11 @@ public class RemoteRevenueConfigFallbackFactory implements FallbackFactory<Remot
|
||||
public R<List<RmResourceRegistrationRemote>> getRegistrationByIds(String[] ids, String source) {
|
||||
return R.fail("获取资源注册信息失败:" + throwable.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<TableDataInfo> getRegistrationList(RmResourceRegistrationRemote rmResourceRegistrationRemote, String source) {
|
||||
return R.fail("获取资源注册列表信息失败" + throwable.getMessage());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -47,7 +48,7 @@ public class TableScheduleConfig {
|
||||
epsInitialTrafficDataService.createNextMonthTables();
|
||||
}
|
||||
|
||||
// 每天12点执行 计算95带宽值/日
|
||||
// 每天0点执行 计算95带宽值/日
|
||||
@Scheduled(cron = "0 4 0 * * ?", zone = "Asia/Shanghai")
|
||||
public void calculate95BandwidthDaily() {
|
||||
// 获取昨天的日期范围(北京时间)
|
||||
@@ -59,10 +60,17 @@ public class TableScheduleConfig {
|
||||
// 95带宽值/日
|
||||
EpsInitialTrafficData queryParam = new EpsInitialTrafficData();
|
||||
queryParam.setDayOrMonth(dayOrMonth);
|
||||
epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, dailyStartTime, dailyEndTime);
|
||||
InitialSwitchInfoDetails initialSwitchInfoDetails = new InitialSwitchInfoDetails();
|
||||
initialSwitchInfoDetails.setDayOrMonth(dayOrMonth);
|
||||
initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(initialSwitchInfoDetails, dailyStartTime, dailyEndTime);
|
||||
// 顺序执行链
|
||||
CompletableFuture.runAsync(() -> executeWithLog("业务带宽1000",
|
||||
() -> epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, dailyStartTime, dailyEndTime, "1000")))
|
||||
.thenRun(() -> executeWithLog("业务带宽1024",
|
||||
() -> epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, dailyStartTime, dailyEndTime, "1024")))
|
||||
.thenRun(() -> executeWithLog("交换机带宽1000",
|
||||
() -> initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(initialSwitchInfoDetails, dailyStartTime, dailyEndTime, "1000")))
|
||||
.thenRun(() -> executeWithLog("交换机带宽1024",
|
||||
() -> initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(initialSwitchInfoDetails, dailyStartTime, dailyEndTime, "1024")));
|
||||
}
|
||||
|
||||
// 每月1号0点执行 计算95带宽值/月
|
||||
@@ -76,38 +84,42 @@ public class TableScheduleConfig {
|
||||
String monthlyStartTime = firstDayOfMonth.atStartOfDay().format(TIME_FORMAT);
|
||||
String monthlyEndTime = lastDayOfMonth.atTime(23, 59, 59).format(TIME_FORMAT);
|
||||
|
||||
// 顺序执行各任务,间隔10分钟
|
||||
executeWithDelay(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 0);
|
||||
executeWithDelay(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10);
|
||||
executeWithDelay(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10);
|
||||
executeWithDelay(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime), 10);
|
||||
// 链式顺序执行(无额外日志封装)
|
||||
CompletableFuture.runAsync(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000"))
|
||||
.thenRun(() -> calculateServerMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024"))
|
||||
.thenRun(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1000"))
|
||||
.thenRun(() -> calculateSwitchMonthlyBandwidth(monthlyStartTime, monthlyEndTime, "1024"))
|
||||
.thenRun(() -> calculateServerAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime))
|
||||
.thenRun(() -> calculateSwitchAvgMonthlyBandwidth(monthlyStartTime, monthlyEndTime))
|
||||
.exceptionally(e -> {
|
||||
log.error("月度带宽计算链执行异常", e); // 仅保留最终异常捕获
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 延迟执行任务
|
||||
* 执行任务日志
|
||||
*/
|
||||
private void executeWithDelay(Runnable task, int delayMinutes) {
|
||||
private void executeWithLog(String taskName, Runnable task) {
|
||||
log.info("开始执行: {}", taskName);
|
||||
try {
|
||||
if (delayMinutes > 0) {
|
||||
Thread.sleep(delayMinutes * 60 * 1000);
|
||||
}
|
||||
task.run();
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
log.error("任务执行被中断", e);
|
||||
} catch (Exception e) {
|
||||
log.error("{} 执行失败", taskName, e);
|
||||
throw e; // 可选:是否终止后续任务
|
||||
}
|
||||
log.info("{} 执行完成", taskName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算服务器月95带宽值
|
||||
*/
|
||||
private void calculateServerMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) {
|
||||
private void calculateServerMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) {
|
||||
log.info("开始计算服务器月95带宽值...");
|
||||
try {
|
||||
String dayOrMonth = "2";
|
||||
EpsInitialTrafficData queryParam = new EpsInitialTrafficData();
|
||||
queryParam.setDayOrMonth(dayOrMonth);
|
||||
epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime);
|
||||
epsInitialTrafficDataService.calculateBusiness95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime, calculationMode);
|
||||
log.info("服务器月95带宽值计算完成");
|
||||
} catch (Exception e) {
|
||||
log.error("计算服务器月95带宽值失败", e);
|
||||
@@ -117,13 +129,13 @@ public class TableScheduleConfig {
|
||||
/**
|
||||
* 计算交换机月95带宽值
|
||||
*/
|
||||
private void calculateSwitchMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime) {
|
||||
private void calculateSwitchMonthlyBandwidth(String monthlyStartTime, String monthlyEndTime, String calculationMode) {
|
||||
log.info("开始计算交换机月95带宽值...");
|
||||
try {
|
||||
String dayOrMonth = "2";
|
||||
InitialSwitchInfoDetails queryParam = new InitialSwitchInfoDetails();
|
||||
queryParam.setDayOrMonth(dayOrMonth);
|
||||
initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime);
|
||||
initialSwitchInfoDetailsService.calculateSwitch95BandwidthDaily(queryParam, monthlyStartTime, monthlyEndTime, calculationMode);
|
||||
log.info("交换机月95带宽值计算完成");
|
||||
} catch (Exception e) {
|
||||
log.error("计算交换机月95带宽值失败", e);
|
||||
|
||||
@@ -145,10 +145,10 @@ public class EpsNodeBandwidthController extends BaseController
|
||||
String dailyEndTime = timeRange.getEnd();
|
||||
if("1".equals(epsNodeBandwidth.getResourceType())){
|
||||
// 重新计算服务器95带宽值
|
||||
epsInitialTrafficDataService.recalculateServer95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime);
|
||||
epsInitialTrafficDataService.recalculateServer95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime, epsNodeBandwidth.getCalculationMode());
|
||||
}else{
|
||||
// 重新计算交换机95带宽值
|
||||
initialSwitchInfoDetailsService.recalculateSwitch95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime);
|
||||
initialSwitchInfoDetailsService.recalculateSwitch95Bandwidth(epsNodeBandwidth, dailyStartTime, dailyEndTime, epsNodeBandwidth.getCalculationMode());
|
||||
}
|
||||
return success();
|
||||
}
|
||||
|
||||
@@ -136,5 +136,7 @@ public class EpsNodeBandwidth extends BaseEntity
|
||||
private List<String> nodeNames;
|
||||
|
||||
private List<String> switchNames;
|
||||
/** 计算方式 */
|
||||
private String calculationMode;
|
||||
|
||||
}
|
||||
|
||||
@@ -56,5 +56,9 @@ public class RmResourceGroup extends BaseEntity
|
||||
|
||||
/** 修改人名称 */
|
||||
private String updaterName;
|
||||
/** 监控项 */
|
||||
private String monitorItems;
|
||||
/** 自动发现项 */
|
||||
private String discoveryRules;
|
||||
|
||||
}
|
||||
|
||||
@@ -118,5 +118,9 @@ public class RmResourceRegistration extends BaseEntity
|
||||
|
||||
/** 修改人名称 */
|
||||
private String updaterName;
|
||||
/** 监控项 */
|
||||
private String monitorItems;
|
||||
/** 自动发现项 */
|
||||
private String discoveryRules;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package com.ruoyi.system.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.RmResourceGroup;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资源分组Mapper接口
|
||||
*
|
||||
@@ -58,4 +59,11 @@ public interface RmResourceGroupMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRmResourceGroupByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 查询资源分组信息和监控项
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
public RmResourceGroup selectMonitorMsgAndGroupMsg(Long id);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.ruoyi.system.domain.EpsNodeBandwidth;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* EPS表创建服务接口
|
||||
@@ -46,7 +47,7 @@ public interface EpsInitialTrafficDataService {
|
||||
* @param queryParam 查询参数实体
|
||||
* @return 流量数据列表
|
||||
*/
|
||||
void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime);
|
||||
void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime, String calculationMode);
|
||||
|
||||
/**
|
||||
* 重新计算服务器95带宽值
|
||||
@@ -54,8 +55,13 @@ public interface EpsInitialTrafficDataService {
|
||||
* @param dailyStartTime 开始时间
|
||||
* @param dailyEndTime 结束时间
|
||||
*/
|
||||
void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime);
|
||||
void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode);
|
||||
|
||||
/**
|
||||
* 计算服务器流量使用率(处理带单位的数据)
|
||||
* @return 包含总带宽、发送带宽和发送占比的Map
|
||||
*/
|
||||
Map<String, Object> trafficRateByServer();
|
||||
/**
|
||||
* 当前在线服务器发送带宽总流量
|
||||
* @return
|
||||
|
||||
@@ -73,7 +73,7 @@ public interface IInitialSwitchInfoDetailsService
|
||||
* @param queryParam 查询参数实体
|
||||
* @return 流量数据列表
|
||||
*/
|
||||
void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime);
|
||||
void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime, String calculationMode);
|
||||
|
||||
/**
|
||||
* 重新计算交换机95带宽值
|
||||
@@ -81,7 +81,7 @@ public interface IInitialSwitchInfoDetailsService
|
||||
* @param dailyStartTime 开始时间
|
||||
* @param dailyEndTime 结束时间
|
||||
*/
|
||||
void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime);
|
||||
void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode);
|
||||
|
||||
/**
|
||||
* 获取交换机相关数据
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.ruoyi.system.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.RmResourceGroup;
|
||||
import com.ruoyi.system.domain.RmResourceRegistration;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资源分组Service接口
|
||||
@@ -58,4 +60,6 @@ public interface IRmResourceGroupService
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRmResourceGroupById(Long id);
|
||||
|
||||
List<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Isolation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
@@ -215,13 +216,14 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
* @param queryParam
|
||||
*/
|
||||
@Override
|
||||
public void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime) {
|
||||
public void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam,
|
||||
String dailyStartTime, String dailyEndTime, String calculationMode) {
|
||||
// 获取所有设备SN列表
|
||||
List<AllInterfaceName> snList = allInterfaceNameMapper.getAllDeviceSn(new AllInterfaceName());
|
||||
// 遍历处理每个设备
|
||||
snList.forEach(interfaceName -> {
|
||||
queryParam.setServiceSn(interfaceName.getDeviceSn());
|
||||
processDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
processDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -232,7 +234,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
* @param dailyEndTime 结束时间
|
||||
*/
|
||||
@Override
|
||||
public void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime) {
|
||||
public void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode ) {
|
||||
EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData();
|
||||
epsInitialTrafficData.setStartTime(dailyStartTime);
|
||||
epsInitialTrafficData.setEndTime(dailyEndTime);
|
||||
@@ -244,7 +246,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
if(!dataList.isEmpty()){
|
||||
// 1. 提取并转换带宽值
|
||||
List<BigDecimal> speedsInMbps = dataList.stream()
|
||||
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed()))
|
||||
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode))
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@@ -255,16 +257,97 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
EpsInitialTrafficData initialTrafficData = dataList.get(0);
|
||||
initialTrafficData.setResourceType("1");
|
||||
initialTrafficData.setBandwidthType(epsNodeBandwidth.getBandwidthType());
|
||||
saveBandwidthResult(initialTrafficData, percentile95, dailyStartTime);
|
||||
saveBandwidthResult(initialTrafficData, percentile95, dailyStartTime, calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算服务器流量使用率(处理带单位的数据)
|
||||
* @return 包含总带宽、发送带宽和发送占比的Map
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> trafficRateByServer() {
|
||||
Map<String, Object> resultMap = new HashMap<>(3);
|
||||
|
||||
// 初始化默认值
|
||||
resultMap.put("outSpeedTotal", BigDecimal.ZERO);
|
||||
resultMap.put("speedTotal", BigDecimal.ZERO);
|
||||
resultMap.put("outSpeedRate", BigDecimal.ZERO);
|
||||
|
||||
// 获取近5分钟的流量数据
|
||||
List<EpsInitialTrafficData> dataList = getTrafficData();
|
||||
if (CollectionUtils.isEmpty(dataList)) {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
BigDecimal total = BigDecimal.ZERO;
|
||||
BigDecimal outTotal = BigDecimal.ZERO;
|
||||
boolean hasValidData = false;
|
||||
|
||||
// 计算总带宽和发送带宽
|
||||
for (EpsInitialTrafficData data : dataList) {
|
||||
// 处理发送带宽(假设outSpeed已经是标准单位)
|
||||
try {
|
||||
BigDecimal outSpeed = CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), "1000");
|
||||
outTotal = outTotal.add(outSpeed);
|
||||
} catch (Exception e) {
|
||||
log.warn("Invalid outSpeed value: {}", data.getOutSpeed());
|
||||
continue;
|
||||
}
|
||||
|
||||
// 处理总带宽(带单位的值如"10000Mb/s")
|
||||
String speedWithUnit = data.getSpeed();
|
||||
if (speedWithUnit != null && !"Unknown!".equalsIgnoreCase(speedWithUnit)) {
|
||||
try {
|
||||
// 移除单位部分(如"Mb/s")
|
||||
String numericPart = speedWithUnit.replaceAll("[^0-9.]", "");
|
||||
BigDecimal speedValue = new BigDecimal(numericPart);
|
||||
total = total.add(speedValue);
|
||||
hasValidData = true;
|
||||
} catch (NumberFormatException e) {
|
||||
log.warn("Invalid speed value format: {}", speedWithUnit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 存储计算结果
|
||||
resultMap.put("outSpeedTotal", outTotal.setScale(2, RoundingMode.HALF_UP));
|
||||
resultMap.put("speedTotal", total.setScale(2, RoundingMode.HALF_UP));
|
||||
|
||||
// 计算发送带宽占比(只有存在有效数据时才计算)
|
||||
if (hasValidData && total.compareTo(BigDecimal.ZERO) != 0) {
|
||||
BigDecimal outSpeedRate = outTotal.divide(total, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
|
||||
resultMap.put("outSpeedRate", outSpeedRate);
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前在线服务器发送带宽总流量
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public BigDecimal sumTrafficByServer() {
|
||||
// 总带宽
|
||||
BigDecimal total = BigDecimal.ZERO;
|
||||
// 近5分钟的带宽明细
|
||||
List<EpsInitialTrafficData> dataList = getTrafficData();
|
||||
if(!dataList.isEmpty()){
|
||||
for (EpsInitialTrafficData initialTrafficData : dataList) {
|
||||
// 服务器发送带宽流量
|
||||
BigDecimal outSpeed = CalculateUtil.parseSpeedToMbps(initialTrafficData.getOutSpeed(), "1000");
|
||||
total = total.add(outSpeed);
|
||||
}
|
||||
}
|
||||
return total.setScale(0, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取公共方法
|
||||
* @return
|
||||
*/
|
||||
private List<EpsInitialTrafficData> getTrafficData(){
|
||||
// 获取当前时间
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// 结束时间
|
||||
@@ -276,19 +359,11 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
// 格式化为字符串
|
||||
String dailyStartTime = startTime.format(formatter);
|
||||
String dailyEndTime = endTime.format(formatter);
|
||||
BigDecimal total = BigDecimal.ZERO;
|
||||
EpsInitialTrafficData epsInitialTrafficData = new EpsInitialTrafficData();
|
||||
epsInitialTrafficData.setStartTime(dailyStartTime);
|
||||
epsInitialTrafficData.setEndTime(dailyEndTime);
|
||||
List<EpsInitialTrafficData> dataList = query(epsInitialTrafficData);
|
||||
if(!dataList.isEmpty()){
|
||||
for (EpsInitialTrafficData initialTrafficData : dataList) {
|
||||
// 服务器发送带宽流量
|
||||
BigDecimal outSpeed = CalculateUtil.parseSpeedToMbps(initialTrafficData.getOutSpeed());
|
||||
total = total.add(outSpeed);
|
||||
}
|
||||
}
|
||||
return total.setScale(0, RoundingMode.HALF_UP);
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -296,7 +371,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
*/
|
||||
private void processDeviceBandwidth(EpsInitialTrafficData queryParam,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
// 1. 检查设备是否有业务变更
|
||||
EpsServerRevenueConfig revenueConfig = new EpsServerRevenueConfig();
|
||||
revenueConfig.setHardwareSn(queryParam.getServiceSn());
|
||||
@@ -305,9 +380,9 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
|
||||
// 2. 根据业务变更情况选择计算方式
|
||||
if (hasTrafficMethodChanged(changedList)) {
|
||||
calculateChangedDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
calculateChangedDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
} else {
|
||||
calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -323,7 +398,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
*/
|
||||
private void calculateChangedDeviceBandwidth(EpsInitialTrafficData queryParam,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
// 1. 获取业务变更记录(按时间降序)
|
||||
EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord();
|
||||
changeQuery.setHardwareSn(queryParam.getServiceSn());
|
||||
@@ -337,9 +412,9 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime()));
|
||||
|
||||
// 3. 计算各时间段95值
|
||||
calculateTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime);
|
||||
calculateTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime, calculationMode);
|
||||
}else{
|
||||
calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
calculateNormalDeviceBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -347,19 +422,19 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
*/
|
||||
private void calculateNormalDeviceBandwidth(EpsInitialTrafficData queryParam,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
queryParam.setStartTime(dailyStartTime);
|
||||
queryParam.setEndTime(dailyEndTime);
|
||||
List<EpsInitialTrafficData> dataList = query(queryParam);
|
||||
|
||||
if (!dataList.isEmpty()) {
|
||||
calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth());
|
||||
calculateAndSave95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 计算并保存95带宽值
|
||||
*/
|
||||
private void calculateAndSave95Bandwidth(List<EpsInitialTrafficData> dataList, String dateTime, String dayOrMonth) {
|
||||
private void calculateAndSave95Bandwidth(List<EpsInitialTrafficData> dataList, String dateTime, String dayOrMonth, String calculationMode) {
|
||||
boolean eff = false;
|
||||
if(!dataList.isEmpty()){
|
||||
if(dataList.size()<288){
|
||||
@@ -367,7 +442,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
}
|
||||
// 1. 提取并转换带宽值
|
||||
List<BigDecimal> speedsInMbps = dataList.stream()
|
||||
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed()))
|
||||
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode))
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@@ -396,7 +471,7 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
}
|
||||
}
|
||||
}
|
||||
saveBandwidthResult(epsInitialTrafficData, percentile95, dateTime);
|
||||
saveBandwidthResult(epsInitialTrafficData, percentile95, dateTime, calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -406,32 +481,32 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
private void calculateTimeSegments95(EpsInitialTrafficData queryParam,
|
||||
List<EpsMethodChangeRecord> records,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
// 1. 处理变更时间段(从最新到最早)
|
||||
String endTime = records.get(0).getCreateTime() + "";
|
||||
for (int i = 1; i < records.size(); i++) {
|
||||
String startTime = records.get(i).getCreateTime() + "";
|
||||
calculateSegment95(queryParam, startTime, endTime);
|
||||
calculateSegment95(queryParam, startTime, endTime, calculationMode);
|
||||
endTime = startTime; // 移动时间窗口
|
||||
}
|
||||
|
||||
// 2. 处理最早变更前的时间段(昨天00:00:00 ~ 最早变更时间)
|
||||
String earliestChangeTime = records.get(records.size()-1).getCreateTime() + "";
|
||||
calculateSegment95(queryParam, dailyStartTime, earliestChangeTime);
|
||||
calculateSegment95(queryParam, dailyStartTime, earliestChangeTime, calculationMode);
|
||||
|
||||
// 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59)
|
||||
calculateSegment95(queryParam, endTime, dailyEndTime);
|
||||
calculateSegment95(queryParam, endTime, dailyEndTime, calculationMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算单个时间段的95带宽值
|
||||
*/
|
||||
private void calculateSegment95(EpsInitialTrafficData queryParam, String startTime, String endTime) {
|
||||
private void calculateSegment95(EpsInitialTrafficData queryParam, String startTime, String endTime, String calculationMode) {
|
||||
queryParam.setStartTime(startTime);
|
||||
queryParam.setEndTime(endTime);
|
||||
List<EpsInitialTrafficData> dataList = query(queryParam);
|
||||
if (!dataList.isEmpty()) {
|
||||
calculate95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth());
|
||||
calculate95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth(), calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -439,10 +514,10 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
* 计算日95带宽值
|
||||
* @param dataList
|
||||
*/
|
||||
private void calculate95BandwidthDaily(List<EpsInitialTrafficData> dataList, String startTime, String dayOrMonth){
|
||||
private void calculate95BandwidthDaily(List<EpsInitialTrafficData> dataList, String startTime, String dayOrMonth, String calculationMode){
|
||||
// 1. 提取 outSpeed 并转换为 Mbps
|
||||
List<BigDecimal> speedsInMbps = dataList.stream()
|
||||
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed()))
|
||||
.map(data -> CalculateUtil.parseSpeedToMbps(data.getOutSpeed(), calculationMode))
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@@ -482,16 +557,17 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
}
|
||||
}
|
||||
}
|
||||
saveBandwidthResult(epsInitialTrafficData, dailyResult, startTime);
|
||||
saveBandwidthResult(epsInitialTrafficData, dailyResult, startTime, calculationMode);
|
||||
}
|
||||
/**
|
||||
* 保存带宽结果
|
||||
*/
|
||||
private void saveBandwidthResult(EpsInitialTrafficData data,
|
||||
BigDecimal result,
|
||||
String dateTime) {
|
||||
String dateTime, String calculationMode) {
|
||||
EpsNodeBandwidth bandwidth = new EpsNodeBandwidth();
|
||||
bandwidth.setHardwareSn(data.getServiceSn());
|
||||
bandwidth.setCalculationMode(calculationMode);
|
||||
bandwidth.setNodeName(data.getNodeName());
|
||||
bandwidth.setBusinessId(data.getBusinessId());
|
||||
bandwidth.setBusinessName(data.getBusinessName());
|
||||
|
||||
@@ -306,7 +306,8 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
!Objects.equals(oldRecord.getSwitchIp(), newRecord.getSwitchIp());
|
||||
}
|
||||
|
||||
public void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime, String dailyEndTime) {
|
||||
public void calculateSwitch95BandwidthDaily(InitialSwitchInfoDetails queryParam, String dailyStartTime,
|
||||
String dailyEndTime, String calculationMode) {
|
||||
// 查询所有的交换机SN列表
|
||||
AllInterfaceName allInterfaceName = new AllInterfaceName();
|
||||
List<AllInterfaceName> switchSnList = allInterfaceNameMapper.getAllSwitchSn(allInterfaceName);
|
||||
@@ -315,7 +316,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
switchSnList.forEach(interfaceName -> {
|
||||
queryParam.setSwitchSn(interfaceName.getSwitchSn());
|
||||
queryParam.setSwitchIp(interfaceName.getSwitchIp());
|
||||
processSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
processSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -326,7 +327,8 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
* @param dailyEndTime 结束时间
|
||||
*/
|
||||
@Override
|
||||
public void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime) {
|
||||
public void recalculateSwitch95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime,
|
||||
String dailyEndTime, String calculationMode) {
|
||||
InitialSwitchInfoDetails switchInfoDetails = new InitialSwitchInfoDetails();
|
||||
switchInfoDetails.setStartTime(dailyStartTime);
|
||||
switchInfoDetails.setEndTime(dailyEndTime);
|
||||
@@ -351,7 +353,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
if (speed.matches("^\\d+(\\.\\d+)?$")) {
|
||||
speed += " B/S";
|
||||
}
|
||||
return CalculateUtil.parseSpeedToMbps(speed);
|
||||
return CalculateUtil.parseSpeedToMbps(speed, calculationMode);
|
||||
})
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
@@ -363,7 +365,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
InitialSwitchInfoDetails switchInfo = dataList.get(0);
|
||||
switchInfo.setResourceType("2");
|
||||
switchInfo.setBandwidthType(epsNodeBandwidth.getBandwidthType());
|
||||
saveSwitchBandwidthResult(switchInfo, percentile95, dailyStartTime);
|
||||
saveSwitchBandwidthResult(switchInfo, percentile95, dailyStartTime, calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,7 +420,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
if (speed.matches("^\\d+(\\.\\d+)?$")) {
|
||||
speed += " B/S";
|
||||
}
|
||||
BigDecimal inSpeed = CalculateUtil.parseSpeedToMbps(speed);
|
||||
BigDecimal inSpeed = CalculateUtil.parseSpeedToMbps(speed, "1000");
|
||||
total = total.add(inSpeed);
|
||||
}
|
||||
}
|
||||
@@ -431,7 +433,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
*/
|
||||
private void processSwitchBandwidth(InitialSwitchInfoDetails queryParam,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
// 根据交换机sn查询连接的服务器sn
|
||||
RmEpsTopologyManagement management = new RmEpsTopologyManagement();
|
||||
management.setSwitchSn(queryParam.getSwitchSn());
|
||||
@@ -449,13 +451,13 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
.selectEpsServerRevenueConfigList(revenueConfig);
|
||||
// 根据业务变更情况选择计算方式
|
||||
if (hasTrafficMethodChanged(changedList)) {
|
||||
calculateChangedSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
calculateChangedSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
} else {
|
||||
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
}
|
||||
}
|
||||
if("2".equals(rmEpsTopologyManagement.getConnectedDeviceType())){
|
||||
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -474,7 +476,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
*/
|
||||
private void calculateChangedSwitchBandwidth(InitialSwitchInfoDetails queryParam,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
// 获取业务变更记录(按时间降序)
|
||||
EpsMethodChangeRecord changeQuery = new EpsMethodChangeRecord();
|
||||
changeQuery.setHardwareSn(queryParam.getServerSn());
|
||||
@@ -488,9 +490,9 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
records.sort((r1, r2) -> r2.getCreateTime().compareTo(r1.getCreateTime()));
|
||||
|
||||
// 计算各时间段95值
|
||||
calculateSwitchTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime);
|
||||
calculateSwitchTimeSegments95(queryParam, records, dailyStartTime, dailyEndTime, calculationMode);
|
||||
}else {
|
||||
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime);
|
||||
calculateNormalSwitchBandwidth(queryParam, dailyStartTime, dailyEndTime, calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -499,21 +501,22 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
*/
|
||||
private void calculateNormalSwitchBandwidth(InitialSwitchInfoDetails queryParam,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
queryParam.setStartTime(dailyStartTime);
|
||||
queryParam.setEndTime(dailyEndTime);
|
||||
List<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper
|
||||
.selectInitialSwitchInfoDetailsList(queryParam);
|
||||
|
||||
if (!dataList.isEmpty()) {
|
||||
calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth());
|
||||
calculateAndSaveSwitch95Bandwidth(dataList, dailyStartTime, queryParam.getDayOrMonth(), calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算并保存交换机95带宽值
|
||||
*/
|
||||
private void calculateAndSaveSwitch95Bandwidth(List<InitialSwitchInfoDetails> dataList, String dateTime, String dayOrMonth) {
|
||||
private void calculateAndSaveSwitch95Bandwidth(List<InitialSwitchInfoDetails> dataList, String dateTime,
|
||||
String dayOrMonth, String calculationMode) {
|
||||
boolean eff = false;
|
||||
if(!dataList.isEmpty()){
|
||||
if(dataList.size()<288){
|
||||
@@ -530,7 +533,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
if (speed.matches("^\\d+(\\.\\d+)?$")) {
|
||||
speed += " B/S";
|
||||
}
|
||||
return CalculateUtil.parseSpeedToMbps(speed);
|
||||
return CalculateUtil.parseSpeedToMbps(speed, calculationMode);
|
||||
})
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
@@ -555,7 +558,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
switchInfo.setBandwidthType("2");
|
||||
}
|
||||
}
|
||||
saveSwitchBandwidthResult(switchInfo, percentile95, dateTime);
|
||||
saveSwitchBandwidthResult(switchInfo, percentile95, dateTime, calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -565,40 +568,41 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
private void calculateSwitchTimeSegments95(InitialSwitchInfoDetails queryParam,
|
||||
List<EpsMethodChangeRecord> records,
|
||||
String dailyStartTime,
|
||||
String dailyEndTime) {
|
||||
String dailyEndTime, String calculationMode) {
|
||||
// 1. 处理变更时间段(从最新到最早)
|
||||
String endTime = records.get(0).getCreateTime() + "";
|
||||
for (int i = 1; i < records.size(); i++) {
|
||||
String startTime = records.get(i).getCreateTime() + "";
|
||||
calculateSwitchSegment95(queryParam, startTime, endTime);
|
||||
calculateSwitchSegment95(queryParam, startTime, endTime, calculationMode);
|
||||
endTime = startTime; // 移动时间窗口
|
||||
}
|
||||
|
||||
// 2. 处理最早变更前的时间段(昨天00:00:00 ~ 最早变更时间)
|
||||
String earliestChangeTime = records.get(records.size()-1).getCreateTime() + "";
|
||||
calculateSwitchSegment95(queryParam, dailyStartTime, earliestChangeTime);
|
||||
calculateSwitchSegment95(queryParam, dailyStartTime, earliestChangeTime, calculationMode);
|
||||
|
||||
// 3. 处理最后变更后的时间段(最新变更时间 ~ 昨天23:59:59)
|
||||
calculateSwitchSegment95(queryParam, endTime, dailyEndTime);
|
||||
calculateSwitchSegment95(queryParam, endTime, dailyEndTime, calculationMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算交换机单个时间段的95带宽值
|
||||
*/
|
||||
private void calculateSwitchSegment95(InitialSwitchInfoDetails queryParam, String startTime, String endTime) {
|
||||
private void calculateSwitchSegment95(InitialSwitchInfoDetails queryParam, String startTime, String endTime, String calculationMode) {
|
||||
queryParam.setStartTime(startTime);
|
||||
queryParam.setEndTime(endTime);
|
||||
List<InitialSwitchInfoDetails> dataList = initialSwitchInfoDetailsMapper
|
||||
.selectInitialSwitchInfoDetailsList(queryParam);
|
||||
if (!dataList.isEmpty()) {
|
||||
calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth());
|
||||
calculateSwitch95BandwidthDaily(dataList, startTime, queryParam.getDayOrMonth(), calculationMode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算交换机日95带宽值
|
||||
*/
|
||||
private void calculateSwitch95BandwidthDaily(List<InitialSwitchInfoDetails> dataList, String startTime, String dayOrMonth) {
|
||||
private void calculateSwitch95BandwidthDaily(List<InitialSwitchInfoDetails> dataList,
|
||||
String startTime, String dayOrMonth, String calculationMode) {
|
||||
// 1. 提取并转换带宽值
|
||||
List<BigDecimal> speedsInMbps = dataList.stream()
|
||||
.map(data -> {
|
||||
@@ -609,7 +613,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
if (speed.matches("^\\d+(\\.\\d+)?$")) {
|
||||
speed += " B/S";
|
||||
}
|
||||
return CalculateUtil.parseSpeedToMbps(speed);
|
||||
return CalculateUtil.parseSpeedToMbps(speed, calculationMode);
|
||||
})
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
@@ -636,7 +640,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
switchInfo.setBandwidthType("2");
|
||||
}
|
||||
}
|
||||
saveSwitchBandwidthResult(switchInfo, dailyResult, startTime);
|
||||
saveSwitchBandwidthResult(switchInfo, dailyResult, startTime, calculationMode);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -644,11 +648,12 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe
|
||||
*/
|
||||
private void saveSwitchBandwidthResult(InitialSwitchInfoDetails data,
|
||||
BigDecimal result,
|
||||
String dateTime) {
|
||||
String dateTime, String calculationMode) {
|
||||
EpsNodeBandwidth bandwidth = new EpsNodeBandwidth();
|
||||
bandwidth.setBusinessName(data.getBusinessName());
|
||||
bandwidth.setBusinessId(data.getBusinessCode());
|
||||
bandwidth.setHardwareSn(data.getServerSn());
|
||||
bandwidth.setCalculationMode(calculationMode);
|
||||
bandwidth.setSwitchSn(data.getSwitchSn());
|
||||
bandwidth.setNodeName(data.getServerName());
|
||||
bandwidth.setUplinkSwitch(data.getSwitchName());
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
package com.ruoyi.system.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.common.core.utils.DateUtils;
|
||||
import com.ruoyi.system.domain.RmResourceGroup;
|
||||
import com.ruoyi.system.domain.RmResourceRegistration;
|
||||
import com.ruoyi.system.mapper.RmResourceGroupMapper;
|
||||
import com.ruoyi.system.mapper.RmResourceRegistrationMapper;
|
||||
import com.ruoyi.system.service.IRmResourceGroupService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.system.mapper.RmResourceGroupMapper;
|
||||
import com.ruoyi.system.domain.RmResourceGroup;
|
||||
import com.ruoyi.system.service.IRmResourceGroupService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资源分组Service业务层处理
|
||||
@@ -19,6 +22,8 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService
|
||||
{
|
||||
@Autowired
|
||||
private RmResourceGroupMapper rmResourceGroupMapper;
|
||||
@Autowired
|
||||
private RmResourceRegistrationMapper rmResourceRegistrationMapper;
|
||||
|
||||
/**
|
||||
* 查询资源分组
|
||||
@@ -93,4 +98,30 @@ public class RmResourceGroupServiceImpl implements IRmResourceGroupService
|
||||
{
|
||||
return rmResourceGroupMapper.deleteRmResourceGroupById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RmResourceRegistration> getRegisterList(RmResourceGroup rmResourceGroup) {
|
||||
if(rmResourceGroup.getId() == null){
|
||||
RmResourceRegistration queryParam = new RmResourceRegistration();
|
||||
List<RmResourceRegistration> rmResourceRegistrationList = rmResourceRegistrationMapper.selectRmResourceRegistrationList(queryParam);
|
||||
for (RmResourceRegistration rmResourceRegistration : rmResourceRegistrationList) {
|
||||
RmResourceGroup item = rmResourceGroupMapper.selectMonitorMsgAndGroupMsg(rmResourceRegistration.getId());
|
||||
rmResourceRegistration.setMonitorItems(item.getMonitorItems());
|
||||
rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules());
|
||||
}
|
||||
return rmResourceRegistrationList;
|
||||
}else{
|
||||
RmResourceGroup group = rmResourceGroupMapper.selectRmResourceGroupById(rmResourceGroup.getId());
|
||||
String ids = group.getIncludedDevicesId();
|
||||
String[] resourceIds = ids.split(",");
|
||||
// 拿到资源信息
|
||||
List<RmResourceRegistration> rmResourceRegistrationList = rmResourceRegistrationMapper.getRegistrationByIds(resourceIds);
|
||||
for (RmResourceRegistration rmResourceRegistration : rmResourceRegistrationList) {
|
||||
RmResourceGroup item = rmResourceGroupMapper.selectMonitorMsgAndGroupMsg(rmResourceRegistration.getId());
|
||||
rmResourceRegistration.setMonitorItems(item.getMonitorItems());
|
||||
rmResourceRegistration.setDiscoveryRules(item.getDiscoveryRules());
|
||||
}
|
||||
return rmResourceRegistrationList;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public class CalculateUtil {
|
||||
* @param speedWithUnit
|
||||
* @return
|
||||
*/
|
||||
public static BigDecimal parseSpeedToMbps(String speedWithUnit) {
|
||||
public static BigDecimal parseSpeedToMbps(String speedWithUnit, String mode) {
|
||||
if (speedWithUnit == null || speedWithUnit.trim().isEmpty()) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
@@ -31,31 +31,56 @@ public class CalculateUtil {
|
||||
if (unit.isEmpty()) {
|
||||
unit = "B/S"; // 默认单位: Bytes/s
|
||||
}
|
||||
|
||||
// 单位换算逻辑(保持不变)
|
||||
switch (mode) {
|
||||
case "1000":
|
||||
return convertWithDecimalCoefficients(value, unit);
|
||||
case "1024":
|
||||
return convertWithBinaryCoefficients(value, unit);
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown mode: " + mode);
|
||||
}
|
||||
}
|
||||
// 1000进制换算
|
||||
private static BigDecimal convertWithDecimalCoefficients(BigDecimal value, String unit) {
|
||||
switch (unit) {
|
||||
case "B/S":
|
||||
return value.multiply(new BigDecimal("0.000008"));
|
||||
case "KBPS":
|
||||
return value.multiply(new BigDecimal("0.000008")) // 8/1000000
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
case "KB/S":
|
||||
return value.divide(new BigDecimal("1000"), 10, RoundingMode.HALF_UP);
|
||||
case "MBPS":
|
||||
return value.multiply(new BigDecimal("0.008")) // 8/1000
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
case "MB/S":
|
||||
return value;
|
||||
case "GBPS":
|
||||
return value.setScale(2, RoundingMode.HALF_UP);
|
||||
case "GB/S":
|
||||
return value.multiply(new BigDecimal("1000"));
|
||||
case "TBPS":
|
||||
return value.multiply(new BigDecimal("8000")) // 1000 * 8
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
case "TB/S":
|
||||
return value.multiply(new BigDecimal("1000000"));
|
||||
case "KIB/S":
|
||||
return value.multiply(new BigDecimal("0.008192"));
|
||||
case "MIB/S":
|
||||
return value.multiply(new BigDecimal("8.388608"));
|
||||
case "GIB/S":
|
||||
return value.multiply(new BigDecimal("8589.934592"));
|
||||
return value.multiply(new BigDecimal("8000000")) // 1000 * 1000 * 8
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown speed unit: " + unit);
|
||||
throw new IllegalArgumentException("Unsupported DECIMAL unit: " + unit);
|
||||
}
|
||||
}
|
||||
|
||||
// 1024进制换算
|
||||
private static BigDecimal convertWithBinaryCoefficients(BigDecimal value, String unit) {
|
||||
switch (unit) {
|
||||
case "B/S":
|
||||
return value.multiply(new BigDecimal("0.00000762939")) // 8/1048576
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
case "KB/S":
|
||||
return value.multiply(new BigDecimal("0.0078125")) // 8/1024
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
case "MB/S":
|
||||
return value.setScale(2, RoundingMode.HALF_UP);
|
||||
case "GB/S":
|
||||
return value.multiply(new BigDecimal("8192")) // 1024 * 8
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
case "TB/S":
|
||||
return value.multiply(new BigDecimal("8388608")) // 1024 * 1024 * 8
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported BINARY unit: " + unit);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="id" column="id" />
|
||||
<result property="nodeName" column="node_name" />
|
||||
<result property="hardwareSn" column="hardware_sn" />
|
||||
<result property="calculationMode" column="calculation_mode" />
|
||||
<result property="bandwidthType" column="bandwidth_type" />
|
||||
<result property="bandwidthResult" column="bandwidth_result" />
|
||||
<result property="bandwidth95Daily" column="bandwidth_95_daily" />
|
||||
@@ -36,7 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectEpsNodeBandwidthVo">
|
||||
select id, node_name, hardware_sn, bandwidth_type, bandwidth_result, bandwidth_95_daily, bandwidth_95_monthly, avg_monthly_bandwidth_95, package_bandwidth_daily, customer_id, customer_name, service_number, uplink_switch, create_time, update_time, creator_id, creator_name, switch_sn, interface_name, resource_type, interface_link_device_type, effective_bandwidth_95_daily, effective_bandwidth_95_monthly, effective_avg_monthly_bandwidth_95, business_name, business_id, remark1, create_datetime from eps_node_bandwidth
|
||||
select id, node_name, hardware_sn, calculation_mode, bandwidth_type, bandwidth_result, bandwidth_95_daily, bandwidth_95_monthly, avg_monthly_bandwidth_95, package_bandwidth_daily, customer_id, customer_name, service_number, uplink_switch, create_time, update_time, creator_id, creator_name, switch_sn, interface_name, resource_type, interface_link_device_type, effective_bandwidth_95_daily, effective_bandwidth_95_monthly, effective_avg_monthly_bandwidth_95, business_name, business_id, remark1, create_datetime from eps_node_bandwidth
|
||||
</sql>
|
||||
|
||||
<select id="selectEpsNodeBandwidthList" parameterType="EpsNodeBandwidth" resultMap="EpsNodeBandwidthResult">
|
||||
@@ -44,6 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<where>
|
||||
<if test="nodeName != null and nodeName != ''"> and node_name like concat('%', #{nodeName}, '%')</if>
|
||||
<if test="hardwareSn != null and hardwareSn != ''"> and hardware_sn = #{hardwareSn}</if>
|
||||
<if test="calculationMode != null and calculationMode != ''"> and calculation_mode = #{calculationMode}</if>
|
||||
<if test="bandwidthType != null and bandwidthType != ''"> and bandwidth_type = #{bandwidthType}</if>
|
||||
<if test="bandwidthResult != null "> and bandwidth_result = #{bandwidthResult}</if>
|
||||
<if test="bandwidth95Daily != null "> and bandwidth_95_daily = #{bandwidth95Daily}</if>
|
||||
@@ -95,6 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="nodeName != null">node_name,</if>
|
||||
<if test="hardwareSn != null">hardware_sn,</if>
|
||||
<if test="calculationMode != null">calculation_mode,</if>
|
||||
<if test="bandwidthType != null">bandwidth_type,</if>
|
||||
<if test="bandwidthResult != null">bandwidth_result,</if>
|
||||
<if test="bandwidth95Daily != null">bandwidth_95_daily,</if>
|
||||
@@ -124,6 +127,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="nodeName != null">#{nodeName},</if>
|
||||
<if test="hardwareSn != null">#{hardwareSn},</if>
|
||||
<if test="calculationMode != null">#{calculationMode},</if>
|
||||
<if test="bandwidthType != null">#{bandwidthType},</if>
|
||||
<if test="bandwidthResult != null">#{bandwidthResult},</if>
|
||||
<if test="bandwidth95Daily != null">#{bandwidth95Daily},</if>
|
||||
@@ -157,6 +161,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="nodeName != null">node_name = #{nodeName},</if>
|
||||
<if test="hardwareSn != null">hardware_sn = #{hardwareSn},</if>
|
||||
<if test="calculationMode != null">calculation_mode = #{calculationMode},</if>
|
||||
<if test="bandwidthType != null">bandwidth_type = #{bandwidthType},</if>
|
||||
<if test="bandwidthResult != null">bandwidth_result = #{bandwidthResult},</if>
|
||||
<if test="bandwidth95Daily != null">bandwidth_95_daily = #{bandwidth95Daily},</if>
|
||||
|
||||
@@ -96,4 +96,9 @@
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="selectMonitorMsgAndGroupMsg" parameterType="Long" resultType="RmResourceGroup">
|
||||
select b.monitor_items monitorItems,b.discovery_rules discoveryRules from rm_resource_group a left join rm_monitor_template b on a.id=b.resource_group_id
|
||||
where FIND_IN_SET(#{id}, a.included_devices_id) > 0
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ruoyi.rocketmq.controller;
|
||||
|
||||
import com.ruoyi.common.core.utils.DateUtils;
|
||||
import com.ruoyi.common.core.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.common.core.web.controller.BaseController;
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
@@ -14,7 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* CPU监控信息Controller
|
||||
@@ -99,4 +101,47 @@ public class InitialCpuInfoController extends BaseController
|
||||
{
|
||||
return toAjax(initialCpuInfoService.deleteInitialCpuInfoByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询CPU监控信息列表并封装为多折线ECharts图表数据
|
||||
*/
|
||||
@RequiresPermissions("rocketmq:cpuInfo:list")
|
||||
@PostMapping("/cpuLoadEcharts")
|
||||
public AjaxResult cpuLoadEcharts(@RequestBody InitialCpuInfo initialCpuInfo) {
|
||||
// 1. 查询原始CPU监控数据并按时间排序
|
||||
List<InitialCpuInfo> list = initialCpuInfoService.selectInitialCpuInfoList(initialCpuInfo)
|
||||
.stream()
|
||||
.sorted(Comparator.comparing(InitialCpuInfo::getCreateTime))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 2. 封装为ECharts图表数据格式
|
||||
Map<String, Object> echartsData = new HashMap<>();
|
||||
|
||||
// 确保X轴和Y轴数据顺序一致的处理
|
||||
List<String> xAxisData = new ArrayList<>();
|
||||
List<Long> load1Data = new ArrayList<>();
|
||||
List<Long> load5Data = new ArrayList<>();
|
||||
List<Long> load15Data = new ArrayList<>();
|
||||
List<Long> utiData = new ArrayList<>();
|
||||
|
||||
for (InitialCpuInfo info : list) {
|
||||
xAxisData.add(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", info.getCreateTime()));
|
||||
load1Data.add(info.getAvg1());
|
||||
load5Data.add(info.getAvg5());
|
||||
load15Data.add(info.getAvg15());
|
||||
utiData.add(info.getUti());
|
||||
}
|
||||
|
||||
// 构建Y轴数据
|
||||
Map<String, Object> yData = new HashMap<>();
|
||||
yData.put("load1Data", load1Data);
|
||||
yData.put("load5Data", load5Data);
|
||||
yData.put("load15Data", load15Data);
|
||||
yData.put("utiData", utiData);
|
||||
|
||||
echartsData.put("xData", xAxisData);
|
||||
echartsData.put("yData", yData);
|
||||
|
||||
return success(echartsData);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,4 +69,8 @@ public class InitialCpuInfo extends BaseEntity
|
||||
/** CPU用户进程所花费的时间(秒) */
|
||||
@Excel(name = "CPU用户进程所花费的时间")
|
||||
private Long user;
|
||||
/** 开始时间 */
|
||||
private String startTime;
|
||||
/** 结束时间 */
|
||||
private String endTime;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package com.ruoyi.rocketmq.service.impl;
|
||||
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.ruoyi.common.core.constant.SecurityConstants;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.utils.DateUtils;
|
||||
import com.ruoyi.common.core.web.page.PageDomain;
|
||||
import com.ruoyi.common.core.web.page.TableDataInfo;
|
||||
import com.ruoyi.rocketmq.domain.RmInitialMonitorItem;
|
||||
import com.ruoyi.rocketmq.domain.RmMonitorTemplate;
|
||||
import com.ruoyi.rocketmq.domain.RmTemplateLinux;
|
||||
@@ -12,6 +17,8 @@ import com.ruoyi.rocketmq.mapper.RmTemplateLinuxMapper;
|
||||
import com.ruoyi.rocketmq.mapper.RmTemplateSwitchMapper;
|
||||
import com.ruoyi.rocketmq.service.IRmMonitorTemplateService;
|
||||
import com.ruoyi.rocketmq.utils.DataProcessUtil;
|
||||
import com.ruoyi.system.api.RemoteRevenueConfigService;
|
||||
import com.ruoyi.system.api.domain.RmResourceRegistrationRemote;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -22,6 +29,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.ruoyi.common.core.utils.PageUtils.startPage;
|
||||
/**
|
||||
* 监控模板Service业务层处理
|
||||
*
|
||||
@@ -39,6 +47,8 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService
|
||||
private RmTemplateSwitchMapper rmTemplateSwitchMapper;
|
||||
@Autowired
|
||||
private RmInitialMonitorItemMapper rmInitialMonitorItemMapper;
|
||||
@Autowired
|
||||
private RemoteRevenueConfigService remoteRevenueConfigService;
|
||||
/**
|
||||
* 查询监控模板
|
||||
*
|
||||
@@ -210,5 +220,4 @@ public class RmMonitorTemplateServiceImpl implements IRmMonitorTemplateService
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<include refid="selectInitialCpuInfoVo"/>
|
||||
<where>
|
||||
<if test="clientId != null and clientId != ''"> and client_id = #{clientId}</if>
|
||||
<if test="startTime != null and startTime != ''"> and create_time >= #{startTime}</if>
|
||||
<if test="endTime != null and endTime != ''"> and create_time <= #{endTime}</if>
|
||||
</where>
|
||||
order by create_time desc
|
||||
</select>
|
||||
|
||||
Reference in New Issue
Block a user