业务节点监控接口

monitor
liuqingkun 1 year ago
parent 172376c1fd
commit 9c7b119bf1
  1. 20
      src/main/java/org/springblade/modules/monitor/controller/BusinessMonitorController.java
  2. 5
      src/main/java/org/springblade/modules/monitor/entity/ConfigMonitor.java
  3. 5
      src/main/java/org/springblade/modules/monitor/service/IConfigMonitorService.java
  4. 129
      src/main/java/org/springblade/modules/monitor/service/impl/ConfigMonitorServiceImpl.java

@ -1,13 +1,20 @@
package org.springblade.modules.monitor.controller; package org.springblade.modules.monitor.controller;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.map.HashedMap;
import org.springblade.core.tool.api.R; import org.springblade.core.tool.api.R;
import org.springblade.modules.monitor.service.IBusinessMonitorService; import org.springblade.modules.monitor.service.IBusinessMonitorService;
import org.springblade.modules.monitor.service.IConfigMonitorService;
import org.springblade.modules.monitor.vo.ConfigMonitorVO;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 业务监控控制器 * 业务监控控制器
* *
@ -19,6 +26,19 @@ import org.springframework.web.bind.annotation.RestController;
public class BusinessMonitorController { public class BusinessMonitorController {
private final IBusinessMonitorService businessMonitorService; private final IBusinessMonitorService businessMonitorService;
private final IConfigMonitorService monitorService;
/**
* 根据服务类型code查询该服务下的所有通讯链路及报警节点
*
* @param serviceCode
* @return
*/
@GetMapping("/getWarnPoint")
public R getWarnPoint(@RequestParam("serviceCode") String serviceCode) {
return R.data(monitorService.getWarnLinePoint(serviceCode));
}
/** /**
* 根据设备类型和报警节点查询排查方法 * 根据设备类型和报警节点查询排查方法
* *

@ -100,6 +100,11 @@ public class ConfigMonitor extends BaseEntity {
@ApiModelProperty("创建部门") @ApiModelProperty("创建部门")
private Long createDept; private Long createDept;
/**
* 图标
*/
@ApiModelProperty(value = "图标")
private String icon;
/** /**
* 服务颜色 * 服务颜色
*/ */

@ -16,11 +16,14 @@
*/ */
package org.springblade.modules.monitor.service; package org.springblade.modules.monitor.service;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.google.gson.JsonArray;
import org.springblade.modules.monitor.entity.ConfigMonitor; import org.springblade.modules.monitor.entity.ConfigMonitor;
import org.springblade.modules.monitor.vo.ConfigMonitorVO; import org.springblade.modules.monitor.vo.ConfigMonitorVO;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 服务器监控基础配置表 服务类 * 服务器监控基础配置表 服务类
@ -40,4 +43,6 @@ public interface IConfigMonitorService extends IService<ConfigMonitor> {
* @return * @return
*/ */
List<ConfigMonitorVO> tree(); List<ConfigMonitorVO> tree();
Object getWarnLinePoint(String parentId);
} }

@ -16,11 +16,15 @@
*/ */
package org.springblade.modules.monitor.service.impl; package org.springblade.modules.monitor.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.gson.JsonArray;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -135,18 +139,18 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
//如果所有设备都坏了,直接排查父级问题;否则修改设备状态为异常 //如果所有设备都坏了,直接排查父级问题;否则修改设备状态为异常
//modbus设备排查服务、网关;mqtt设备排查服务、mqtt服务、dtu;bacnet设备是通过广播直连,如果全部设备都有问题,直接排查网络问题; //modbus设备排查服务、网关;mqtt设备排查服务、mqtt服务、dtu;bacnet设备是通过广播直连,如果全部设备都有问题,直接排查网络问题;
if(breakList.size() == monitorList.size()){ if (breakList.size() == monitorList.size()) {
boolean flag = true; boolean flag = true;
for(Long id : parentIdList){ for (Long id : parentIdList) {
//通过标识位来判断当前是否应该静默 //通过标识位来判断当前是否应该静默
if(flag){ if (flag) {
LambdaQueryWrapper<ConfigMonitor> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ConfigMonitor> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ConfigMonitor::getId,id); wrapper.eq(ConfigMonitor::getId, id);
wrapper.eq(BaseEntity::getIsDeleted,0); wrapper.eq(BaseEntity::getIsDeleted, 0);
ConfigMonitor configMonitor = baseMapper.selectOne(wrapper); ConfigMonitor configMonitor = baseMapper.selectOne(wrapper);
//服务排查 //服务排查
if(configMonitor.getType().equals(MonitorConstant.SERVICE) && configMonitor.getResult().equals(MonitorConstant.RESULT)){ if (configMonitor.getType().equals(MonitorConstant.SERVICE) && configMonitor.getResult().equals(MonitorConstant.RESULT)) {
flag = false; flag = false;
configMonitor.setStatus(MonitorConstant.STATUS_2); configMonitor.setStatus(MonitorConstant.STATUS_2);
configMonitor.setUpdateTime(nowDate); configMonitor.setUpdateTime(nowDate);
@ -155,11 +159,11 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
continue; continue;
} }
//mqtt服务排查 //mqtt服务排查
if(configMonitor.getType().equals(MonitorConstant.MIDDLEWARE) && configMonitor.getMonitorType().equals(MonitorConstant.MQTT)){ if (configMonitor.getType().equals(MonitorConstant.MIDDLEWARE) && configMonitor.getMonitorType().equals(MonitorConstant.MQTT)) {
//通过查询所有mqtt相关设备来判断mqtt服务是否正常 //通过查询所有mqtt相关设备来判断mqtt服务是否正常
int count = baseMapper.findMqttEquipCount(DateFormatUtils.format(time,"yyyy-MM-dd HH:mm:ss")); int count = baseMapper.findMqttEquipCount(DateFormatUtils.format(time, "yyyy-MM-dd HH:mm:ss"));
//如果count=0说明所有mqtt相关设备都没取到数,可证明mqtt出现问题 //如果count=0说明所有mqtt相关设备都没取到数,可证明mqtt出现问题
if(count == 0){ if (count == 0) {
flag = false; flag = false;
parentId = id; parentId = id;
configMonitor.setStatus(MonitorConstant.STATUS_2); configMonitor.setStatus(MonitorConstant.STATUS_2);
@ -169,43 +173,43 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
} }
} }
//网关排查 --适用于modbus 空调面板 lora网关;mqtt dtu;http 空开照明 通讯模块; //网关排查 --适用于modbus 空调面板 lora网关;mqtt dtu;http 空开照明 通讯模块;
if(configMonitor.getType().equals(MonitorConstant.MIDDLEWARE) && configMonitor.getMonitorType().equals(MonitorConstant.GATEWAY) && StringUtils.isNotEmpty(configMonitor.getIp())){ if (configMonitor.getType().equals(MonitorConstant.MIDDLEWARE) && configMonitor.getMonitorType().equals(MonitorConstant.GATEWAY) && StringUtils.isNotEmpty(configMonitor.getIp())) {
//ping网关ip,如果能ping通,则证明是网关本身有问题,如果ping不通,说明通信有问题 //ping网关ip,如果能ping通,则证明是网关本身有问题,如果ping不通,说明通信有问题
boolean isNormal = IpUtil.isIPReachable(configMonitor.getIp()); boolean isNormal = IpUtil.isIPReachable(configMonitor.getIp());
if(isNormal){ if (isNormal) {
configMonitor.setStatus(MonitorConstant.STATUS_2); configMonitor.setStatus(MonitorConstant.STATUS_2);
}else{ } else {
configMonitor.setStatus(MonitorConstant.STATUS_3); configMonitor.setStatus(MonitorConstant.STATUS_3);
} }
configMonitor.setUpdateTime(nowDate); configMonitor.setUpdateTime(nowDate);
baseMapper.updateById(configMonitor); baseMapper.updateById(configMonitor);
} }
}else{ } else {
//如果是静默,根据parentId将所有子节点状态改为静默 //如果是静默,根据parentId将所有子节点状态改为静默
LambdaUpdateWrapper<ConfigMonitor> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<ConfigMonitor> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ConfigMonitor::getParentId,parentId); updateWrapper.eq(ConfigMonitor::getParentId, parentId);
ConfigMonitor configMonitor = new ConfigMonitor(); ConfigMonitor configMonitor = new ConfigMonitor();
configMonitor.setStatus(MonitorConstant.STATUS_4); configMonitor.setStatus(MonitorConstant.STATUS_4);
//configMonitor.setUpdateTime(nowDate); //configMonitor.setUpdateTime(nowDate);
baseMapper.update(configMonitor,updateWrapper); baseMapper.update(configMonitor, updateWrapper);
parentId = id; parentId = id;
} }
} }
//将所有设备状态改为静默 //将所有设备状态改为静默
breakList.forEach(item ->{ breakList.forEach(item -> {
item.setStatus(MonitorConstant.STATUS_4); item.setStatus(MonitorConstant.STATUS_4);
//item.setUpdateTime(nowDate); //item.setUpdateTime(nowDate);
baseMapper.updateById(item); baseMapper.updateById(item);
}); });
}else{ } else {
for(ConfigMonitor configMonitor : breakList){ for (ConfigMonitor configMonitor : breakList) {
configMonitor.setStatus(MonitorConstant.STATUS_2); configMonitor.setStatus(MonitorConstant.STATUS_2);
baseMapper.updateById(configMonitor); baseMapper.updateById(configMonitor);
} }
//将父级id设备状态更新为正常 //将父级id设备状态更新为正常
LambdaQueryWrapper<ConfigMonitor> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ConfigMonitor> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ConfigMonitor::getId,parentId); wrapper.eq(ConfigMonitor::getId, parentId);
wrapper.eq(BaseEntity::getIsDeleted,0); wrapper.eq(BaseEntity::getIsDeleted, 0);
ConfigMonitor configMonitor = baseMapper.selectOne(wrapper); ConfigMonitor configMonitor = baseMapper.selectOne(wrapper);
configMonitor.setStatus(MonitorConstant.STATUS_1); configMonitor.setStatus(MonitorConstant.STATUS_1);
baseMapper.updateById(configMonitor); baseMapper.updateById(configMonitor);
@ -220,23 +224,94 @@ public class ConfigMonitorServiceImpl extends ServiceImpl<ConfigMonitorMapper, C
return ForestNodeMerger.merge(baseMapper.tree()); return ForestNodeMerger.merge(baseMapper.tree());
} }
public List<Long> getParentIdList(List<Long> parentIdList,Long parentId){ @Override
public Object getWarnLinePoint(String parentId) {
// 先查询该微服务
List resultList = new ArrayList();
ConfigMonitor monitor = baseMapper.selectOne(Wrappers.<ConfigMonitor>lambdaQuery().eq(ConfigMonitor::getId, parentId));
if (monitor == null) {
return resultList;
}
JSONObject monitorJson = new JSONObject();
monitorJson.put("parent", null);
monitorJson.put("id", monitor.getId());
monitorJson.put("name", monitor.getMonitorType());
monitorJson.put("type", monitor.getType());
monitorJson.put("class_code", monitor.getClassCode());
monitorJson.put("status", monitor.getStatus());
monitorJson.put("icon", monitor.getIcon());
// 递归查询该微服务下的所有设备
JSONArray allEquipArray = getChildList(monitorJson);
// 遍历设备组织返回数据
JSONObject resultObj = new JSONObject();
for (Object o : allEquipArray) {
JSONObject item = JSONObject.parseObject(JSON.toJSONString(o));
resultObj.put("classCode", item.getString("class_code"));
resultObj.put("lineData", getLineData(item));
resultList.add(resultObj);
}
return resultList.stream().distinct().collect(Collectors.toList());
}
private JSONArray getChildList(JSONObject parent) {
JSONArray resultArray = new JSONArray();
// 查询子等级的设备
List<ConfigMonitor> monitor1List = baseMapper.selectList(Wrappers.<ConfigMonitor>lambdaQuery().eq(ConfigMonitor::getParentId, parent.getLong("id")));
if (monitor1List == null || monitor1List.size() == 0) {
resultArray.add(parent);
return resultArray;
} else {
for (ConfigMonitor monitor : monitor1List) {
JSONObject monitorJson = new JSONObject();
monitorJson.put("parent", parent);
monitorJson.put("id", monitor.getId());
monitorJson.put("name", monitor.getMonitorType());
monitorJson.put("type", monitor.getType());
monitorJson.put("class_code", monitor.getClassCode());
monitorJson.put("status", monitor.getStatus());
monitorJson.put("icon", monitor.getIcon());
resultArray.addAll(getChildList(monitorJson));
}
}
return resultArray;
}
private JSONArray getLineData(JSONObject item) {
JSONArray resultArray = new JSONArray();
JSONObject parent = item.getJSONObject("parent");
if (parent == null) {
item.put("parent", "0");
resultArray.add(item);
} else {
item.put("parent", parent.getString("id"));
resultArray.add(item);
for (Object lineDatum : getLineData(parent)) {
resultArray.add(lineDatum);
}
}
return resultArray;
}
private List<Long> getParentIdList(List<Long> parentIdList, Long parentId) {
parentIdList.add(parentId); parentIdList.add(parentId);
if(parentId != 0){ if (parentId != 0) {
LambdaQueryWrapper<ConfigMonitor> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ConfigMonitor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ConfigMonitor::getId,parentId); queryWrapper.eq(ConfigMonitor::getId, parentId);
queryWrapper.eq(BaseEntity::getIsDeleted,0); queryWrapper.eq(BaseEntity::getIsDeleted, 0);
ConfigMonitor configMonitor = baseMapper.selectOne(queryWrapper); ConfigMonitor configMonitor = baseMapper.selectOne(queryWrapper);
parentId = configMonitor.getParentId(); parentId = configMonitor.getParentId();
//服务器不需要排查,所以只需要到服务层面就可以 //服务器不需要排查,所以只需要到服务层面就可以
if(configMonitor.getType().equals(MonitorConstant.SERVICE)){ if (configMonitor.getType().equals(MonitorConstant.SERVICE)) {
return parentIdList; return parentIdList;
} }
getParentIdList(parentIdList,parentId); getParentIdList(parentIdList, parentId);
} }
return parentIdList; return parentIdList;
} }
} }

Loading…
Cancel
Save