相关接口增加ipv4、ipv6出入流量字段。

服务器管理列表新增字段和排序。
优化监控看板流量统计。
This commit is contained in:
gaoyutao
2025-12-05 18:59:02 +08:00
parent 9dee067a87
commit 802e668d9a
22 changed files with 753 additions and 1067 deletions
@@ -118,6 +118,24 @@ public class InitialBandwidthTrafficController extends BaseController
Map<String, Object> echartsData = initialBandwidthTrafficService.netInterfaceTrafficEcharts(initialBandwidthTraffic);
return success(echartsData);
}
/**
* 查询eth0 IPV4流量信息并封装为多折线ECharts图表数据
*/
@RequiresPermissions("rocketmq:traffic:list")
@PostMapping("/netInterfaceIpv4TrafficEcharts")
public AjaxResult netInterfaceIpv4TrafficEcharts(@RequestBody InitialBandwidthTraffic initialBandwidthTraffic) {
Map<String, Object> echartsData = initialBandwidthTrafficService.netInterfaceIpv4TrafficEcharts(initialBandwidthTraffic);
return success(echartsData);
}
/**
* 查询eth0 IPV6流量信息并封装为多折线ECharts图表数据
*/
@RequiresPermissions("rocketmq:traffic:list")
@PostMapping("/netInterfaceIpv6TrafficEcharts")
public AjaxResult netInterfaceIpv6TrafficEcharts(@RequestBody InitialBandwidthTraffic initialBandwidthTraffic) {
Map<String, Object> echartsData = initialBandwidthTrafficService.netInterfaceIpv6TrafficEcharts(initialBandwidthTraffic);
return success(echartsData);
}
/**
* eth0丢包数
@@ -53,6 +53,8 @@ public class RmNetworkInterface extends BaseEntity
/** IPv4地址 */
@Excel(name = "IPv4地址")
private String ipv4Address;
/** IPv6地址 */
private String ipv6Address;
/** 网关 */
@Excel(name = "网关")
@@ -14,6 +14,7 @@ import com.tongran.rocketmq.domain.vo.RspVo;
import com.tongran.rocketmq.enums.AlarmTypeEnum;
import com.tongran.rocketmq.enums.PushMethodEnum;
import com.tongran.rocketmq.service.*;
import com.tongran.rocketmq.snmp.scheduler.MultiSwitchCollectionScheduler;
import com.tongran.rocketmq.utils.DataProcessUtil;
import com.tongran.rocketmq.utils.JsonDataParser;
import com.tongran.rocketmq.utils.WeChatWorkBot;
@@ -97,6 +98,8 @@ public class MessageHandler {
private IRmAlarmLogService rmAlarmLogService;
@Autowired
private IRmAlarmPushConfigService rmAlarmPushConfigService;
@Autowired
private MultiSwitchCollectionScheduler multiSwitchCollectionScheduler;
/**
@@ -130,211 +133,8 @@ public class MessageHandler {
if(!interfaces.isEmpty()) {
String clientId = message.getClientId();
RegisterMsgVo registerMsg = interfaces.get(0);
// 时间戳转换
long timestamp = registerMsg.getTimestamp();
long millis = timestamp * 1000;
Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒
List<NetworkInfo> networkInfoList = registerMsg.getNetworkInfo();
if(!networkInfoList.isEmpty()){
if(networkInfoList.size()==1){
NetworkInfo networkInfo = networkInfoList.get(0);
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setClientId(clientId);
queryParam.setMacAddress(networkInfo.getMac());
queryParam.setNewFlag(1);
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
if(exits.isEmpty()){
// 保存网卡信息
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setBindIp("3");
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
insertData.setCreateTime(createTime);
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else{
RmNetworkInterface oldInterfaceMsg = exits.get(0);
if(!StringUtils.equals(networkInfo.getName(),oldInterfaceMsg.getInterfaceName())
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setMacAddress(oldInterfaceMsg.getMacAddress());
query.setClientId(clientId);
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
rmNetworkInterfaceService.deleteRmNetworkInterfaceById(oldMsg.getId());
});
}
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else {
RmNetworkInterface updateData = new RmNetworkInterface();
// 检查其他字段是否需要更新
boolean needUpdate = false;
// 逐个字段比较是否需要更新
if (!StringUtils.equals(networkInfo.getCity(), oldInterfaceMsg.getCity())) {
updateData.setCity(networkInfo.getCity());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getIpv4(), oldInterfaceMsg.getIpv4Address())) {
updateData.setIpv4Address(networkInfo.getIpv4());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getProvince(), oldInterfaceMsg.getProvince())) {
updateData.setProvince(networkInfo.getProvince());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getPublicIp(), oldInterfaceMsg.getPublicIp())) {
updateData.setPublicIp(networkInfo.getPublicIp());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getCarrier(), oldInterfaceMsg.getIsp())) {
updateData.setIsp(networkInfo.getCarrier());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getType(), oldInterfaceMsg.getInterfaceType())) {
updateData.setInterfaceType(networkInfo.getType());
needUpdate = true;
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
}
}else{
for (NetworkInfo networkInfo : networkInfoList) {
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setClientId(clientId);
queryParam.setMacAddress(networkInfo.getMac());
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
if(exits.isEmpty()){
// 保存网卡信息
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
insertData.setCreateTime(createTime);
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else{
RmNetworkInterface oldInterfaceMsg = exits.get(0);
if(!StringUtils.equals(networkInfo.getName(),oldInterfaceMsg.getInterfaceName())
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setClientId(clientId);
query.setMacAddress(networkInfo.getMac());
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
rmNetworkInterfaceService.deleteRmNetworkInterfaceById(oldMsg.getId());
});
}
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else {
RmNetworkInterface updateData = new RmNetworkInterface();
// 检查其他字段是否需要更新
boolean needUpdate = false;
// 逐个字段比较是否需要更新
if (!StringUtils.equals(networkInfo.getCity(), oldInterfaceMsg.getCity())) {
updateData.setCity(networkInfo.getCity());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getIpv4(), oldInterfaceMsg.getIpv4Address())) {
updateData.setIpv4Address(networkInfo.getIpv4());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getProvince(), oldInterfaceMsg.getProvince())) {
updateData.setProvince(networkInfo.getProvince());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getPublicIp(), oldInterfaceMsg.getPublicIp())) {
updateData.setPublicIp(networkInfo.getPublicIp());
needUpdate = true;
updateData.setBindIp("0");
// 修改绑定公网ip状态
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
updateParam.setClientId(clientId);
updateParam.setMultiPublicIpStatus("0");
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
}
if (!StringUtils.equals(networkInfo.getCarrier(), oldInterfaceMsg.getIsp())) {
updateData.setIsp(networkInfo.getCarrier());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getType(), oldInterfaceMsg.getInterfaceType())) {
updateData.setInterfaceType(networkInfo.getType());
needUpdate = true;
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
}
}
}
}
// 处理网卡信息
processNetworkInterfaces(registerMsg, clientId, false);
}
}
@@ -386,212 +186,8 @@ public class MessageHandler {
rmAgentManagementService.insertRmAgentManagement(insertAgentUpdateData);
}
}
// 时间戳转换
long timestamp = registerMsg.getTimestamp();
long millis = timestamp * 1000;
Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒
String timeStr = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", createTime);
List<NetworkInfo> networkInfoList = registerMsg.getNetworkInfo();
if(!networkInfoList.isEmpty()){
if(networkInfoList.size()==1){
NetworkInfo networkInfo = networkInfoList.get(0);
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setClientId(clientId);
queryParam.setMacAddress(networkInfo.getMac());
queryParam.setNewFlag(1);
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
if(exits.isEmpty()){
// 保存网卡信息
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setBindIp("3");
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
insertData.setCreateTime(createTime);
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else{
RmNetworkInterface oldInterfaceMsg = exits.get(0);
if(!StringUtils.equals(networkInfo.getName(),oldInterfaceMsg.getInterfaceName())
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setClientId(clientId);
query.setMacAddress(oldInterfaceMsg.getMacAddress());
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
rmNetworkInterfaceService.deleteRmNetworkInterfaceById(oldMsg.getId());
});
}
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
oldData.setClientId(clientId);
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else {
RmNetworkInterface updateData = new RmNetworkInterface();
// 检查其他字段是否需要更新
boolean needUpdate = false;
// 逐个字段比较是否需要更新
if (!StringUtils.equals(networkInfo.getCity(), oldInterfaceMsg.getCity())) {
updateData.setCity(networkInfo.getCity());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getIpv4(), oldInterfaceMsg.getIpv4Address())) {
updateData.setIpv4Address(networkInfo.getIpv4());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getProvince(), oldInterfaceMsg.getProvince())) {
updateData.setProvince(networkInfo.getProvince());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getPublicIp(), oldInterfaceMsg.getPublicIp())) {
updateData.setPublicIp(networkInfo.getPublicIp());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getCarrier(), oldInterfaceMsg.getIsp())) {
updateData.setIsp(networkInfo.getCarrier());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getType(), oldInterfaceMsg.getInterfaceType())) {
updateData.setInterfaceType(networkInfo.getType());
needUpdate = true;
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
}
}else{
for (NetworkInfo networkInfo : networkInfoList) {
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setMacAddress(networkInfo.getMac());
queryParam.setClientId(clientId);
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
if(exits.isEmpty()){
// 保存网卡信息
RmNetworkInterface insertData = new RmNetworkInterface();
// 业务ip和管理网ip
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
insertData.setCreateTime(createTime);
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else{
RmNetworkInterface oldInterfaceMsg = exits.get(0);
if(!StringUtils.equals(networkInfo.getName(),oldInterfaceMsg.getInterfaceName())
|| !StringUtils.equals(networkInfo.getGateway(),oldInterfaceMsg.getGateway())){
// 查询该网卡信息是否旧数据
RmNetworkInterface query = new RmNetworkInterface();
query.setClientId(clientId);
query.setMacAddress(oldInterfaceMsg.getMacAddress());
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()){
// 先删除旧数据
oldExits.forEach(oldMsg ->{
rmNetworkInterfaceService.deleteRmNetworkInterfaceById(oldMsg.getId());
});
}
// 先将已存在的改为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
RmNetworkInterface insertData = new RmNetworkInterface();
insertData.setClientId(clientId);
insertData.setIsp(networkInfo.getCarrier());
insertData.setCity(networkInfo.getCity());
insertData.setGateway(networkInfo.getGateway());
insertData.setInterfaceName(networkInfo.getName());
insertData.setIpv4Address(networkInfo.getIpv4());
insertData.setMacAddress(networkInfo.getMac());
insertData.setProvince(networkInfo.getProvince());
insertData.setPublicIp(networkInfo.getPublicIp());
insertData.setInterfaceType(networkInfo.getType());
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
}else {
RmNetworkInterface updateData = new RmNetworkInterface();
// 检查其他字段是否需要更新
boolean needUpdate = false;
// 逐个字段比较是否需要更新
if (!StringUtils.equals(networkInfo.getCity(), oldInterfaceMsg.getCity())) {
updateData.setCity(networkInfo.getCity());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getIpv4(), oldInterfaceMsg.getIpv4Address())) {
updateData.setIpv4Address(networkInfo.getIpv4());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getProvince(), oldInterfaceMsg.getProvince())) {
updateData.setProvince(networkInfo.getProvince());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getPublicIp(), oldInterfaceMsg.getPublicIp())) {
updateData.setPublicIp(networkInfo.getPublicIp());
needUpdate = true;
updateData.setBindIp("0");
// 修改绑定公网ip状态
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
updateParam.setClientId(clientId);
updateParam.setMultiPublicIpStatus("0");
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
}
if (!StringUtils.equals(networkInfo.getCarrier(), oldInterfaceMsg.getIsp())) {
updateData.setIsp(networkInfo.getCarrier());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getType(), oldInterfaceMsg.getInterfaceType())) {
updateData.setInterfaceType(networkInfo.getType());
needUpdate = true;
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
}
}
}
}
// 处理网卡信息
processNetworkInterfaces(registerMsg, clientId, true);
}
}
@@ -1420,4 +1016,158 @@ public class MessageHandler {
}
}
}
/**
* 公共方法:处理网卡信息
* @param registerMsg 注册消息
* @param clientId 客户端ID
* @param isRegister 是否为注册消息
*/
private void processNetworkInterfaces(RegisterMsgVo registerMsg, String clientId, boolean isRegister) {
// 时间戳转换
long timestamp = registerMsg.getTimestamp();
long millis = timestamp * 1000;
Date createTime = new Date(millis / 1000 * 1000);
List<NetworkInfo> networkInfoList = registerMsg.getNetworkInfo();
if(networkInfoList.isEmpty()) {
return;
}
boolean isSingleInterface = networkInfoList.size() == 1;
for (NetworkInfo networkInfo : networkInfoList) {
// 查询该网卡信息是否存在
RmNetworkInterface queryParam = new RmNetworkInterface();
queryParam.setClientId(clientId);
queryParam.setMacAddress(networkInfo.getMac());
queryParam.setNewFlag(1);
List<RmNetworkInterface> exits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(queryParam);
if(exits.isEmpty()) {
// 新增网卡信息
RmNetworkInterface insertData = new RmNetworkInterface();
setNetworkInterfaceData(insertData, networkInfo, clientId);
insertData.setCreateTime(createTime);
// 设置bindIp
if (isSingleInterface) {
insertData.setBindIp("3");
}
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
} else {
// 更新网卡信息
RmNetworkInterface oldInterfaceMsg = exits.get(0);
// 判断是否需要创建新记录
boolean needCreateNew = !StringUtils.equals(networkInfo.getName(), oldInterfaceMsg.getInterfaceName())
|| !StringUtils.equals(networkInfo.getGateway(), oldInterfaceMsg.getGateway());
if(needCreateNew) {
// 清理旧的历史数据
cleanOldRecords(clientId, networkInfo.getMac());
// 将已存在的记录标记为旧数据
RmNetworkInterface oldData = new RmNetworkInterface();
oldData.setNewFlag(0);
oldData.setClientId(clientId);
oldData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(oldData);
// 创建新记录
RmNetworkInterface insertData = new RmNetworkInterface();
setNetworkInterfaceData(insertData, networkInfo, clientId);
rmNetworkInterfaceService.insertRmNetworkInterface(insertData);
} else {
// 更新现有记录
updateNetworkInterface(networkInfo, clientId, oldInterfaceMsg, isSingleInterface, isRegister);
}
}
}
}
/**
* 设置网卡信息公共字段
*/
private void setNetworkInterfaceData(RmNetworkInterface networkInterface, NetworkInfo networkInfo, String clientId) {
networkInterface.setClientId(clientId);
networkInterface.setIsp(networkInfo.getCarrier());
networkInterface.setCity(networkInfo.getCity());
networkInterface.setGateway(networkInfo.getGateway());
networkInterface.setInterfaceName(networkInfo.getName());
networkInterface.setIpv4Address(networkInfo.getIpv4());
networkInterface.setIpv6Address(networkInfo.getIpv6());
networkInterface.setMacAddress(networkInfo.getMac());
networkInterface.setProvince(networkInfo.getProvince());
networkInterface.setPublicIp(networkInfo.getPublicIp());
networkInterface.setInterfaceType(networkInfo.getType());
}
/**
* 清理旧记录
*/
private void cleanOldRecords(String clientId, String macAddress) {
RmNetworkInterface query = new RmNetworkInterface();
query.setClientId(clientId);
query.setMacAddress(macAddress);
query.setNewFlag(999);
List<RmNetworkInterface> oldExits = rmNetworkInterfaceService.selectRmNetworkInterfaceList(query);
if(!oldExits.isEmpty()) {
oldExits.forEach(oldMsg -> {
rmNetworkInterfaceService.deleteRmNetworkInterfaceById(oldMsg.getId());
});
}
}
/**
* 更新网卡信息
*/
private void updateNetworkInterface(NetworkInfo networkInfo, String clientId,
RmNetworkInterface oldInterfaceMsg, boolean isSingleInterface, boolean isRegister) {
RmNetworkInterface updateData = new RmNetworkInterface();
boolean needUpdate = false;
// 逐个字段比较是否需要更新
if (!StringUtils.equals(networkInfo.getCity(), oldInterfaceMsg.getCity())) {
updateData.setCity(networkInfo.getCity());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getIpv4(), oldInterfaceMsg.getIpv4Address())) {
updateData.setIpv4Address(networkInfo.getIpv4());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getIpv6(), oldInterfaceMsg.getIpv6Address())) {
updateData.setIpv6Address(networkInfo.getIpv6());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getProvince(), oldInterfaceMsg.getProvince())) {
updateData.setProvince(networkInfo.getProvince());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getPublicIp(), oldInterfaceMsg.getPublicIp())) {
updateData.setPublicIp(networkInfo.getPublicIp());
needUpdate = true;
// 特殊处理:非注册消息且多网卡时,更新公网IP状态
if (!isSingleInterface && !isRegister) {
updateData.setBindIp("0");
RmResourceRegistrationRemote updateParam = new RmResourceRegistrationRemote();
updateParam.setClientId(clientId);
updateParam.setMultiPublicIpStatus("0");
remoteRevenueConfigService.updateStatusByResource(updateParam, SecurityConstants.INNER);
}
}
if (!StringUtils.equals(networkInfo.getCarrier(), oldInterfaceMsg.getIsp())) {
updateData.setIsp(networkInfo.getCarrier());
needUpdate = true;
}
if (!StringUtils.equals(networkInfo.getType(), oldInterfaceMsg.getInterfaceType())) {
updateData.setInterfaceType(networkInfo.getType());
needUpdate = true;
}
// 只有有字段变化时才执行更新
if (needUpdate) {
updateData.setClientId(clientId);
updateData.setMacAddress(oldInterfaceMsg.getMacAddress());
rmNetworkInterfaceService.updateRmNetworkInterfaceByMac(updateData);
}
}
}
@@ -91,4 +91,18 @@ public interface IInitialBandwidthTrafficService
* @return
*/
Map<String, Object> netInterfaceDroppedEcharts(InitialBandwidthTraffic initialBandwidthTraffic);
/**
* 查询eth0 IPV4流量信息并封装为多折线ECharts图表数据
* @param initialBandwidthTraffic
* @return
*/
Map<String, Object> netInterfaceIpv4TrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic);
/**
* 查询eth0 IPV6流量信息并封装为多折线ECharts图表数据
* @param initialBandwidthTraffic
* @return
*/
Map<String, Object> netInterfaceIpv6TrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic);
}
@@ -280,4 +280,68 @@ public class InitialBandwidthTrafficServiceImpl implements IInitialBandwidthTraf
);
}
@Override
public Map<String, Object> netInterfaceIpv4TrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic) {
// 流量信息
List<InitialBandwidthTraffic> list = getListByTableName(initialBandwidthTraffic);
try {
String unit = SpeedUtils.calculateUnitWithStringTraffic(list, "ipv4InSpeed", "ipv4OutSpeed");
if(initialBandwidthTraffic.getUnit() != null){
unit = initialBandwidthTraffic.getUnit();
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<InitialBandwidthTraffic, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInSpeedData", info ->
info != null && info.getIpv4InSpeed() != null ?
new BigDecimal(info.getIpv4InSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("netOutSpeedData", info ->
info != null && info.getIpv4OutSpeed() != null ?
new BigDecimal(info.getIpv4OutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialBandwidthTraffic::getCreateTime, extractors,
initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime()
);
resultMap.put("unit", unit);
return resultMap;
} catch (Exception e){
e.printStackTrace();
}
return new HashMap<>();
}
@Override
public Map<String, Object> netInterfaceIpv6TrafficEcharts(InitialBandwidthTraffic initialBandwidthTraffic) {
// 流量信息
List<InitialBandwidthTraffic> list = getListByTableName(initialBandwidthTraffic);
try {
String unit = SpeedUtils.calculateUnitWithStringTraffic(list, "ipv6InSpeed", "ipv6OutSpeed");
if(initialBandwidthTraffic.getUnit() != null){
unit = initialBandwidthTraffic.getUnit();
}
BigDecimal divisor = SpeedUtils.getDivisor(unit);
Map<String, Function<InitialBandwidthTraffic, ?>> extractors = new LinkedHashMap<>();
extractors.put("netInSpeedData", info ->
info != null && info.getIpv6InSpeed() != null ?
new BigDecimal(info.getIpv6InSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
extractors.put("netOutSpeedData", info ->
info != null && info.getIpv6OutSpeed() != null ?
new BigDecimal(info.getIpv6OutSpeed()).divide(divisor, 2, RoundingMode.HALF_UP) :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, InitialBandwidthTraffic::getCreateTime, extractors,
initialBandwidthTraffic.getStartTime(), initialBandwidthTraffic.getEndTime()
);
resultMap.put("unit", unit);
return resultMap;
} catch (Exception e){
e.printStackTrace();
}
return new HashMap<>();
}
}
@@ -22,6 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="clientId" column="client_id"/>
<result property="speed" column="speed"/>
<result property="duplex" column="duplex"/>
</resultMap>
<sql id="selectInitialBandwidthTrafficVo"> select id, name, mac, status, type, ipV4, in_dropped, out_dropped, in_speed, out_speed, create_time, update_time, create_by, update_by, client_id from initial_bandwidth_traffic </sql>
<select id="selectInitialBandwidthTrafficList" parameterType="InitialBandwidthTraffic" resultMap="InitialBandwidthTrafficResult">
@@ -143,12 +144,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</insert>
<select id="getNetInterfaceDetailsMsg" parameterType="InitialBandwidthTraffic" resultMap="InitialBandwidthTrafficResult">
select id, `name`, mac, status, `type`, ipV4, in_dropped, out_dropped, in_speed, out_speed,
total_in_speed, total_out_speed, create_time, update_time, create_by, update_by,
client_id, duplex, speed,
ipv4_in_speed, ipv4_out_speed, ipv6_in_speed, ipv6_out_speed,
total_ipv4_in_speed, total_ipv4_out_speed, total_ipv6_in_speed, total_ipv6_out_speed,
<select id="getNetInterfaceDetailsMsg" parameterType="InitialBandwidthTraffic" resultType="InitialBandwidthTraffic">
select
id,
`name`,
mac,
status,
`type`,
ipV4,
in_dropped as inDropped,
out_dropped as outDropped,
in_speed as inSpeed,
out_speed as outSpeed,
total_in_speed as totalInSpeed,
total_out_speed as totalOutSpeed,
create_time as createTime,
update_time as updateTime,
create_by as createBy,
update_by as updateBy,
client_id as clientId,
duplex,
speed,
ipv4_in_speed as ipv4InSpeed,
ipv4_out_speed as ipv4OutSpeed,
ipv6_in_speed as ipv6InSpeed,
ipv6_out_speed as ipv6OutSpeed,
total_ipv4_in_speed as totalIpv4InSpeed,
total_ipv4_out_speed as totalIpv4OutSpeed,
total_ipv6_in_speed as totalIpv6InSpeed,
total_ipv6_out_speed as totalIpv6OutSpeed,
ipV6
from ${tableName}
<where>
@@ -159,12 +183,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
limit 1
</select>
<select id="getNetTrafficList" parameterType="InitialBandwidthTraffic" resultMap="InitialBandwidthTrafficResult">
select id, `name`, mac, status, `type`, ipV4, in_dropped, out_dropped, in_speed, out_speed,
total_in_speed, total_out_speed, create_time, update_time, create_by, update_by,
client_id, duplex, speed,
ipv4_in_speed, ipv4_out_speed, ipv6_in_speed, ipv6_out_speed,
total_ipv4_in_speed, total_ipv4_out_speed, total_ipv6_in_speed, total_ipv6_out_speed,
<select id="getNetTrafficList" parameterType="InitialBandwidthTraffic" resultType="InitialBandwidthTraffic">
select
id,
`name`,
mac,
status,
`type`,
ipV4,
in_dropped as inDropped,
out_dropped as outDropped,
in_speed as inSpeed,
out_speed as outSpeed,
total_in_speed as totalInSpeed,
total_out_speed as totalOutSpeed,
create_time as createTime,
update_time as updateTime,
create_by as createBy,
update_by as updateBy,
client_id as clientId,
duplex,
speed,
ipv4_in_speed as ipv4InSpeed,
ipv4_out_speed as ipv4OutSpeed,
ipv6_in_speed as ipv6InSpeed,
ipv6_out_speed as ipv6OutSpeed,
total_ipv4_in_speed as totalIpv4InSpeed,
total_ipv4_out_speed as totalIpv4OutSpeed,
total_ipv6_in_speed as totalIpv6InSpeed,
total_ipv6_out_speed as totalIpv6OutSpeed,
ipV6
from ${tableName}
<where>
@@ -15,6 +15,7 @@
<result property="macAddress" column="mac_address" />
<result property="interfaceType" column="interface_type" />
<result property="ipv4Address" column="ipv4_address" />
<result property="ipv6Address" column="ipv6_address" />
<result property="gateway" column="gateway" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
@@ -25,7 +26,7 @@
</resultMap>
<sql id="selectRmNetworkInterfaceVo">
select id, client_id, isp, province, city, public_ip, interface_name, mac_address, interface_type, ipv4_address, gateway, create_time, update_time, create_by, update_by, bind_ip, new_flag from rm_network_interface
select id, client_id, isp, province, city, public_ip, interface_name, mac_address, interface_type, ipv4_address, ipv6_address, gateway, create_time, update_time, create_by, update_by, bind_ip, new_flag from rm_network_interface
</sql>
<select id="selectRmNetworkInterfaceList" parameterType="RmNetworkInterface" resultMap="RmNetworkInterfaceResult">
@@ -70,6 +71,7 @@
<if test="macAddress != null">mac_address,</if>
<if test="interfaceType != null">interface_type,</if>
<if test="ipv4Address != null">ipv4_address,</if>
<if test="ipv6Address != null">ipv6_address,</if>
<if test="gateway != null">gateway,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
@@ -88,6 +90,7 @@
<if test="macAddress != null">#{macAddress},</if>
<if test="interfaceType != null">#{interfaceType},</if>
<if test="ipv4Address != null">#{ipv4Address},</if>
<if test="ipv6Address != null">#{ipv6Address},</if>
<if test="gateway != null">#{gateway},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
@@ -110,6 +113,7 @@
<if test="macAddress != null">mac_address = #{macAddress},</if>
<if test="interfaceType != null">interface_type = #{interfaceType},</if>
<if test="ipv4Address != null">ipv4_address = #{ipv4Address},</if>
<if test="ipv6Address != null">ipv6_address = #{ipv6Address},</if>
<if test="gateway != null">gateway = #{gateway},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
@@ -142,6 +146,7 @@
<if test="macAddress != null">mac_address = #{macAddress},</if>
<if test="interfaceType != null">interface_type = #{interfaceType},</if>
<if test="ipv4Address != null">ipv4_address = #{ipv4Address},</if>
<if test="ipv6Address != null">ipv6_address = #{ipv6Address},</if>
<if test="gateway != null">gateway = #{gateway},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>