shjung 2 жил өмнө
parent
commit
9464602e4c

+ 3 - 3
src/main/java/com/its/icmp/IcmpPingServerApplication.java

@@ -88,7 +88,7 @@ public class IcmpPingServerApplication implements CommandLineRunner, Application
 
 	@Override
 	public void run(String... args) throws Exception {
-		if (!OS.isWindows()) {
+		if (OS.isWindows()) {
 			String sysTime = SysUtils.getSysTimeStr();
 			//JFrame.setDefaultLookAndFeelDecorated(true);
 			JFrame frame = new JFrame("ICMP 서버(웹카메라) - [" + sysTime + "]");
@@ -115,7 +115,7 @@ public class IcmpPingServerApplication implements CommandLineRunner, Application
 					}
 				});
 				frame.pack();
-				frame.setBounds(100, 100, 1100, 600);
+				frame.setBounds(100, 100, 900, 800);
 				frame.setLocationRelativeTo(null);
 				frame.setVisible(true);
 
@@ -172,7 +172,7 @@ public class IcmpPingServerApplication implements CommandLineRunner, Application
 		if (OS.isWindows()) {
 			MainUI UI = MainUI.getInstance();
 			if (UI != null) {
-				//UI.LoadControllerInfo();
+				UI.LoadControllerInfo();
 			}
 		}
 

+ 5 - 17
src/main/java/com/its/icmp/dao/mapper/batch/IcmpCtlrDao.java

@@ -18,7 +18,7 @@ public class IcmpCtlrDao extends BatchDaoService {
     public IcmpCtlrDao(SqlSessionFactory sqlSessionFactory) {
         super(sqlSessionFactory);
         this.serviceName = "IcmpCtlrDao";
-        this.mapperName  = "";//com.its.icmp.dao.mapper.IcmpCtlrMapper.";
+        this.mapperName  = "mapper.";;
     }
 
     public List<HashMap<String, Object>> getSttsList(List<IcmpCtlrSttsVo> req) {
@@ -33,12 +33,12 @@ public class IcmpCtlrDao extends BatchDaoService {
         return lists;
     }
 
-    public int updateStts(List<IcmpCtlrSttsVo> req, boolean isHistory) {
+    public int updateStts(String mapper, List<IcmpCtlrSttsVo> req, boolean isHistory) {
         if (req.size() > 1) {
             log.info("{}.updateStts: START. {} EA. History {}", this.serviceName, req.size(), isHistory);
         }
         Elapsed elapsed = new Elapsed();
-        this.mapper = this.mapperName + "updateCtlrStts";
+        this.mapper = mapper + ".updateStts";
         int total = updateBatch(this.mapper, getSttsList(req));
         if (req.size() > 1) {
             log.info("{}.updateStts: ..END. {} EA. {} ms.", this.serviceName, total, elapsed.milliSeconds());
@@ -46,12 +46,12 @@ public class IcmpCtlrDao extends BatchDaoService {
         return total;
     }
 
-    public int insertStts(List<IcmpCtlrSttsVo> req) {
+    public int insertStts(String mapper, List<IcmpCtlrSttsVo> req) {
         if (req.size() > 1) {
             log.info("{}.insertStts: START. {} EA.", this.serviceName, req.size());
         }
         Elapsed elapsed = new Elapsed();
-        this.mapper = this.mapperName + "insertCtlrSttsHs";
+        this.mapper = mapper + ".insertSttsHs";
         int total = insertBatch(this.mapper, getSttsList(req));
         if (req.size() > 1) {
             log.info("{}.insertStts: ..END. {} EA. {} ms.", this.serviceName, total, elapsed.milliSeconds());
@@ -59,17 +59,5 @@ public class IcmpCtlrDao extends BatchDaoService {
         return total;
     }
 
-    public int updateParam(List<HashMap<String, Object>> req) {
-        if (req.size() > 1) {
-            log.info("{}.updateParam: START. {} EA.", this.serviceName, req.size());
-        }
-        Elapsed elapsed = new Elapsed();
-        this.mapper = this.mapperName + "updateCtlrParam";
-        int total = updateBatch(this.mapper, req);
-        if (req.size() > 1) {
-            log.info("{}.updateParam: ..END. {} EA. {} ms.", this.serviceName, total, elapsed.milliSeconds());
-        }
-        return total;
-    }
 
 }

+ 0 - 102
src/main/java/com/its/icmp/process/AbstractDbmsJobProcess.java

@@ -1,102 +0,0 @@
-package com.its.icmp.process;
-
-import com.its.app.AppUtils;
-import com.its.icmp.dao.mapper.UnitSystMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.annotation.PostConstruct;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-
-public abstract class AbstractDbmsJobProcess {
-	private static final Logger log = LoggerFactory.getLogger(AbstractDbmsJobProcess.class);
-	public static LinkedBlockingQueue<DbmsJobData> DBMS_DATA_QUEUE = new LinkedBlockingQueue<>(1000);
-	private UnitSystMapper unitSystMapper;
-	private ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
-	int MAX_CORE = Runtime.getRuntime().availableProcessors();
-
-	@PostConstruct
-	void init() {
-		this.unitSystMapper = (UnitSystMapper) AppUtils.getBean(UnitSystMapper.class);
-		this.postConstruct();
-	}
-
-	protected abstract void postConstruct();
-
-	public void run() {
-		log.info("AbstractDbmsJobProcess.run: Start.");
-		if (this.MAX_CORE < 8) {
-			this.MAX_CORE = 8;
-		}
-
-//		PingThreadPoolInitializer poolInitializer = (PingThreadPoolInitializer) AppUtils.getBean(PingThreadPoolInitializer.class);
-//		int executePool = Math.max(this.MAX_CORE, poolInitializer.getDbmsThreadPoolCount());
-//
-//		for (int ii = 0; ii < executePool; ++ii) {
-//			log.info("AbstractDbmsJobProcess.Task: {}", ii);
-//			this.taskExecutor.execute(() -> {
-//				while (true) {
-//					try {
-//						DbmsJobData dbmsJobData = (DbmsJobData) DBMS_DATA_QUEUE.take();
-//						if (dbmsJobData != null) {
-//							DbmsJobTask handler = (DbmsJobTask) AppUtils.getBean(DbmsJobTask.class);
-//							handler.run(this, dbmsJobData);
-//						} else {
-//							log.error("AbstractDbmsJobProcess.Task: Received data null");
-//						}
-//					} catch (Exception var3) {
-//						log.error("AbstractDbmsJobProcess.Task: Exception: {}", var3.getMessage(), var3);
-//					}
-//				}
-//			});
-//		}
-
-		log.info("AbstractDbmsJobProcess.run: ..End.");
-	}
-
-	public boolean add(DbmsJobData dbmsJobData) {
-		boolean offer = false;
-
-		try {
-			offer = DBMS_DATA_QUEUE.offer(dbmsJobData);
-			if (!offer) {
-				log.error("DbmsJobProcess.add: Queue Full Error, Size: {} EA", DBMS_DATA_QUEUE.size());
-			}
-		} catch (Exception var4) {
-			log.error("DbmsJobProcess.add: Exception: {}", var4.getMessage(), var4);
-		}
-
-		return offer;
-	}
-
-	public static boolean addQ(DbmsJobData dbmsJobData) {
-		try {
-			if (!DBMS_DATA_QUEUE.offer(dbmsJobData)) {
-				log.error("AbstractDbmsJobProcess.add: Queue Full Error, Size: {} EA", DBMS_DATA_QUEUE.size());
-				return false;
-			} else {
-				return true;
-			}
-		} catch (Exception var2) {
-			log.error("AbstractDbmsJobProcess.add: Exception: {}", var2.getMessage(), var2);
-			return false;
-		}
-	}
-
-	public void runJob(DbmsJobData dbmsJobData) {
-		if (dbmsJobData.getName() == null) {
-			//UnitSystSttsVo stts = (UnitSystSttsVo) dbmsJobData.getData();
-//			this.unitSystMapper.updateUnitSystStts(stts);
-//			if (dbmsJobData.isHistory()) {
-//				this.unitSystMapper.insertUnitSystSttsHs(stts);
-//			}
-		} else {
-			this.process(dbmsJobData);
-		}
-
-	}
-
-	public abstract void process(DbmsJobData data);
-}

+ 3 - 1
src/main/java/com/its/icmp/process/DbmsData.java

@@ -8,11 +8,13 @@ import lombok.Setter;
 public class DbmsData {
 
     private DbmsDataType type;
+    private String       mapper;
     private boolean      isHistory;
     private Object       data;
 
-    public DbmsData(DbmsDataType type, boolean isHistory, Object data) {
+    public DbmsData(DbmsDataType type, String mapper, boolean isHistory, Object data) {
         this.type      = type;
+        this.mapper    = mapper;
         this.isHistory = isHistory;
         this.data      = data;
     }

+ 2 - 4
src/main/java/com/its/icmp/process/DbmsDataProcess.java

@@ -90,14 +90,12 @@ public class DbmsDataProcess {
             switch(type) {
                 case DBMS_DATA_CTLR_STTS:
                     List<IcmpCtlrSttsVo> ctlrSttsList = (List<IcmpCtlrSttsVo>)data.getData();
-                    this.icmpCtlrDao.updateStts(ctlrSttsList, data.isHistory()); // 상태정보 업데이트
+                    this.icmpCtlrDao.updateStts(data.getMapper(), ctlrSttsList, data.isHistory()); // 상태정보 업데이트
                     if (data.isHistory()) {
-                        this.icmpCtlrDao.insertStts(ctlrSttsList);   // 상태정보 이력저장
+                        this.icmpCtlrDao.insertStts(data.getMapper(), ctlrSttsList);   // 상태정보 이력저장
                     }
                     ctlrSttsList.clear();
                     break;
-                case DBMS_DATA_PARAM_UPDATE:
-                    break;
             }
         } catch (Exception e) {
             log.error("DbmsJobProcess.process: Exception: {}", e.toString());

+ 0 - 1
src/main/java/com/its/icmp/process/DbmsDataType.java

@@ -4,6 +4,5 @@ public enum DbmsDataType {
 
     DBMS_DATA_UNIT_SYST_STTS,
     DBMS_DATA_CTLR_STTS,
-    DBMS_DATA_PARAM_UPDATE,
 
 }

+ 0 - 12
src/main/java/com/its/icmp/process/DbmsJobData.java

@@ -1,12 +0,0 @@
-package com.its.icmp.process;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-@Data
-@AllArgsConstructor
-public class DbmsJobData {
-	private String name;
-	private boolean isHistory;
-	private Object data;
-}

+ 0 - 36
src/main/java/com/its/icmp/process/DbmsJobProcess.java

@@ -1,36 +0,0 @@
-package com.its.icmp.process;
-
-import com.its.icmp.dao.IcmpPingDao;
-import com.its.icmp.vo.IcmpCtlrSttsVo;
-import lombok.AllArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service
-@AllArgsConstructor
-public class DbmsJobProcess extends AbstractDbmsJobProcess {
-
-	private final IcmpPingDao icmpPingDao;
-
-	@Override
-    protected void postConstruct() {
-    }
-
-    @Override
-    public void process(DbmsJobData data) {
-
-        try {
-        	
-        	this.icmpPingDao.updateStts(data.getName(),(IcmpCtlrSttsVo)data.getData());
-            
-            if (data.isHistory()) {
-                this.icmpPingDao.insertSttsHs(data.getName(),(IcmpCtlrSttsVo)data.getData());
-            }
-            
-        } catch (Exception e) {
-            log.error("DbmsJobProcess.process: Exception: {}", e.toString());
-        }
-    }
-
-}

+ 0 - 13
src/main/java/com/its/icmp/process/DbmsJobTask.java

@@ -1,13 +0,0 @@
-package com.its.icmp.process;
-
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-@Service
-public class DbmsJobTask {
-
-	@Async("dbmsJobExecutor")
-	public void run(AbstractDbmsJobProcess dbmsJobProcess, DbmsJobData dbmsJobData) {
-		dbmsJobProcess.runJob(dbmsJobData);
-	}
-}

+ 38 - 33
src/main/java/com/its/icmp/service/IcmpPingService.java

@@ -1,12 +1,12 @@
 package com.its.icmp.service;
 
-import com.its.app.utils.SysUtils;
 import com.its.app.AppUtils;
+import com.its.app.utils.SysUtils;
 import com.its.icmp.dao.IcmpPingDao;
 import com.its.icmp.thread.IcmpPingThread;
-import com.its.icmp.vo.IcmpPingVo;
-import com.its.icmp.vo.IcmpCtlrVo;
 import com.its.icmp.vo.IcmpCtlrSttsVo;
+import com.its.icmp.vo.IcmpCtlrVo;
+import com.its.icmp.vo.IcmpPingVo;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
@@ -21,17 +21,21 @@ import java.util.concurrent.ConcurrentHashMap;
 
 @Slf4j
 @Getter
+//@AllArgsConstructor
 @Service
 @Transactional(rollbackFor = { Exception.class })
 public class IcmpPingService {
 
-	private IcmpPingDao ctlrMapper;
+	private IcmpPingDao icmpPingDao;
+	private IcmpPingThread icmpPingThread;
+
 	private ConcurrentHashMap<String, ConcurrentHashMap<String, IcmpCtlrVo>> icmpCtlrMap = null;
 
 	@PostConstruct
 	private void init() {
 		log.info("IcmpPingService.init");
-		this.ctlrMapper = (IcmpPingDao) AppUtils.getBean(IcmpPingDao.class);
+		this.icmpPingDao = (IcmpPingDao)AppUtils.getBean(IcmpPingDao.class);
+		this.icmpPingThread = (IcmpPingThread)AppUtils.getBean(IcmpPingThread.class);
 		this.icmpCtlrMap = new ConcurrentHashMap<String, ConcurrentHashMap<String, IcmpCtlrVo>>();
 	}
 
@@ -41,20 +45,25 @@ public class IcmpPingService {
 	}
 
 	public void loadDb(String name) {
-		log.info("loadDb: {} start.", name);
+		log.info("IcmpPingService.loadDb: {} start.", name);
 		if (null == this.icmpCtlrMap.get(name)) {
 			initMap(name);
 		}
 
 		try {
-			List<IcmpCtlrVo> list = this.ctlrMapper.selectAll(name);
+			List<IcmpCtlrVo> list = this.icmpPingDao.selectAll(name);
 			for (IcmpCtlrVo obj : list) {
+				obj.setStts(IcmpCtlrSttsVo.builder()
+						.CTLR_NMBR(obj.getCTLR_NMBR())
+						.CMNC_STTS_CD("CMS1")
+						.UPDT_DT("19700101000000")
+						.build());
 				this.icmpCtlrMap.get(name).put(obj.getCTLR_NMBR(), obj);
 			}
 		} catch (Exception e) {
-			log.error("Service.loadDb-{}: Exception: {}", name, e.toString());
+			log.error("IcmpPingService.loadDb-{}: Exception: {}", name, e.toString());
 		}
-		log.info("loadDb: {} ..end. {} EA.", name, this.icmpCtlrMap.get(name).size());
+		log.info("IcmpPingService.loadDb: {} ..end. {} EA.", name, this.icmpCtlrMap.get(name).size());
 	}
 
 	public void initDb(String name) {
@@ -66,14 +75,14 @@ public class IcmpPingService {
 			loadDb(name);
 			
 		} catch (Exception e) {
-			log.error("Service.initJob: Exception: {}", e.toString());
+			log.error("IcmpPingService.initDb: Exception: {}", e.toString());
 		}
 	}
 
 	public void doJob(IcmpPingVo icmp) {
 		MDC.put("id", icmp.getName());
 
-		log.info("Service.doJob Start...:: {}", icmp.getName());
+		log.info("IcmpPingService.doJob Start...:: {}", icmp.getName());
 
 		boolean insHs = false;
 		Calendar cal = Calendar.getInstance();
@@ -88,32 +97,26 @@ public class IcmpPingService {
 
 		String UPDT_DT = SysUtils.getSysTime();
 		for (Map.Entry<String, IcmpCtlrVo> obj : this.icmpCtlrMap.get(icmp.getName()).entrySet()) {
-			
-				if (obj.getValue().getDEL_YN().equals("Y")) {
-					log.info("Service.doJob: app {}: {}, {}, {}, DELETED.", icmp.getName(),
-							obj.getValue().getCTLR_NMBR(), obj.getValue().getISTL_LCTN_NM(), obj.getValue().getCTLR_IP());
-					continue;
-				}
-	
-				IcmpPingThread handler = (IcmpPingThread) AppUtils.getBean(IcmpPingThread.class);
-				if (handler != null) {
-					handler.setPingTimeout(icmp.getTimeout());
-					if(obj.getValue().getCTLR_IP() != null && !obj.getValue().getCTLR_IP().equals("NULL") && !obj.getValue().getCTLR_IP().equals("")) {
-						handler.run(insHs, UPDT_DT, obj.getValue(), icmp.getName());
-					}
-				}
-			
+			if (obj.getValue().getDEL_YN().equals("Y")) {
+				log.info("Service.doJob: app {}: {}, {}, {}, DELETED.", icmp.getName(),
+						obj.getValue().getCTLR_NMBR(), obj.getValue().getISTL_LCTN_NM(), obj.getValue().getCTLR_IP());
+				continue;
+			}
+
+			if (obj.getValue().getCTLR_IP() != null && !obj.getValue().getCTLR_IP().equals("NULL") && !obj.getValue().getCTLR_IP().equals("")) {
+				this.icmpPingThread.run(insHs, UPDT_DT, obj.getValue(), icmp.getName(), icmp.getTimeout());
+			}
 		}
 
-		log.info("Service.doJob ..End...:: {}", icmp.getName());
+		log.info("IcmpPingService.doJob ..End...:: {}", icmp.getName());
 		MDC.remove(icmp.getName());
 		MDC.clear();
 	}
 
 	public void updateCtlrStts(boolean isRun, String name) {
-
 		MDC.put("id", name);
 
+		String CMNC_STTS_CD = isRun ? "CMS0" : "CMS1";
 		String UPDT_DT = SysUtils.getSysTime();
 		for (Map.Entry<String, IcmpCtlrVo> obj : this.icmpCtlrMap.get(name).entrySet()) {
 
@@ -124,11 +127,13 @@ public class IcmpPingService {
 					continue;
 				}
 
-				IcmpCtlrSttsVo stts = new IcmpCtlrSttsVo();
-				stts.setCTLR_NMBR(obj.getValue().getCTLR_NMBR());
-				stts.setUPDT_DT(UPDT_DT);
-				stts.setCMNC_STTS_CD("CMS1"); // 비정상으로 기본 설정
-				this.ctlrMapper.updateStts(name, stts);
+				IcmpCtlrSttsVo stts = IcmpCtlrSttsVo.builder()
+						.CTLR_NMBR(obj.getValue().getCTLR_NMBR())
+						.UPDT_DT(UPDT_DT)
+						.CMNC_STTS_CD(CMNC_STTS_CD)
+						.build();
+				obj.getValue().setStts(stts);
+				this.icmpPingDao.updateStts(name, stts);
 			}
 		}
 

+ 1 - 1
src/main/java/com/its/icmp/service/UnitSystService.java

@@ -123,7 +123,7 @@ public class UnitSystService {
             }
         }
         else {
-            this.dbmsDataProcess.add(new DbmsData(DbmsDataType.DBMS_DATA_UNIT_SYST_STTS, insHs, this.unitSystStts));
+            this.dbmsDataProcess.add(new DbmsData(DbmsDataType.DBMS_DATA_UNIT_SYST_STTS, "", insHs, this.unitSystStts));
             if (insHs) {
                 //loadMaster();
             }

+ 22 - 21
src/main/java/com/its/icmp/thread/IcmpPingThread.java

@@ -1,49 +1,52 @@
 package com.its.icmp.thread;
 
-import com.its.app.AppUtils;
 import com.its.app.utils.Ping;
 import com.its.app.utils.SysUtils;
-import com.its.icmp.process.DbmsJobData;
-import com.its.icmp.process.DbmsJobProcess;
+import com.its.icmp.process.DbmsData;
+import com.its.icmp.process.DbmsDataProcess;
+import com.its.icmp.process.DbmsDataType;
 import com.its.icmp.vo.IcmpCtlrSttsVo;
 import com.its.icmp.vo.IcmpCtlrVo;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 @Getter
 @Setter
+@AllArgsConstructor
 @Service
 public class IcmpPingThread {
 
-    @Value("${icmp.ping.timeout:#{5}}")
-    private int pingTimeout;
+    private final DbmsDataProcess dbmsDataProcess;
 
     @Async("icmpPingExecutor")
-    public void run(boolean isHistory, String UPDT_DT, IcmpCtlrVo obj, String name) {
+    public void run(boolean isHistory, String UPDT_DT, IcmpCtlrVo obj, String name, int timeout) {
 
 		String keyData = name;
         MDC.put("id", keyData);
 
-        IcmpCtlrSttsVo stts = new IcmpCtlrSttsVo();
-        stts.setCTLR_NMBR(obj.getCTLR_NMBR());
-        stts.setUPDT_DT(UPDT_DT);
-        stts.setCMNC_STTS_CD("CMS1");   // 비정상으로 기본 설정
+        IcmpCtlrSttsVo stts = IcmpCtlrSttsVo.builder()
+                .CTLR_NMBR(obj.getCTLR_NMBR())
+                .UPDT_DT(UPDT_DT)
+                .CMNC_STTS_CD("CMS1")
+                .build();
 
         boolean isReachable = false;
         long startTm = System.nanoTime();
-        long endTm = System.nanoTime();
-   
+
         log.info("{}, {}, {}, {}, app try. timeout: {} sec. {}", keyData, obj.getCTLR_NMBR(), obj.getISTL_LCTN_NM(), obj.getCTLR_IP(),
-                this.pingTimeout, Thread.currentThread().getName());
+                timeout, Thread.currentThread().getName());
         try {
-        		isReachable = Ping.isReachable(obj.getCTLR_IP(), this.pingTimeout);
-            	endTm = System.nanoTime();
+        		isReachable = Ping.isReachable(obj.getCTLR_IP(), timeout);
+            	long endTm = System.nanoTime();
             	if (isReachable ) {
                 	stts.setCMNC_STTS_CD("CMS0");
                 	log.info("{}, {}, {}, {}, is alive. {} ms.", keyData, obj.getCTLR_NMBR(), obj.getISTL_LCTN_NM(), obj.getCTLR_IP(), (endTm - startTm) / 1000000);
@@ -66,11 +69,9 @@ public class IcmpPingThread {
         obj.setReachable(isReachable);
         obj.setPingTime(SysUtils.getSysTimeStr());
 
-        DbmsJobProcess icmpPingDataProcess = (DbmsJobProcess) AppUtils.getBean(DbmsJobProcess.class);
-        icmpPingDataProcess.add(new DbmsJobData(keyData, false, stts));
-        if (isHistory) {
-            icmpPingDataProcess.add(new DbmsJobData(keyData, true, stts));
-        }
+        List<IcmpCtlrSttsVo> ctlrSttsList = new ArrayList<>();
+        ctlrSttsList.add(stts);
+        this.dbmsDataProcess.add(new DbmsData(DbmsDataType.DBMS_DATA_CTLR_STTS, name, isHistory, ctlrSttsList));
 
         MDC.remove(keyData);
         MDC.clear();

+ 31 - 31
src/main/java/com/its/icmp/ui/CtlrSttsTableCellRenderer.java

@@ -10,38 +10,38 @@ public class CtlrSttsTableCellRenderer extends DefaultTableCellRenderer {
 
         Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
         String commStts = table.getModel().getValueAt(row, 6).toString();
-        if (commStts.equals("Connect")) {
+        if (commStts.equals("정상")) {
             cell.setBackground(new Color(255, 255, 255, 255));
-            if (column == 7) {
-                String door = table.getModel().getValueAt(row, 7).toString();
-                if (door.equals("열림")) {
-                    cell.setBackground(new Color(255, 0, 0, 176));
-                    cell.setForeground(new Color(255, 255, 255, 255));
-                }
-            }
-            if (column == 8) {
-                String fan = table.getModel().getValueAt(row, 8).toString();
-                if (fan.equals("가동")) {
-                    cell.setBackground(new Color(255, 213, 0, 250));
-                    cell.setForeground(new Color(0, 0, 0, 255));
-                }
-            }
-            if (column == 9) {
-                String heater = table.getModel().getValueAt(row, 9).toString();
-                if (heater.equals("가동")) {
-                    cell.setBackground(new Color(255, 213, 0, 250));
-                    cell.setForeground(new Color(0, 0, 0, 255));
-                }
-            }
-            if (column == 11) {
-                String video = table.getModel().getValueAt(row, 11).toString();
-                if (video.equals("이상")) {
-                    cell.setBackground(new Color(255, 213, 0, 250));
-                    cell.setForeground(new Color(0, 0, 0, 255));
-                }
-            }
-        } else if (commStts.equals("Login")) {
-            cell.setBackground(new Color(182, 175, 97, 176));
+//            if (column == 7) {
+//                String door = table.getModel().getValueAt(row, 7).toString();
+//                if (door.equals("열림")) {
+//                    cell.setBackground(new Color(255, 0, 0, 176));
+//                    cell.setForeground(new Color(255, 255, 255, 255));
+//                }
+//            }
+//            if (column == 8) {
+//                String fan = table.getModel().getValueAt(row, 8).toString();
+//                if (fan.equals("가동")) {
+//                    cell.setBackground(new Color(255, 213, 0, 250));
+//                    cell.setForeground(new Color(0, 0, 0, 255));
+//                }
+//            }
+//            if (column == 9) {
+//                String heater = table.getModel().getValueAt(row, 9).toString();
+//                if (heater.equals("가동")) {
+//                    cell.setBackground(new Color(255, 213, 0, 250));
+//                    cell.setForeground(new Color(0, 0, 0, 255));
+//                }
+//            }
+//            if (column == 11) {
+//                String video = table.getModel().getValueAt(row, 11).toString();
+//                if (video.equals("이상")) {
+//                    cell.setBackground(new Color(255, 213, 0, 250));
+//                    cell.setForeground(new Color(0, 0, 0, 255));
+//                }
+//            }
+//        } else if (commStts.equals("Login")) {
+//            cell.setBackground(new Color(182, 175, 97, 176));
         } else {
             cell.setBackground(new Color(182, 97, 97, 176));
         }

+ 9 - 5
src/main/java/com/its/icmp/ui/CtlrSttsTableModel.java

@@ -16,6 +16,7 @@ public class CtlrSttsTableModel extends AbstractTableModel {
     private List<IcmpCtlrVo> ctlrList = Collections.synchronizedList(new ArrayList<IcmpCtlrVo>());
     private final String[] columnNames = {
             "#",
+            "유형",
             "번호",
             "ID",
             "명칭",
@@ -91,21 +92,24 @@ public class CtlrSttsTableModel extends AbstractTableModel {
                     returnValue = info.getIndex();
                     break;
                 case 1:
-                    returnValue = info.getCTLR_NMBR();
+                    returnValue = info.getName().toUpperCase();
                     break;
                 case 2:
-                    returnValue = info.getCTLR_ID();
+                    returnValue = info.getCTLR_NMBR();
                     break;
                 case 3:
-                    returnValue = info.getISTL_LCTN_NM();
+                    returnValue = info.getCTLR_ID();
                     break;
                 case 4:
-                    returnValue = info.getCTLR_IP();
+                    returnValue = info.getISTL_LCTN_NM();
                     break;
                 case 5:
-                    returnValue = commDesc;
+                    returnValue = info.getCTLR_IP();
                     break;
                 case 6:
+                    returnValue = commDesc;
+                    break;
+                case 7:
                     returnValue = stts.getUPDT_DT();
                     break;
             }

+ 37 - 17
src/main/java/com/its/icmp/ui/MainUI.java

@@ -4,6 +4,7 @@ import com.intellij.uiDesigner.core.GridConstraints;
 import com.intellij.uiDesigner.core.GridLayoutManager;
 import com.intellij.uiDesigner.core.Spacer;
 import com.its.app.AppUtils;
+import com.its.app.utils.Ping;
 import com.its.app.utils.SysUtils;
 import com.its.icmp.config.ScheduleJobConfig;
 import com.its.icmp.service.IcmpPingService;
@@ -68,9 +69,6 @@ public class MainUI {
     private JLabel lblCpuRate;
     private JLabel lblMemoryUsage;
     private JPanel pnlControl;
-    private JButton btnControl;
-    private JButton btnResetSw;
-    private JButton btnResetHw;
     private JButton btnDisconnect;
     private JTextField txtName;
     private JTextField txtId;
@@ -202,6 +200,24 @@ public class MainUI {
             return;
         }
         // Ping Test
+        if (type == 1) {
+            try {
+                log.info("Ping Test: {}, {}, {}.", this.selObj.getCTLR_NMBR(), this.selObj.getISTL_LCTN_NM(), this.selObj.getCTLR_IP());
+                boolean isReachable;
+                long startTm = System.nanoTime();
+                isReachable = Ping.isReachable(this.selObj.getCTLR_IP(), 5);
+                long endTm = System.nanoTime();
+                if (isReachable) {
+                    log.info("{}, {}, {}, is alive. {} ms.", this.selObj.getCTLR_NMBR(), this.selObj.getISTL_LCTN_NM(), this.selObj.getCTLR_IP(), (endTm - startTm) / 1000000);
+                } else {
+                    log.error("{}, {}, {}, is not alive. {} ms.", this.selObj.getCTLR_NMBR(), this.selObj.getISTL_LCTN_NM(), this.selObj.getCTLR_IP(), (endTm - startTm) / 1000000);
+                }
+            } catch (IOException e) {
+                log.error("{}, {}, {}, IOException: {}", this.selObj.getCTLR_NMBR(), this.selObj.getISTL_LCTN_NM(), this.selObj.getCTLR_IP(), e.toString());
+            } catch (InterruptedException e) {
+                log.error("{}, {}, {}, InterruptedException: {}", this.selObj.getCTLR_NMBR(), this.selObj.getISTL_LCTN_NM(), this.selObj.getCTLR_IP(), e.toString());
+            }
+        }
     }
 
     public boolean updateControllerInfo() {
@@ -260,11 +276,12 @@ public class MainUI {
         TableColumnModel getColumnModel = tblCtlrList.getColumnModel();
         getColumnModel.getColumn(0).setPreferredWidth(30);  //  "S",
         getColumnModel.getColumn(1).setPreferredWidth(65);  //  "번호",
-        getColumnModel.getColumn(2).setPreferredWidth(110); //  "시설물ID",
-        getColumnModel.getColumn(3).setPreferredWidth(190); //  "명칭",
-        getColumnModel.getColumn(4).setPreferredWidth(120); //  "IP",
-        getColumnModel.getColumn(5).setPreferredWidth(70);  //  "연결상태",
-        getColumnModel.getColumn(6).setPreferredWidth(125);
+        getColumnModel.getColumn(2).setPreferredWidth(65);  //  "번호",
+        getColumnModel.getColumn(3).setPreferredWidth(110); //  "시설물ID",
+        getColumnModel.getColumn(4).setPreferredWidth(190); //  "명칭",
+        getColumnModel.getColumn(5).setPreferredWidth(120); //  "IP",
+        getColumnModel.getColumn(6).setPreferredWidth(70);  //  "연결상태",
+        getColumnModel.getColumn(7).setPreferredWidth(125);
 
         getColumnModel.getColumn(0).setMaxWidth(30);
         getColumnModel.getColumn(0).setMinWidth(30);
@@ -290,15 +307,18 @@ public class MainUI {
         List<IcmpPingVo> icmpPingVos = scheduleJobConfig.getIcmpPings();
         if (scheduleJobConfig != null && icmpPingService != null && icmpPingVos != null) {
             for (IcmpPingVo icmp : icmpPingVos) {
-//                for (Map.Entry<String, IcmpCtlrVo> tmp : icmpPingService.getIcmpCtlrMap().get(icmp.getName()).entrySet()) {
-//                    IcmpCtlrVo obj = tmp.getValue();
-//                    if (StringUtils.equals("N", obj.getDEL_YN())) {
-//                        ctlrTotal++;
-//                        if (!"CMS0".equals(obj.getStts().getCMNC_STTS_CD())) {
-//                            ctlrError++;
-//                        }
-//                    }
-//                }
+                Map<String, IcmpCtlrVo> entryMap = icmpPingService.getIcmpCtlrMap().get(icmp.getName());
+                if (entryMap != null) {
+                    for (Map.Entry<String, IcmpCtlrVo> tmp : entryMap.entrySet()) {
+                        IcmpCtlrVo obj = tmp.getValue();
+                        if (StringUtils.equals("N", obj.getDEL_YN())) {
+                            ctlrTotal++;
+                            if (!"CMS0".equals(obj.getStts().getCMNC_STTS_CD())) {
+                                ctlrError++;
+                            }
+                        }
+                    }
+                }
             }
         }
         lblTotal.setText(" " + ctlrTotal + " ");

+ 2 - 0
src/main/java/com/its/icmp/vo/IcmpCtlrSttsVo.java

@@ -1,8 +1,10 @@
 package com.its.icmp.vo;
 
+import lombok.Builder;
 import lombok.Data;
 
 @Data
+@Builder
 public class IcmpCtlrSttsVo {
     private String CTLR_NMBR;
     private String CMNC_STTS_CD;

+ 1 - 0
src/main/java/com/its/icmp/vo/IcmpCtlrVo.java

@@ -9,6 +9,7 @@ import lombok.ToString;
 @ToString
 public class IcmpCtlrVo {
     private int    index;
+    private String name;
     // Type, MngrNo, ID, Name, IP Address, Last Time, 상태
     private String CTLR_NMBR;
     private String CTLR_ID;

+ 0 - 1
src/main/resources/application.yml

@@ -78,7 +78,6 @@ spring:
   datasource:
     hikari:
       driver-class-name: oracle.jdbc.OracleDriver
-      #jdbc-url: jdbc:oracle:thin:@172.19.10.26:1521:ptatms
       jdbc-url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.19.10.25)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=172.19.10.26)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ptatms)))
       username: ptatms
       password: ptatms

+ 2 - 1
src/main/resources/mybatis/mapper/Ccam.xml

@@ -5,7 +5,8 @@
 
     <select id="selectAll" resultType="com.its.icmp.vo.IcmpCtlrVo">
     <![CDATA[
-        SELECT A.CAM_ID AS CTLR_NMBR,
+        SELECT 'ccam'        AS name,
+               A.CAM_ID      AS CTLR_NMBR,
                A.CAM_ID      AS CTLR_ID,
                A.NAME        AS ISTL_LCTN_NM,
                A.IP          AS CTLR_IP,

+ 2 - 1
src/main/resources/mybatis/mapper/Cctv.xml

@@ -5,7 +5,8 @@
 
     <select id="selectAll" resultType="com.its.icmp.vo.IcmpCtlrVo">
     <![CDATA[
-        SELECT A.CCTV_MNGM_NMBR AS CTLR_NMBR,
+        SELECT 'cctv'           AS name,
+               A.CCTV_MNGM_NMBR AS CTLR_NMBR,
                A.CCTV_CTLR_ID   AS CTLR_ID,
                A.ISTL_LCTN_NM   AS ISTL_LCTN_NM,
                A.CCTV_CTLR_IP   AS CTLR_IP,

+ 2 - 1
src/main/resources/mybatis/mapper/Wcam.xml

@@ -5,7 +5,8 @@
 
     <select id="selectAll" resultType="com.its.icmp.vo.IcmpCtlrVo">
     <![CDATA[
-        SELECT A.WCAM_CTLR_NMBR AS CTLR_NMBR,
+        SELECT 'wcam'           AS name,
+               A.WCAM_CTLR_NMBR AS CTLR_NMBR,
                A.WCAM_CTLR_ID   AS CTLR_ID,
                A.ISTL_LCTN_NM   AS ISTL_LCTN_NM,
                A.WCAM_CTLR_IP   AS CTLR_IP,