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