From a136c5fba98b6dea0e43a77c409ba8eddcf5b9b6 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 11 九月 2024 16:44:16 +0800
Subject: [PATCH] OSD线程任务调整

---
 ycl-server/src/main/java/com/ycl/task/OsdTask.java          |  110 +++------------------------
 ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java |  112 ++++++++++++++++++++++++++++
 2 files changed, 126 insertions(+), 96 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/task/OsdTask.java b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
index 0c493a9..1e268ab 100644
--- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java
@@ -9,8 +9,10 @@
 import com.ycl.platform.domain.result.OSDResult;
 import com.ycl.platform.domain.result.UY.MonitorQualifyResult;
 import com.ycl.platform.domain.result.UY.OsdCheckResult;
+import com.ycl.platform.domain.vo.OnlineThreadVO;
 import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.platform.service.UYErrorTypeCheckService;
+import com.ycl.thread.OSDCheckThread;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.StringUtils;
 import constant.ApiConstants;
@@ -29,28 +31,13 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
 @Component("OsdTask")
 public class OsdTask {
-    @Value("${HK.userName}")
-    public String HKUserName;
-    @Value("${HK.password}")
-    public String HKPassword;
-    @Value("${DH.userName}")
-    public String DHUserName;
-    @Value("${DH.password}")
-    public String DHPassword;
-    @Value("${YS.userName}")
-    public String YSUserName;
-    @Value("${YS.password}")
-    public String YSPassword;
     @Autowired
     private MongoTemplate mongoTemplate;
     @Autowired
@@ -65,9 +52,8 @@
      * 鍚屾鍝佺墝鍒癿ysql
      */
     //TODO锛氬ぇ鍗庡姩鎬佸簱linux鎹綅缃�
-    public void getOSD() {
+    public void getOSD() throws ExecutionException, InterruptedException {
         log.info("寮�濮嬭幏鍙朞SD");
-        List<OSDResult> osdResultList = new ArrayList<>();
         //鏌ヤ竴鏈轰竴妗onitor
         Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
         List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class);
@@ -82,53 +68,20 @@
                     new ThreadPoolExecutor.CallerRunsPolicy()
             );
             List<TMonitor> monitors = monitorMapper.selectByNumbers(serialNumbers);
+            //杩囨护ip
             monitors = monitors.stream().filter(monitor -> !StringUtils.isEmpty(monitor.getIp()) && !"127.0.0.1".equals(monitor.getIp())).collect(Collectors.toList());
-//            log.info("澶勭悊鏁版嵁澶у皬{}", monitors.size());
+            List<Future<OSDResult>> futureList = new ArrayList<>(48);
+            List<OSDResult> osdResultList = new ArrayList<>();
             for (TMonitor monitor : monitors) {
-                executorService.submit(() -> {
-                    if (DeviceType.HK.getType().equals(monitor.getDeviceType())) {
-                        //娴峰悍
-                        OSDResult osd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
-                        if (checkSuccess(osdResultList, monitor, osd)) {
-                            log.info("娴峰悍璋冪敤鎴愬姛" + osd);
-                            return;
-                        }
-                    } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) {
-                        //澶у崕
-                        OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
-                        if (checkSuccess(osdResultList, monitor, osd)) {
-                            log.info("澶у崕璋冪敤鎴愬姛" + osd);
-                            return;
-                        }
-                    } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) {
-                        //瀹囪
-                        OSDResult osd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
-                        if (checkSuccess(osdResultList, monitor, osd)) {
-                            log.info("瀹囪璋冪敤鎴愬姛" + osd);
-                            return;
-                        }
-                    }
-                    //鏈煡鍝佺墝鎴栬�卆pi璋冪敤澶辫触锛屾尐涓墽琛屾墍鏈塧pi
-                    OSDResult osd = tryAllApi(monitor);
-                    if (osd != null) {
-                        synchronized (osdResultList) {
-                            osdResultList.add(osd);
-                        }
-                    }
-                });
+                OSDCheckThread thread = new OSDCheckThread(monitor);
+                Future<OSDResult> future = executorService.submit(thread);
+                futureList.add(future);
             }
-            //涓嶅啀鎺ユ敹鏂颁换鍔�
+            for (Future<OSDResult> future : futureList) {
+                osdResultList.add(future.get());
+            }
             executorService.shutdown();
-            try {
-                // 绛夊緟鎵�鏈変换鍔″畬鎴愶紝鏈�澶氱瓑寰�10绉掞紙鍙互鏍规嵁闇�瑕佽皟鏁达級
-                if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) {
-                    // 濡傛灉瓒呮椂锛屽皾璇曞仠姝㈠綋鍓嶆鍦ㄦ墽琛岀殑浠诲姟
-                    executorService.shutdownNow();
-                }
-            } catch (InterruptedException e) {
-                // 褰撳墠绾跨▼鍦ㄧ瓑寰呰繃绋嬩腑琚腑鏂�
-                executorService.shutdownNow();
-            }
+
             //缁撴潫api鎵ц锛屽紑濮嬫牎楠�
             List<OsdCheckResult> checkResults = new ArrayList<>();
             Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
@@ -222,40 +175,5 @@
         }
     }
 
-    private boolean checkSuccess(List<OSDResult> osdResultList, TMonitor monitor, OSDResult osd) {
-        if (osd != null) {
-            osd.setSerialNumber(monitor.getSerialNumber());
-            synchronized (osdResultList) {
-                osdResultList.add(osd);
-            }
-            return true;
-        } else {
-            return false;
-        }
-    }
 
-    private OSDResult tryAllApi(TMonitor monitor) {
-        //灏濊瘯娴峰悍鐨刟pi
-        OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
-        if (hkosd != null) {
-            hkosd.setSerialNumber(monitor.getSerialNumber());
-            log.info("娴峰悍璋冪敤鎴愬姛" + hkosd);
-            return hkosd;
-        }
-        //灏濊瘯澶у崕鐨刟pi
-        OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
-        if (dhosd != null) {
-            dhosd.setSerialNumber(monitor.getSerialNumber());
-            log.info("澶у崕璋冪敤鎴愬姛" + dhosd);
-            return dhosd;
-        }
-        //瀹囪api
-        OSDResult ysosd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
-        if (ysosd != null) {
-            ysosd.setSerialNumber(monitor.getSerialNumber());
-            log.info("瀹囪璋冪敤鎴愬姛" + ysosd);
-            return ysosd;
-        }
-        return null;
-    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
new file mode 100644
index 0000000..ab6dbe5
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java
@@ -0,0 +1,112 @@
+package com.ycl.thread;
+
+import com.ycl.api.DH.utils.DHApi;
+import com.ycl.api.HK.HKApi;
+import com.ycl.api.YS.YSApi;
+import com.ycl.platform.domain.entity.TMonitor;
+import com.ycl.platform.domain.result.OSDResult;
+import enumeration.DeviceType;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.util.concurrent.Callable;
+@Slf4j
+public class OSDCheckThread implements Callable<OSDResult> {
+    private TMonitor monitor;
+    @Value("${HK.userName}")
+    public String HKUserName;
+    @Value("${HK.password}")
+    public String HKPassword;
+    @Value("${DH.userName}")
+    public String DHUserName;
+    @Value("${DH.password}")
+    public String DHPassword;
+    @Value("${YS.userName}")
+    public String YSUserName;
+    @Value("${YS.password}")
+    public String YSPassword;
+
+    public OSDCheckThread(TMonitor monitor) {
+        this.monitor = monitor;
+    }
+
+    public TMonitor getMonitor() {
+        return monitor;
+    }
+
+    public void setMonitor(TMonitor monitor) {
+        this.monitor = monitor;
+    }
+
+    @Override
+    public OSDResult call() throws Exception {
+        if (DeviceType.HK.getType().equals(monitor.getDeviceType())) {
+            //娴峰悍
+            OSDResult osd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
+            OSDResult osdResult = checkSuccess(monitor, osd);
+            if (osdResult!=null) {
+                log.info("娴峰悍璋冪敤鎴愬姛" + osd);
+                return osd;
+            }else {
+                return null;
+            }
+        } else if (DeviceType.DH.getType().equals(monitor.getDeviceType())) {
+            //澶у崕
+            OSDResult osd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
+            OSDResult osdResult = checkSuccess(monitor, osd);
+            if (osdResult!=null) {
+                log.info("澶у崕璋冪敤鎴愬姛" + osd);
+                return osd;
+            }else {
+                return null;
+            }
+        } else if (DeviceType.YS.getType().equals(monitor.getDeviceType())) {
+            //瀹囪
+            OSDResult osd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
+            OSDResult osdResult = checkSuccess(monitor, osd);
+            if (osdResult!=null) {
+                log.info("瀹囪璋冪敤鎴愬姛" + osd);
+                return osd;
+            }else {
+                return null;
+            }
+        }
+        //鏈煡鍝佺墝鎴栬�卆pi璋冪敤澶辫触锛屾尐涓墽琛屾墍鏈塧pi
+        return tryAllApi(monitor);
+    }
+
+
+    private OSDResult tryAllApi(TMonitor monitor) {
+        //灏濊瘯娴峰悍鐨刟pi
+        OSDResult hkosd = HKApi.getOsdByIP(monitor.getIp(), HKUserName, HKPassword);
+        if (hkosd != null) {
+            hkosd.setSerialNumber(monitor.getSerialNumber());
+            log.info("娴峰悍璋冪敤鎴愬姛" + hkosd);
+            return hkosd;
+        }
+        //灏濊瘯澶у崕鐨刟pi
+        OSDResult dhosd = DHApi.getOsd(monitor.getIp(), DHUserName, DHPassword);
+        if (dhosd != null) {
+            dhosd.setSerialNumber(monitor.getSerialNumber());
+            log.info("澶у崕璋冪敤鎴愬姛" + dhosd);
+            return dhosd;
+        }
+        //瀹囪api
+        OSDResult ysosd = YSApi.getOsd(monitor.getIp(), YSUserName, YSPassword);
+        if (ysosd != null) {
+            ysosd.setSerialNumber(monitor.getSerialNumber());
+            log.info("瀹囪璋冪敤鎴愬姛" + ysosd);
+            return ysosd;
+        }
+        return null;
+    }
+
+    private OSDResult checkSuccess(TMonitor monitor, OSDResult osd) {
+        if (osd != null) {
+            osd.setSerialNumber(monitor.getSerialNumber());
+            return osd;
+        } else {
+            return null;
+        }
+    }
+}

--
Gitblit v1.8.0