测试环境配置、新增mtr探测丢包率结果存储方法
This commit is contained in:
@@ -13,17 +13,19 @@ spring:
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# 服务注册地址
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: ${spring.cloud.nacos.config.username}
|
||||
# password: ${spring.cloud.nacos.config.password}
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
username: ${spring.cloud.nacos.config.username}
|
||||
password: ${spring.cloud.nacos.config.password}
|
||||
config:
|
||||
# 配置中心地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: nacos
|
||||
# password: nacos
|
||||
namespace: saas-local
|
||||
username: nacos
|
||||
password: nacos
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
|
||||
@@ -71,6 +71,8 @@ public enum MsgEnum {
|
||||
|
||||
Agent版本更新("AGENT_VERSION_UPDATE"),
|
||||
|
||||
MTR探测上报("MTR_DETECT"),
|
||||
|
||||
Agent版本更新应答("AGENT_VERSION_UPDATE_RSP");
|
||||
|
||||
private String value;
|
||||
|
||||
+17
@@ -6,6 +6,7 @@ import java.lang.management.ManagementFactory;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.*;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
@@ -43,6 +44,22 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
||||
Date now = calendar.getTime();
|
||||
return now;
|
||||
}
|
||||
/**
|
||||
* 获取今天的时间范围数组
|
||||
* 返回:String[2] {开始时间, 结束时间}
|
||||
* 格式:["2024-01-15 00:00:00", "2024-01-15 23:59:59"]
|
||||
*/
|
||||
public static String[] getTodayTimeRange() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
LocalDateTime startOfDay = now.with(LocalTime.MIN);
|
||||
LocalDateTime endOfDay = now.with(LocalTime.MAX);
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
return new String[] {
|
||||
startOfDay.format(formatter),
|
||||
endOfDay.format(formatter)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前日期, 默认格式为yyyy-MM-dd
|
||||
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
package com.ruoyi.common.core.utils;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class TableSubUtil {
|
||||
|
||||
// 日期格式
|
||||
private static final String YEAR_MONTH_FORMAT = "yyyy_MM";
|
||||
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
/**
|
||||
* 根据创建时间获取表名
|
||||
* @param createTime 记录创建时间
|
||||
* @param prefix 表名前缀
|
||||
* @return 对应的分表名称
|
||||
* @throws IllegalArgumentException 如果createTime为null
|
||||
*
|
||||
* 示例:
|
||||
* 2023-08-05 14:30:00 → rm_mtr_probe_result_2023_08_01_10
|
||||
* 2023-08-15 09:15:00 → rm_mtr_probe_result_2023_08_11_20
|
||||
* 2023-08-25 18:45:00 → rm_mtr_probe_result_2023_08_21_31
|
||||
*/
|
||||
public static String getTableName(Date createTime, String prefix) {
|
||||
if (createTime == null) {
|
||||
throw new IllegalArgumentException("创建时间不能为null");
|
||||
}
|
||||
|
||||
SimpleDateFormat yearMonthFormat = new SimpleDateFormat(YEAR_MONTH_FORMAT);
|
||||
String yearMonth = yearMonthFormat.format(createTime);
|
||||
|
||||
SimpleDateFormat dayFormat = new SimpleDateFormat("dd");
|
||||
int day = Integer.parseInt(dayFormat.format(createTime));
|
||||
|
||||
return String.format("%s_%s_%s",
|
||||
prefix,
|
||||
yearMonth,
|
||||
getDayRange(day));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取时间范围内涉及的所有表名
|
||||
* @param startTime 开始时间 (格式: "yyyy-MM-dd HH:mm:ss")
|
||||
* @param endTime 结束时间 (格式: "yyyy-MM-dd HH:mm:ss")
|
||||
* @param prefix 表名前缀
|
||||
* @return 按时间顺序排列的表名集合
|
||||
*/
|
||||
public static Set<String> getTableNamesBetween(String startTime, String endTime, String prefix) {
|
||||
Date start = parseDateTime(startTime);
|
||||
Date end = parseDateTime(endTime);
|
||||
validateTimeRange(start, end);
|
||||
|
||||
Set<String> tableNames = new LinkedHashSet<>();
|
||||
|
||||
// 使用java.util.Calendar进行日期操作
|
||||
java.util.Calendar current = java.util.Calendar.getInstance();
|
||||
current.setTime(start);
|
||||
current.set(java.util.Calendar.HOUR_OF_DAY, 0);
|
||||
current.set(java.util.Calendar.MINUTE, 0);
|
||||
current.set(java.util.Calendar.SECOND, 0);
|
||||
current.set(java.util.Calendar.MILLISECOND, 0);
|
||||
|
||||
java.util.Calendar endCal = java.util.Calendar.getInstance();
|
||||
endCal.setTime(end);
|
||||
|
||||
while (!current.after(endCal)) {
|
||||
tableNames.add(getTableName(current.getTime(), prefix));
|
||||
current.add(java.util.Calendar.DAY_OF_MONTH, 1);
|
||||
}
|
||||
|
||||
return tableNames;
|
||||
}
|
||||
|
||||
// 解析字符串为Date
|
||||
private static Date parseDateTime(String dateTimeStr) {
|
||||
if (dateTimeStr == null || dateTimeStr.trim().isEmpty()) {
|
||||
throw new IllegalArgumentException("时间字符串不能为空");
|
||||
}
|
||||
try {
|
||||
SimpleDateFormat format = new SimpleDateFormat(DATE_TIME_FORMAT);
|
||||
return format.parse(dateTimeStr);
|
||||
} catch (ParseException e) {
|
||||
throw new IllegalArgumentException("时间格式必须为: yyyy-MM-dd HH:mm:ss", e);
|
||||
}
|
||||
}
|
||||
|
||||
// 获取日期区间
|
||||
private static String getDayRange(int day) {
|
||||
if (day < 1 || day > 31) {
|
||||
throw new IllegalArgumentException("日期必须在1-31之间");
|
||||
}
|
||||
|
||||
if (day <= 10) return "01_10";
|
||||
if (day <= 20) return "11_20";
|
||||
return "21_31";
|
||||
}
|
||||
|
||||
// 验证时间范围
|
||||
private static void validateTimeRange(Date start, Date end) {
|
||||
if (start == null || end == null) {
|
||||
throw new IllegalArgumentException("时间范围参数不能为null");
|
||||
}
|
||||
if (start.after(end)) {
|
||||
throw new IllegalArgumentException("开始时间不能晚于结束时间");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,17 +13,19 @@ spring:
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# 服务注册地址
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: ${spring.cloud.nacos.config.username}
|
||||
# password: ${spring.cloud.nacos.config.password}
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
username: ${spring.cloud.nacos.config.username}
|
||||
password: ${spring.cloud.nacos.config.password}
|
||||
config:
|
||||
# 配置中心地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: nacos
|
||||
# password: nacos
|
||||
namespace: saas-local
|
||||
username: nacos
|
||||
password: nacos
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
|
||||
@@ -14,14 +14,16 @@ spring:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
# server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.103:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
username: ${spring.cloud.nacos.config.username}
|
||||
password: ${spring.cloud.nacos.config.password}
|
||||
config:
|
||||
# 配置中心地址
|
||||
# server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.103:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
namespace: saas-local
|
||||
username: nacos
|
||||
password: nacos
|
||||
# 配置文件格式
|
||||
|
||||
@@ -13,17 +13,19 @@ spring:
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# 服务注册地址
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: ${spring.cloud.nacos.config.username}
|
||||
# password: ${spring.cloud.nacos.config.password}
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
username: ${spring.cloud.nacos.config.username}
|
||||
password: ${spring.cloud.nacos.config.password}
|
||||
config:
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# 配置中心地址
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: nacos
|
||||
# password: nacos
|
||||
namespace: saas-local
|
||||
username: nacos
|
||||
password: nacos
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
|
||||
+1
-2
@@ -50,7 +50,7 @@ public class RmMtrClientRegistrationController extends BaseController
|
||||
@RequiresPermissions("mtragent:mtrClientRegistration:export")
|
||||
@Log(title = "MTR客户端注册", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, RmMtrClientRegistration rmMtrClientRegistration)
|
||||
public void export(HttpServletResponse response, @RequestBody RmMtrClientRegistration rmMtrClientRegistration)
|
||||
{
|
||||
List<RmMtrClientRegistration> list = rmMtrClientRegistrationService.selectRmMtrClientRegistrationList(rmMtrClientRegistration);
|
||||
ExcelUtil<RmMtrClientRegistration> util = new ExcelUtil<RmMtrClientRegistration>(RmMtrClientRegistration.class);
|
||||
@@ -101,5 +101,4 @@ public class RmMtrClientRegistrationController extends BaseController
|
||||
int rows = rmMtrClientRegistrationService.addAgentUpdatePolicy(rmMtrClientRegistration);
|
||||
return toAjax(rows);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
package com.ruoyi.mtragent.controller;
|
||||
|
||||
import com.ruoyi.common.core.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.common.core.web.controller.BaseController;
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.web.page.TableDataInfo;
|
||||
import com.ruoyi.common.log.annotation.Log;
|
||||
import com.ruoyi.common.log.enums.BusinessType;
|
||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
||||
import com.ruoyi.mtragent.domain.RmMtrProbeResult;
|
||||
import com.ruoyi.mtragent.service.IRmMtrProbeResultService;
|
||||
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.Map;
|
||||
|
||||
/**
|
||||
* 网络mtr探测结果Controller
|
||||
*
|
||||
* @author gyt
|
||||
* @date 2025-11-20
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/mtrProbeResult")
|
||||
public class RmMtrProbeResultController extends BaseController
|
||||
{
|
||||
@Autowired
|
||||
private IRmMtrProbeResultService rmMtrProbeResultService;
|
||||
|
||||
/**
|
||||
* 查询网络mtr探测结果列表
|
||||
*/
|
||||
@RequiresPermissions("mtragent:mtrProbeResult:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
startPage();
|
||||
List<RmMtrProbeResult> list = rmMtrProbeResultService.selectRmMtrProbeResultList(rmMtrProbeResult);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出网络mtr探测结果列表
|
||||
*/
|
||||
@RequiresPermissions("mtragent:mtrProbeResult:export")
|
||||
@Log(title = "网络mtr探测结果", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
List<RmMtrProbeResult> list = rmMtrProbeResultService.selectRmMtrProbeResultList(rmMtrProbeResult);
|
||||
ExcelUtil<RmMtrProbeResult> util = new ExcelUtil<RmMtrProbeResult>(RmMtrProbeResult.class);
|
||||
util.exportExcel(response, list, "网络mtr探测结果数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取网络mtr探测结果详细信息
|
||||
*/
|
||||
@RequiresPermissions("mtragent:mtrProbeResult:query")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(rmMtrProbeResultService.selectRmMtrProbeResultById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增网络mtr探测结果
|
||||
*/
|
||||
@RequiresPermissions("mtragent:mtrProbeResult:add")
|
||||
@Log(title = "网络mtr探测结果", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
return toAjax(rmMtrProbeResultService.insertRmMtrProbeResult(rmMtrProbeResult));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改网络mtr探测结果
|
||||
*/
|
||||
@RequiresPermissions("mtragent:mtrProbeResult:edit")
|
||||
@Log(title = "网络mtr探测结果", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@RequestBody RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
return toAjax(rmMtrProbeResultService.updateRmMtrProbeResult(rmMtrProbeResult));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除网络mtr探测结果
|
||||
*/
|
||||
@RequiresPermissions("mtragent:mtrProbeResult:remove")
|
||||
@Log(title = "网络mtr探测结果", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids)
|
||||
{
|
||||
return toAjax(rmMtrProbeResultService.deleteRmMtrProbeResultByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看丢包率趋势
|
||||
*/
|
||||
@RequiresPermissions("mtragent:mtrProbeResult:list")
|
||||
@PostMapping("/getLossRateByMtrClientId")
|
||||
public AjaxResult getLossRateByMtrClientId(@RequestBody RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
Map<String, Object> list = rmMtrProbeResultService.getLossRateByMtrClientId(rmMtrProbeResult);
|
||||
return success(list);
|
||||
}
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
package com.ruoyi.mtragent.domain;
|
||||
|
||||
import com.ruoyi.common.core.annotation.Excel;
|
||||
import com.ruoyi.common.core.web.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 网络mtr探测结果对象 rm_mtr_probe_result
|
||||
*
|
||||
* @author gyt
|
||||
* @date 2025-11-20
|
||||
*/
|
||||
@Data
|
||||
public class RmMtrProbeResult extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 主键ID */
|
||||
private Long id;
|
||||
|
||||
/** MTR客户端ID */
|
||||
@Excel(name = "MTR客户端ID")
|
||||
private String mtrClientId;
|
||||
|
||||
/** 客户端ID */
|
||||
@Excel(name = "客户端ID")
|
||||
private String clientId;
|
||||
|
||||
/** 公网IP地址 */
|
||||
@Excel(name = "公网IP地址")
|
||||
private String publicIp;
|
||||
|
||||
/** 丢包率(%) */
|
||||
@Excel(name = "丢包率(%)")
|
||||
private BigDecimal packetLossRate;
|
||||
/** 表名 */
|
||||
private String tableName;
|
||||
/** 批量新增集合 */
|
||||
private List<RmMtrProbeResult> list;
|
||||
/** 开始时间 */
|
||||
private String startTime;
|
||||
/** 结束时间 */
|
||||
private String endTime;
|
||||
|
||||
|
||||
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package com.ruoyi.mtragent.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class MtrResultVo {
|
||||
private String targetIp; // 目标IP
|
||||
private Long policyId; // 策略ID
|
||||
private double firstLossPercent; // 第一次探测丢包率
|
||||
private double finalLossPercent; // 最终丢包率
|
||||
private long timestamp; // 探测时间戳
|
||||
private boolean hasRetry; // 是否重试
|
||||
private String errorMsg; // 错误信息
|
||||
|
||||
}
|
||||
+47
-4
@@ -5,10 +5,7 @@ import com.ruoyi.common.core.enums.MsgEnum;
|
||||
import com.ruoyi.common.core.utils.DateUtils;
|
||||
import com.ruoyi.common.core.utils.StringUtils;
|
||||
import com.ruoyi.mtragent.domain.*;
|
||||
import com.ruoyi.mtragent.domain.vo.MessageVo;
|
||||
import com.ruoyi.mtragent.domain.vo.PolicyTypeVo;
|
||||
import com.ruoyi.mtragent.domain.vo.RegisterMsgVo;
|
||||
import com.ruoyi.mtragent.domain.vo.RspVo;
|
||||
import com.ruoyi.mtragent.domain.vo.*;
|
||||
import com.ruoyi.mtragent.enums.AlarmTypeEnum;
|
||||
import com.ruoyi.mtragent.enums.PushMethodEnum;
|
||||
import com.ruoyi.mtragent.model.ProducerMode;
|
||||
@@ -28,6 +25,7 @@ import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@@ -66,6 +64,10 @@ public class MessageHandler {
|
||||
private IRmMtrPolicyConfigService rmMtrPolicyConfigService;
|
||||
@Autowired
|
||||
private ProducerMode producerMode;
|
||||
@Autowired
|
||||
private IRmNetworkInterfaceService rmNetworkInterfaceService;
|
||||
@Autowired
|
||||
private IRmMtrProbeResultService rmMtrProbeResultService;
|
||||
|
||||
|
||||
/**
|
||||
@@ -80,7 +82,48 @@ public class MessageHandler {
|
||||
registerHandler(MsgEnum.获取最新策略.getValue(), this::handleNewPolicyMessage);
|
||||
registerHandler(MsgEnum.心跳上报.getValue(), this::handleHeartbeatMessage);
|
||||
registerHandler(MsgEnum.多公网IP探测.getValue(), this::handleNetWorkDelectMessage);
|
||||
registerHandler(MsgEnum.MTR探测上报.getValue(), this::handleMtrDelectMessage);
|
||||
}
|
||||
|
||||
private void handleMtrDelectMessage(DeviceMessage message) {
|
||||
List<MtrResultVo> mtrResultVoList = JsonDataParser.parseJsonData(message.getData(), MtrResultVo.class);
|
||||
if(mtrResultVoList != null && !mtrResultVoList.isEmpty()){
|
||||
String mtrClientId = message.getClientId();
|
||||
List<RmMtrProbeResult> rmMtrProbeResultList = new ArrayList<>();
|
||||
for (MtrResultVo mtrResultVo : mtrResultVoList) {
|
||||
if(mtrResultVo.getFinalLossPercent() != -1.0){
|
||||
// 时间戳转换
|
||||
long timestamp = mtrResultVo.getTimestamp();
|
||||
long millis = timestamp * 1000;
|
||||
Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒
|
||||
RmMtrProbeResult rmMtrProbeResult = new RmMtrProbeResult();
|
||||
rmMtrProbeResult.setCreateTime(createTime);
|
||||
// 拿到ip
|
||||
String ip = mtrResultVo.getTargetIp();
|
||||
// 查询clientId
|
||||
RmNetworkInterface networkInfo = new RmNetworkInterface();
|
||||
networkInfo.setPublicIp(ip);
|
||||
networkInfo.setNewFlag(1);
|
||||
List<RmNetworkInterface> rmNetworkInterfaceList = rmNetworkInterfaceService.selectRmNetworkInterfaceList(networkInfo);
|
||||
if(rmNetworkInterfaceList != null && !rmNetworkInterfaceList.isEmpty()){
|
||||
RmNetworkInterface rmNetworkInterface = rmNetworkInterfaceList.get(0);
|
||||
rmMtrProbeResult.setClientId(rmNetworkInterface.getClientId());
|
||||
}
|
||||
rmMtrProbeResult.setMtrClientId(mtrClientId);
|
||||
rmMtrProbeResult.setPublicIp(ip);
|
||||
rmMtrProbeResult.setPacketLossRate(new BigDecimal(mtrResultVo.getFinalLossPercent()));
|
||||
rmMtrProbeResultList.add(rmMtrProbeResult);
|
||||
}else{
|
||||
log.debug("探测失败,失败原因:{}", mtrResultVo.getErrorMsg());
|
||||
}
|
||||
}
|
||||
RmMtrProbeResult insertData = new RmMtrProbeResult();
|
||||
insertData.setList(rmMtrProbeResultList);
|
||||
// 结果批量入库
|
||||
rmMtrProbeResultService.batchInsertRmMtrProbeResult(insertData);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleRegisterMessage(DeviceMessage message) {
|
||||
MessageProducer messageProducer = new MessageProducer();
|
||||
List<RegisterMsgVo> interfaces = JsonDataParser.parseJsonData(message.getData(), RegisterMsgVo.class);
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.ruoyi.mtragent.mapper;
|
||||
|
||||
import com.ruoyi.mtragent.domain.RmMtrProbeResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 网络mtr探测结果Mapper接口
|
||||
*
|
||||
* @author gyt
|
||||
* @date 2025-11-20
|
||||
*/
|
||||
public interface RmMtrProbeResultMapper
|
||||
{
|
||||
/**
|
||||
* 查询网络mtr探测结果
|
||||
*
|
||||
* @param id 网络mtr探测结果主键
|
||||
* @return 网络mtr探测结果
|
||||
*/
|
||||
public RmMtrProbeResult selectRmMtrProbeResultById(Long id);
|
||||
|
||||
/**
|
||||
* 查询网络mtr探测结果列表
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 网络mtr探测结果集合
|
||||
*/
|
||||
public List<RmMtrProbeResult> selectRmMtrProbeResultList(RmMtrProbeResult rmMtrProbeResult);
|
||||
|
||||
/**
|
||||
* 新增网络mtr探测结果
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
|
||||
|
||||
/**
|
||||
* 修改网络mtr探测结果
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
|
||||
|
||||
/**
|
||||
* 删除网络mtr探测结果
|
||||
*
|
||||
* @param id 网络mtr探测结果主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRmMtrProbeResultById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除网络mtr探测结果
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRmMtrProbeResultByIds(Long[] ids);
|
||||
|
||||
void batchInsertRmMtrProbeResult(RmMtrProbeResult batchData);
|
||||
|
||||
/**
|
||||
* 分表查询
|
||||
* @param condition
|
||||
* @return
|
||||
*/
|
||||
List<RmMtrProbeResult> selectByCondition(RmMtrProbeResult condition);
|
||||
}
|
||||
+1
@@ -66,4 +66,5 @@ public interface IRmMtrClientRegistrationService
|
||||
* @return
|
||||
*/
|
||||
int addAgentUpdatePolicy(RmMtrClientRegistration rmMtrClientRegistration);
|
||||
|
||||
}
|
||||
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
package com.ruoyi.mtragent.service;
|
||||
|
||||
import com.ruoyi.mtragent.domain.RmMtrProbeResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 网络mtr探测结果Service接口
|
||||
*
|
||||
* @author gyt
|
||||
* @date 2025-11-20
|
||||
*/
|
||||
public interface IRmMtrProbeResultService
|
||||
{
|
||||
/**
|
||||
* 查询网络mtr探测结果
|
||||
*
|
||||
* @param id 网络mtr探测结果主键
|
||||
* @return 网络mtr探测结果
|
||||
*/
|
||||
public RmMtrProbeResult selectRmMtrProbeResultById(Long id);
|
||||
|
||||
/**
|
||||
* 查询网络mtr探测结果列表
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 网络mtr探测结果集合
|
||||
*/
|
||||
public List<RmMtrProbeResult> selectRmMtrProbeResultList(RmMtrProbeResult rmMtrProbeResult);
|
||||
|
||||
/**
|
||||
* 新增网络mtr探测结果
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
|
||||
|
||||
/**
|
||||
* 修改网络mtr探测结果
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
|
||||
|
||||
/**
|
||||
* 批量删除网络mtr探测结果
|
||||
*
|
||||
* @param ids 需要删除的网络mtr探测结果主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRmMtrProbeResultByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除网络mtr探测结果信息
|
||||
*
|
||||
* @param id 网络mtr探测结果主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteRmMtrProbeResultById(Long id);
|
||||
|
||||
public void batchInsertRmMtrProbeResult(RmMtrProbeResult result);
|
||||
|
||||
/**
|
||||
* 查看丢包率趋势
|
||||
* @param rmMtrProbeResult
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> getLossRateByMtrClientId(RmMtrProbeResult rmMtrProbeResult);
|
||||
}
|
||||
+1
@@ -209,4 +209,5 @@ public class RmMtrClientRegistrationServiceImpl implements IRmMtrClientRegistrat
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-3
@@ -243,9 +243,8 @@ public class RmMtrPolicyConfigServiceImpl implements IRmMtrPolicyConfigService
|
||||
private List<String> getServerIdsFromPolicy(RmMtrPolicyConfig policy) {
|
||||
List<String> serverIds = new ArrayList<>();
|
||||
if (policy.getServerGroup() != null) {
|
||||
// 先还原换行符分割
|
||||
String serverGroup = policy.getServerGroup().replace(";", "\n");
|
||||
String[] ids = serverGroup.split("\\r?\\n");
|
||||
String serverGroup = policy.getServerGroup();
|
||||
String[] ids = serverGroup.split("\n");
|
||||
for (String id : ids) {
|
||||
if (id != null && !id.trim().isEmpty()) {
|
||||
serverIds.add(id.trim());
|
||||
|
||||
+219
@@ -0,0 +1,219 @@
|
||||
package com.ruoyi.mtragent.service.impl;
|
||||
|
||||
import com.ruoyi.common.core.utils.DateUtils;
|
||||
import com.ruoyi.common.core.utils.EchartsDataUtils;
|
||||
import com.ruoyi.common.core.utils.TableSubUtil;
|
||||
import com.ruoyi.mtragent.domain.RmMtrProbeResult;
|
||||
import com.ruoyi.mtragent.mapper.RmMtrProbeResultMapper;
|
||||
import com.ruoyi.mtragent.service.IRmMtrProbeResultService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
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 java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 网络mtr探测结果Service业务层处理
|
||||
*
|
||||
* @author gyt
|
||||
* @date 2025-11-20
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class RmMtrProbeResultServiceImpl implements IRmMtrProbeResultService
|
||||
{
|
||||
@Autowired
|
||||
private RmMtrProbeResultMapper rmMtrProbeResultMapper;
|
||||
|
||||
private final static String TABLE_PREFIX = "rm_mtr_probe_result";
|
||||
|
||||
/**
|
||||
* 查询网络mtr探测结果
|
||||
*
|
||||
* @param id 网络mtr探测结果主键
|
||||
* @return 网络mtr探测结果
|
||||
*/
|
||||
@Override
|
||||
public RmMtrProbeResult selectRmMtrProbeResultById(Long id)
|
||||
{
|
||||
return rmMtrProbeResultMapper.selectRmMtrProbeResultById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询网络mtr探测结果列表
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 网络mtr探测结果
|
||||
*/
|
||||
@Override
|
||||
public List<RmMtrProbeResult> selectRmMtrProbeResultList(RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
return rmMtrProbeResultMapper.selectRmMtrProbeResultList(rmMtrProbeResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增网络mtr探测结果
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
Date createTime = rmMtrProbeResult.getCreateTime();
|
||||
String tableName = TableSubUtil.getTableName(createTime, TABLE_PREFIX);
|
||||
return rmMtrProbeResultMapper.insertRmMtrProbeResult(rmMtrProbeResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改网络mtr探测结果
|
||||
*
|
||||
* @param rmMtrProbeResult 网络mtr探测结果
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult)
|
||||
{
|
||||
rmMtrProbeResult.setUpdateTime(DateUtils.getNowDate());
|
||||
return rmMtrProbeResultMapper.updateRmMtrProbeResult(rmMtrProbeResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除网络mtr探测结果
|
||||
*
|
||||
* @param ids 需要删除的网络mtr探测结果主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteRmMtrProbeResultByIds(Long[] ids)
|
||||
{
|
||||
return rmMtrProbeResultMapper.deleteRmMtrProbeResultByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除网络mtr探测结果信息
|
||||
*
|
||||
* @param id 网络mtr探测结果主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteRmMtrProbeResultById(Long id)
|
||||
{
|
||||
return rmMtrProbeResultMapper.deleteRmMtrProbeResultById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
||||
public void batchInsertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult) {
|
||||
if (rmMtrProbeResult == null) {
|
||||
return;
|
||||
}
|
||||
List<RmMtrProbeResult> dataList = rmMtrProbeResult.getList();
|
||||
if (dataList == null || dataList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 按表名分组批量插入
|
||||
Map<String, List<RmMtrProbeResult>> groupedData = dataList.stream()
|
||||
.map(data -> {
|
||||
try {
|
||||
RmMtrProbeResult processed = new RmMtrProbeResult();
|
||||
BeanUtils.copyProperties(data, processed);
|
||||
if (data.getCreateTime() == null) {
|
||||
processed.setCreateTime(new Date());
|
||||
}
|
||||
if(data.getUpdateTime() == null){
|
||||
processed.setUpdateTime(new Date());
|
||||
}
|
||||
processed.setTableName(TableSubUtil.getTableName(data.getCreateTime(), TABLE_PREFIX));
|
||||
return processed;
|
||||
} catch (Exception e) {
|
||||
log.error("RmMtrProbeResult数据处理失败", e);
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.filter(Objects::nonNull) // 过滤掉处理失败的数据
|
||||
.collect(Collectors.groupingBy(
|
||||
RmMtrProbeResult::getTableName,
|
||||
LinkedHashMap::new, // 保持插入顺序
|
||||
Collectors.toList()));
|
||||
|
||||
groupedData.forEach((tableName, list) -> {
|
||||
try {
|
||||
RmMtrProbeResult batchData = new RmMtrProbeResult();
|
||||
BeanUtils.copyProperties(rmMtrProbeResult, batchData);
|
||||
batchData.setTableName(tableName);
|
||||
batchData.setList(list);
|
||||
rmMtrProbeResultMapper.batchInsertRmMtrProbeResult(batchData);
|
||||
} catch (Exception e) {
|
||||
log.error("表{}插入失败", tableName, e);
|
||||
throw new RuntimeException("批量插入失败", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 分表查询探测结果
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
public List<RmMtrProbeResult> getListByTime(RmMtrProbeResult queryParam){
|
||||
// 获取涉及的表名
|
||||
Set<String> tableNames = TableSubUtil.getTableNamesBetween(
|
||||
queryParam.getStartTime(),
|
||||
queryParam.getEndTime(),
|
||||
TABLE_PREFIX
|
||||
);
|
||||
|
||||
// 并行查询各表
|
||||
return tableNames.parallelStream()
|
||||
.flatMap(tableName -> {
|
||||
RmMtrProbeResult condition = new RmMtrProbeResult();
|
||||
condition.setTableName(tableName);
|
||||
condition.setMtrClientId(queryParam.getMtrClientId());
|
||||
condition.setClientId(queryParam.getClientId());
|
||||
condition.setStartTime(queryParam.getStartTime());
|
||||
condition.setEndTime(queryParam.getEndTime());
|
||||
return rmMtrProbeResultMapper.selectByCondition(condition).stream();
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看丢包率趋势
|
||||
* @param rmMtrProbeResult
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> getLossRateByMtrClientId(RmMtrProbeResult rmMtrProbeResult) {
|
||||
if(rmMtrProbeResult.getStartTime() == null && rmMtrProbeResult.getEndTime() == null){
|
||||
String[] timeRange = DateUtils.getTodayTimeRange();
|
||||
rmMtrProbeResult.setStartTime(timeRange[0]);
|
||||
rmMtrProbeResult.setEndTime(timeRange[1]);
|
||||
}
|
||||
List<RmMtrProbeResult> list = getListByTime(rmMtrProbeResult);
|
||||
if(list == null){
|
||||
list = new ArrayList<>();
|
||||
}
|
||||
try {
|
||||
Map<String, Function<RmMtrProbeResult, ?>> extractors = new LinkedHashMap<>();
|
||||
|
||||
extractors.put("packetLossRate", info ->
|
||||
info != null && info.getPacketLossRate() != null ?
|
||||
info.getPacketLossRate() :
|
||||
0);
|
||||
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
|
||||
list, RmMtrProbeResult::getCreateTime, extractors, rmMtrProbeResult.getStartTime(), rmMtrProbeResult.getEndTime()
|
||||
);
|
||||
return resultMap;
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -14,16 +14,18 @@ spring:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: ${spring.cloud.nacos.config.username}
|
||||
# password: ${spring.cloud.nacos.config.password}
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
username: ${spring.cloud.nacos.config.username}
|
||||
password: ${spring.cloud.nacos.config.password}
|
||||
config:
|
||||
# 配置中心地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: nacos
|
||||
# password: nacos
|
||||
namespace: saas-local
|
||||
username: nacos
|
||||
password: nacos
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.mtragent.mapper.RmMtrProbeResultMapper">
|
||||
|
||||
<resultMap type="RmMtrProbeResult" id="RmMtrProbeResultResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="mtrClientId" column="mtr_client_id" />
|
||||
<result property="clientId" column="client_id" />
|
||||
<result property="publicIp" column="public_ip" />
|
||||
<result property="packetLossRate" column="packet_loss_rate" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectRmMtrProbeResultVo">
|
||||
select id, mtr_client_id, client_id, public_ip, packet_loss_rate, create_time, update_time, create_by, update_by from rm_mtr_probe_result
|
||||
</sql>
|
||||
|
||||
<select id="selectRmMtrProbeResultList" parameterType="RmMtrProbeResult" resultMap="RmMtrProbeResultResult">
|
||||
<include refid="selectRmMtrProbeResultVo"/>
|
||||
<where>
|
||||
<if test="mtrClientId != null and mtrClientId != ''"> and mtr_client_id = #{mtrClientId}</if>
|
||||
<if test="clientId != null and clientId != ''"> and client_id = #{clientId}</if>
|
||||
<if test="publicIp != null and publicIp != ''"> and public_ip = #{publicIp}</if>
|
||||
<if test="packetLossRate != null "> and packet_loss_rate = #{packetLossRate}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectRmMtrProbeResultById" parameterType="Long" resultMap="RmMtrProbeResultResult">
|
||||
<include refid="selectRmMtrProbeResultVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertRmMtrProbeResult" parameterType="RmMtrProbeResult" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into rm_mtr_probe_result
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="mtrClientId != null and mtrClientId != ''">mtr_client_id,</if>
|
||||
<if test="clientId != null and clientId != ''">client_id,</if>
|
||||
<if test="publicIp != null and publicIp != ''">public_ip,</if>
|
||||
<if test="packetLossRate != null">packet_loss_rate,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="mtrClientId != null and mtrClientId != ''">#{mtrClientId},</if>
|
||||
<if test="clientId != null and clientId != ''">#{clientId},</if>
|
||||
<if test="publicIp != null and publicIp != ''">#{publicIp},</if>
|
||||
<if test="packetLossRate != null">#{packetLossRate},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateRmMtrProbeResult" parameterType="RmMtrProbeResult">
|
||||
update rm_mtr_probe_result
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="mtrClientId != null and mtrClientId != ''">mtr_client_id = #{mtrClientId},</if>
|
||||
<if test="clientId != null and clientId != ''">client_id = #{clientId},</if>
|
||||
<if test="publicIp != null and publicIp != ''">public_ip = #{publicIp},</if>
|
||||
<if test="packetLossRate != null">packet_loss_rate = #{packetLossRate},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteRmMtrProbeResultById" parameterType="Long">
|
||||
delete from rm_mtr_probe_result where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteRmMtrProbeResultByIds" parameterType="String">
|
||||
delete from rm_mtr_probe_result where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
<insert id="batchInsertRmMtrProbeResult" parameterType="RmMtrProbeResult">
|
||||
INSERT INTO ${tableName}
|
||||
(
|
||||
mtr_client_id,
|
||||
client_id,
|
||||
public_ip,
|
||||
packet_loss_rate,
|
||||
create_time,
|
||||
update_time
|
||||
) VALUES
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(
|
||||
#{item.mtrClientId},
|
||||
#{item.clientId},
|
||||
#{item.publicIp},
|
||||
#{item.packetLossRate},
|
||||
#{item.createTime},
|
||||
#{item.updateTime}
|
||||
)
|
||||
</foreach>
|
||||
</insert>
|
||||
<!-- 在 RmMtrProbeResultMapper.xml 中添加 -->
|
||||
<select id="selectByCondition" parameterType="RmMtrProbeResult" resultMap="RmMtrProbeResultResult">
|
||||
SELECT
|
||||
id, mtr_client_id, client_id, public_ip, packet_loss_rate,
|
||||
create_time, update_time, create_by, update_by
|
||||
FROM ${tableName}
|
||||
<where>
|
||||
<if test="mtrClientId != null and mtrClientId != ''">
|
||||
AND mtr_client_id = #{mtrClientId}
|
||||
</if>
|
||||
<if test="clientId != null and clientId != ''">
|
||||
AND client_id = #{clientId}
|
||||
</if>
|
||||
<!-- 时间范围查询 -->
|
||||
<if test="startTime != null">
|
||||
AND create_time >= #{startTime}
|
||||
</if>
|
||||
<if test="endTime != null">
|
||||
AND create_time <= #{endTime}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
+7
@@ -16,6 +16,12 @@ public interface EpsInitialTrafficDataMapper {
|
||||
* @param tableName 表名
|
||||
*/
|
||||
void createEpsInitialTrafficTable(@Param("tableName") String tableName);
|
||||
|
||||
/**
|
||||
* 创建置顶名称的mtr探测结果表
|
||||
* @param tableName
|
||||
*/
|
||||
void createMtrProbeResultTable(@Param("tableName") String tableName);
|
||||
/**
|
||||
* 单条插入数据
|
||||
* @param data 流量数据
|
||||
@@ -49,4 +55,5 @@ public interface EpsInitialTrafficDataMapper {
|
||||
int updateMachineTraffic(EpsInitialTrafficData epsInitialTrafficData);
|
||||
|
||||
List<EpsInitialTrafficData> getTrafficListByClientIds(EpsInitialTrafficData condition);
|
||||
|
||||
}
|
||||
|
||||
+8
@@ -64,6 +64,8 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
createTrafficDetailsTable(year, month);
|
||||
// 创建流量初始表
|
||||
createTrafficStatsTable(year, month);
|
||||
// 创建mtr探测丢包结果表
|
||||
createMtrProbeResultTable(year, month);
|
||||
}
|
||||
|
||||
private void createTrafficDetailsTable(int year, int month) {
|
||||
@@ -78,6 +80,12 @@ public class EpsInitialTrafficDataServiceImpl implements EpsInitialTrafficDataSe
|
||||
});
|
||||
}
|
||||
|
||||
private void createMtrProbeResultTable(int year, int month) {
|
||||
createRangeTables(year, month, "rm_mtr_probe_result", (tableName) -> {
|
||||
epsInitialTrafficDataMapper.createMtrProbeResultTable(tableName);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 通用创建表方法
|
||||
|
||||
@@ -13,17 +13,19 @@ spring:
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# 服务注册地址
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: ${spring.cloud.nacos.config.username}
|
||||
# password: ${spring.cloud.nacos.config.password}
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
username: ${spring.cloud.nacos.config.username}
|
||||
password: ${spring.cloud.nacos.config.password}
|
||||
config:
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# 配置中心地址
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: nacos
|
||||
# password: nacos
|
||||
namespace: saas-local
|
||||
username: nacos
|
||||
password: nacos
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
|
||||
+16
@@ -66,6 +66,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
INDEX idx_name_time (`name`,create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='初始带宽流量表';
|
||||
</update>
|
||||
<update id="createMtrProbeResultTable">
|
||||
CREATE TABLE IF NOT EXISTS ${tableName} (
|
||||
id BIGINT(20) AUTO_INCREMENT COMMENT '主键ID',
|
||||
mtr_client_id VARCHAR(200) COMMENT 'MTR客户端ID',
|
||||
client_id VARCHAR(200) COMMENT '客户端ID',
|
||||
public_ip VARCHAR(45) COMMENT '公网IP地址',
|
||||
packet_loss_rate DECIMAL(5,2) COMMENT '丢包率(%)',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
create_by VARCHAR(64) COMMENT '创建人',
|
||||
update_by VARCHAR(64) COMMENT '更新人',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_probe_record (mtr_client_id, client_id, create_time),
|
||||
INDEX idx_mtr_client_id (mtr_client_id, create_time)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='网络mtr探测结果表';
|
||||
</update>
|
||||
|
||||
<!-- 单条插入语句 -->
|
||||
<insert id="insert">
|
||||
|
||||
@@ -14,16 +14,18 @@ spring:
|
||||
nacos:
|
||||
discovery:
|
||||
# 服务注册地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: ${spring.cloud.nacos.config.username}
|
||||
# password: ${spring.cloud.nacos.config.password}
|
||||
namespace: ${spring.cloud.nacos.config.namespace}
|
||||
username: ${spring.cloud.nacos.config.username}
|
||||
password: ${spring.cloud.nacos.config.password}
|
||||
config:
|
||||
# 配置中心地址
|
||||
server-addr: 127.0.0.1:8848
|
||||
server-addr: 172.16.15.52:8848
|
||||
# server-addr: 172.16.15.103:8848
|
||||
# username: nacos
|
||||
# password: nacos
|
||||
namespace: saas-local
|
||||
username: nacos
|
||||
password: nacos
|
||||
# 配置文件格式
|
||||
file-extension: yml
|
||||
# 共享配置
|
||||
|
||||
Reference in New Issue
Block a user