From 51396d6ed0747b1e909056ed72108b6b0c811667 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 13 十一月 2024 11:00:58 +0800
Subject: [PATCH] 离线检测优化
---
ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java | 5 +
ycl-server/src/main/java/com/ycl/config/RedisConfig.java | 3
ycl-server/src/main/java/com/ycl/task/UYTask.java | 63 +++++++++++---------
ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java | 64 +++++++++++++++------
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 15 ++---
ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java | 6 +-
6 files changed, 95 insertions(+), 61 deletions(-)
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java
index 828af36..d3de595 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java
@@ -29,12 +29,11 @@
private String pingOnlineStr;
/** 褰撴棩鐩戞祴娆℃暟 */
private Integer checkCount;
- /** 褰撴棩绂荤嚎 */
+ /** 褰撴棩绂荤嚎娆℃暟 */
private Integer offLineCount;
/**
* 绂荤嚎鏃堕棿鐐�
*/
- private List<Date> offLineTime;
private List<String> offLineTimeStr;
/** 璁惧绫诲瀷 */
private String monitorType;
@@ -42,6 +41,8 @@
private String name;
private WorkOrder workOrder;
private Integer pointId;
+ /** 鍙敤浣滃綋姝ゆ娴嬬粨鏋滃垽鏂紝涓嶄綔灞曠ず */
+ private Boolean createWorkOrder;
/**
* 鍔ㄦ�佸垪
*/
diff --git a/ycl-server/src/main/java/com/ycl/config/RedisConfig.java b/ycl-server/src/main/java/com/ycl/config/RedisConfig.java
index 86babf0..5e49ef0 100644
--- a/ycl-server/src/main/java/com/ycl/config/RedisConfig.java
+++ b/ycl-server/src/main/java/com/ycl/config/RedisConfig.java
@@ -11,7 +11,7 @@
/**
* redis閰嶇疆
- *
+ *
* @author ruoyi
*/
@Configuration
@@ -36,6 +36,7 @@
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
+
return template;
}
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
index 9ea32fa..3813971 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -86,8 +86,11 @@
if (params.getOption() != null) {
query.addCriteria(Criteria.where("online").is(params.getOption()));
}
+ Sort sort = Sort.by(
+ Sort.Order.asc("pingOnline") // 棣栧厛鎸夌収 pingOnline 鍗囧簭鎺掑簭
+ );
// 閫氳繃pingOnline瀛楁鎺掑簭锛屼负false鐨勬帓鍦ㄥ墠闈�
- query.with(Sort.by(Sort.Order.asc("pingOnline")));
+ query.with(sort);
//鍒嗛〉鏁伴噺
long total = mongoTemplate.count(query, TMonitorResult.class);
MongoUtil.setPage(query, params, TIME_FIELD);
@@ -107,19 +110,13 @@
} else {
item.setOnlineStr("鏈煡");
}
- List<Date> offLineTime = item.getOffLineTime();
+ List<String> offLineTime = item.getOffLineTimeStr();
if(!CollectionUtils.isEmpty(offLineTime)) {
//鍚庣画鍙互鏀规垚閰嶇疆鐨勭绾挎鏁�(鎻愬彇鍓峮娆★紝n涓洪厤缃殑绂荤嚎娆℃暟)
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (offLineTime.size() > 1) {
offLineTime = offLineTime.subList(0, 2);
}
- List<String> dateStr = new ArrayList<>();
- for (Date date : offLineTime) {
- String formatDate = format.format(date);
- dateStr.add(formatDate);
- }
- item.setOffLineTimeStr(dateStr);
+ item.setOffLineTimeStr(offLineTime);
}
});
params.setDeptTag(-1);
diff --git a/ycl-server/src/main/java/com/ycl/task/UYTask.java b/ycl-server/src/main/java/com/ycl/task/UYTask.java
index 0256642..f788121 100644
--- a/ycl-server/src/main/java/com/ycl/task/UYTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -195,7 +195,7 @@
for (TMonitorResult result : monitorList) {
TMonitorResult mongoData = mongoMap.get(result.getNo());
if(mongoData!=null){
- result.setOffLineTime(mongoData.getOffLineTime());
+ result.setOffLineTimeStr(mongoData.getOffLineTimeStr());
}
}
List<TMonitorResult> dataList = new ArrayList<>(48);
@@ -206,37 +206,44 @@
return thread.call(); // 鍋囪 OnlineCheckThread 瀹炵幇浜� Callable 鎺ュ彛
}, executorService)
.orTimeout(60, TimeUnit.SECONDS)
- //鍑虹幇寮傚父
.exceptionally(ex -> {
if (ex instanceof TimeoutException) {
log.error("浠诲姟鎵ц瓒呮椂:"+monitor.getIp());
} else {
- log.error("浠诲姟鎵ц寮傚父:"+monitor.getIp() + ex);
+ log.error("浠诲姟鎵ц寮傚父:"+monitor.getIp() +ex);
+ ex.printStackTrace();
}
- int checkTimes = 1;
- int offLineTimes = 1;
- Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getIp());
- if (!CollectionUtils.isEmpty(map)) {
- checkTimes = (Integer) map.get("checkTimes") + 1;
- offLineTimes = (Integer) map.get("offLineTimes");
- }
- monitor.setPingOnline(Boolean.FALSE);
- monitor.setCheckCount(checkTimes);
- monitor.setOffLineCount(offLineTimes);
- List<Date> offLineTime = monitor.getOffLineTime();
- if(CollectionUtils.isEmpty(offLineTime)) offLineTime = new ArrayList<>();
- offLineTime.add(new Date());
- monitor.setOffLineTime(offLineTime);
- if (monitor.getOffLineCount() >= time) {
- WorkOrder workOrder = new WorkOrder();
- workOrder.setSerialNumber(monitor.getNo());
- List<String> errList = new ArrayList<>();
- errList.add(ErrorType.DEVICE_OFFLINE.getValue());
- workOrder.setErrorTypeList(errList);
- workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
- monitor.setWorkOrder(workOrder);
- }
- return monitor; // 杩斿洖澶辫触鐨勭粨鏋�
+ return null;
+// int checkTimes = 1;
+// int offLineTimes = 1;
+// Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getNo());
+// if (!CollectionUtils.isEmpty(map)) {
+// checkTimes = (Integer) map.get("checkTimes") + 1;
+// offLineTimes = (Integer) map.get("offLineTimes");
+// }else {
+// map = new HashMap<>();
+// }
+// monitor.setPingOnline(Boolean.FALSE);
+// monitor.setCheckCount(checkTimes);
+// monitor.setOffLineCount(offLineTimes);
+// List<Date> offLineTime = monitor.getOffLineTime();
+// if(CollectionUtils.isEmpty(offLineTime)) offLineTime = new ArrayList<>();
+// offLineTime.add(new Date());
+// monitor.setOffLineTime(offLineTime);
+// if (monitor.getOffLineCount() >= time) {
+// WorkOrder workOrder = new WorkOrder();
+// workOrder.setSerialNumber(monitor.getNo());
+// List<String> errList = new ArrayList<>();
+// errList.add(ErrorType.DEVICE_OFFLINE.getValue());
+// workOrder.setErrorTypeList(errList);
+// workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+// monitor.setWorkOrder(workOrder);
+// }
+// map.put("checkTimes", checkTimes);
+// map.put("offLineTimes", offLineTimes);
+// redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getNo(), map);
+// return monitor; // 杩斿洖澶辫触鐨勭粨鏋�
+
}))
.collect(Collectors.toList());
@@ -247,7 +254,7 @@
try {
allOf.get(60, TimeUnit.SECONDS); // 缁欎簣棰濆鐨�5绉掓潵鏀堕泦缁撴灉
} catch (TimeoutException e) {
- log.warn("閮ㄥ垎浠诲姟鏈湪鎸囧畾鏃堕棿鍐呭畬鎴�");
+ log.error("閮ㄥ垎浠诲姟鏈湪鎸囧畾鏃堕棿鍐呭畬鎴�");
} catch (Exception e2){
log.error("鏁版嵁鏀堕泦寮傚父"+e2);
}
diff --git a/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
index c00ca77..fffb50e 100644
--- a/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
+++ b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
@@ -62,9 +62,9 @@
@Override
public TMonitorResult call() {
- TMonitorResult result = checkPointUtil.check(monitor);
- // 杩欐涓嶅湪绾夸笖涓�澶╁唴鐩戞祴鍒扮绾�2娆″強浠ヤ笂锛岀敓鎴愬伐鍗�
- if (!result.getPingOnline() && result.getOffLineCount() >= times) {
+ TMonitorResult result = checkPointUtil.check(monitor,times);
+
+ if (result.getCreateWorkOrder()!=null && result.getCreateWorkOrder()) {
WorkOrder workOrder = new WorkOrder();
workOrder.setSerialNumber(result.getNo());
List<String> errList = new ArrayList<>();
diff --git a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
index cc5fa17..9f873da 100644
--- a/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
+++ b/ycl-server/src/main/java/com/ycl/utils/CheckPointUtil.java
@@ -25,6 +25,7 @@
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
import java.util.*;
/**
@@ -44,9 +45,10 @@
/**
* 鐩戞祴鐐逛綅鍦ㄧ嚎宸ュ叿绫�
+ *
* @return
*/
- public TMonitorResult check(TMonitorResult monitor) {
+ public TMonitorResult check(TMonitorResult monitor,Integer times) {
// 鍏堟娴嬭兘鍚﹁闂ip鐨勭綉椤�
ResponseEntity<String> res = null;
String prefix = "http://";
@@ -64,14 +66,23 @@
boolean reachable = false;
Integer checkTimes = 1;
Integer offLineTimes = 0;
- Map<String, Object> map = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getIp());
- if (!CollectionUtils.isEmpty(map)) {
+ Integer continueOffTimes = 0;
+ List<String> offTimeList = new ArrayList<>();
+ // 浠嶳edis鑾峰彇鏁版嵁鏃惰繘琛岀被鍨嬪畨鍏ㄧ殑杞崲
+ Map<String, Object> map = null;
+ Object mapObj = redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getNo());
+ if (mapObj != null) {
+ map = (Map<String, Object>) mapObj;
checkTimes = (Integer) map.get("checkTimes") + 1;
offLineTimes = (Integer) map.get("offLineTimes");
+ continueOffTimes = (Integer) map.get("continueOffTimes");
+ Object offTimeListObj = map.get("offTimeList");
+ if (offTimeListObj instanceof List) {
+ offTimeList = new ArrayList<>((List<String>) offTimeListObj);
+ }
} else {
map = new HashMap<>();
}
-
if (!monitor.getPingOnline()) {
try {
reachable = InetAddress.getByName(monitor.getIp()).isReachable(5000);
@@ -82,14 +93,30 @@
}
if (!monitor.getPingOnline()) {
offLineTimes++;
- List<Date> offLineTime = monitor.getOffLineTime();
- if(CollectionUtils.isEmpty(offLineTime)) offLineTime = new ArrayList<>();
- offLineTime.add(new Date());
- monitor.setOffLineTime(offLineTime);
+ continueOffTimes++;
+ //璁板綍绂荤嚎鏃堕棿
+ Date now = new Date();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ offTimeList.add(dateFormat.format(now));
+ //鍒拌揪浜х敓宸ュ崟鐨勯槇鍊兼鏁�
+ if (continueOffTimes>=times) {
+ //浜х敓浜嗗伐鍗曟墠浼氬瓨鍌ㄧ绾挎椂闂�,瀛樺偍鏈�杩戜竴娆′骇鐢熷伐鍗曠殑杩欏嚑涓绾挎椂闂寸偣
+ monitor.setOffLineTimeStr(offTimeList);
+ monitor.setCreateWorkOrder(Boolean.TRUE);
+ //浜х敓浜嗕竴娆″伐鍗曞垯娓呴櫎
+ continueOffTimes = 0;
+ offTimeList = new ArrayList<>();
+ }
+ }else {
+ //濡傛灉鍦ㄧ嚎浜嗭紝娓呯┖杩炵画绂荤嚎娆℃暟锛屾竻绌虹绾挎椂闂�
+ continueOffTimes = 0;
+ offTimeList = new ArrayList<>();
}
map.put("checkTimes", checkTimes);
map.put("offLineTimes", offLineTimes);
- redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getIp(), map);
+ map.put("continueOffTimes", continueOffTimes);
+ map.put("offTimeList", offTimeList);
+ redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getNo(), map);
monitor.setCheckCount(checkTimes);
monitor.setOffLineCount(offLineTimes);
return monitor;
@@ -98,6 +125,7 @@
/**
* 鐩戞祴鐐逛綅鍦ㄧ嚎
+ *
* @return
*/
public CheckResult webCheck(CheckUtil checkUtil) {
@@ -122,7 +150,7 @@
ResponseEntity<String> res = selfHttpUtil.get(prefix + checkUtil.getIp(), null, null);
webReachable = Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode();
} catch (Exception e) {
- log.info("妫�娴媤eb寮傚父"+e.getMessage());
+ log.info("妫�娴媤eb寮傚父" + e.getMessage());
webReachable = Boolean.FALSE;
}
// ping
@@ -136,7 +164,7 @@
e.printStackTrace();
}
String imgUrl = "";
- if(pingReachable || webReachable) {
+ if (pingReachable || webReachable) {
// 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹�
List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
.orderByDesc(DeviceInfo::getUpdateTime)
@@ -152,21 +180,21 @@
}
}
String status = "";
- if (! webReachable) {
+ if (!webReachable) {
status += "璁惧web璁块棶澶辫触锛�";
- }else if(webReachable){
+ } else if (webReachable) {
status += "璁惧web璁块棶姝e父锛�";
}
- if (! pingReachable) {
+ if (!pingReachable) {
status += "璁惧ip鏈猵ing閫氾紱";
- }else if(pingReachable){
+ } else if (pingReachable) {
status += "璁惧ipPing姝e父锛�";
}
if (StringUtils.isEmpty(imgUrl)) {
status += "鏈幏鍙栧埌鍥剧墖";
- }else {
+ } else {
status += "鑾峰彇鍥剧墖姝e父";
}
result.setStatus(status);
@@ -198,9 +226,9 @@
e.printStackTrace();
}
String status = "";
- if (! pingReachable) {
+ if (!pingReachable) {
status += "ip鏈猵ing閫氾紱";
- }else {
+ } else {
status += "鎴愬姛";
}
result.setStatus(status);
--
Gitblit v1.8.0