| 
					
				 | 
			
			
				@@ -0,0 +1,140 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.its.op.scheduler.job; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.op.dao.repository.its.database.TbDbSvrSttsRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.op.dto.its.database.TbDbSvrSttsDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.op.entity.its.database.TbDbSvrStts; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.utils.ItsUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.AllArgsConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.scheduling.annotation.Async; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.util.StopWatch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.annotation.PostConstruct; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.sql.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@AllArgsConstructor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class DbSvrSttsJobThread { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final TbDbSvrSttsRepository dbSvrSttsRepo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final String JDBC_DRIVER = "com.tmax.tibero.jdbc.TbDriver"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final String username = "sys"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final String password = "tibero"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @PostConstruct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("{}", this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Async("schJobExecutor") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void run() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("START: DbSvrSttsJobThread.run: {}", Thread.currentThread().getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        StopWatch stopWatch = new StopWatch(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        stopWatch.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TbDbSvrSttsDto> result = new ArrayList<TbDbSvrSttsDto>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TbDbSvrStts> dbms = this.dbSvrSttsRepo.findAll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dbms.forEach(db -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                TbDbSvrSttsDto dto = executeDbSvrStts(db); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result.add(dto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catch(Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("run: Exception, {}, {}", db.getDbSvrId(), e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 결과 저장 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.forEach((obj) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dbSvrSttsRepo.updateStts(obj.getDbSvrId(), obj.getTblsNm(), obj.getTblsRmndCpct(), obj.getUseSesn(), obj.getUpdtDt()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        stopWatch.stop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("--END: DbSvrSttsJobThread.run: {}, {} ms.", Thread.currentThread().getName(), stopWatch.getTotalTimeMillis()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    TbDbSvrSttsDto executeDbSvrStts(TbDbSvrStts db) throws SQLException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TbDbSvrSttsDto dto = db.toDto(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String dbUrl = String.format("jdbc:tibero:thin:@%s:%s:%s", db.getDbSvrIp(), db.getDbSvrPort(), db.getDbSvrSid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sql1 =  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "SELECT A.TABLESPACE_NAME AS TBLS_NM, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "       100 - ROUND((A.TOTAL - NVL(B.FREE,0))*100/TOTAL,2) AS TBLS_RMND_CPCT " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "  FROM (SELECT X.TABLESPACE_NAME, ROUND((SUM(X.BYTES)/1024/1024),0) AS TOTAL " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "          FROM DBA_DATA_FILES X " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "         GROUP BY X.TABLESPACE_NAME) A, " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "       (SELECT Y.TABLESPACE_NAME, ROUND((SUM(Y.BYTES)/1024/1024),0) AS FREE " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "          FROM DBA_FREE_SPACE Y " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "         GROUP BY Y.TABLESPACE_NAME) B " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                " WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+) " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "   AND A.TABLESPACE_NAME IN (  'ITS_HIST_DATA' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'ITS_HIST_INDX' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'ITS_TBS_DATA' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'ITS_TBS_INDX' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'UTIS_HIST_DATA' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'UTIS_HIST_INDX' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'X' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'Y' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'D' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'D' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             , 'D' " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "                             )"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String sql2 = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "SELECT ROUND(RUNNING / TOTAL * 100, 1) AS USE_SESN " + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "  FROM (SELECT COUNT(1) AS TOTAL, SUM(DECODE(STATUS, 'RUNNING', 1, 0)) AS RUNNING FROM v$session)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Connection conn = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Class.forName(this.JDBC_DRIVER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            conn = DriverManager.getConnection(dbUrl, this.username, this.password); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String TBLS_NM = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            double TBLS_RMND_CPCT = 100.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PreparedStatement stmt1 = conn.prepareStatement(sql1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ResultSet rs1 = stmt1.executeQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            while(rs1.next()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String tblsNm = rs1.getString("TBLS_NM"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Double tblsRmndCpct = rs1.getDouble("TBLS_RMND_CPCT"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (TBLS_RMND_CPCT > tblsRmndCpct) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    TBLS_NM = tblsNm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    TBLS_RMND_CPCT = tblsRmndCpct; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setTblsNm(TBLS_NM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dto.setTblsRmndCpct(String.valueOf(TBLS_RMND_CPCT)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rs1.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            stmt1.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PreparedStatement stmt2 = conn.prepareStatement(sql2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ResultSet rs2 = stmt2.executeQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            while(rs2.next()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Double useSesn = rs2.getDouble("USE_SESN"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dto.setUseSesn(String.valueOf(useSesn)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rs2.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            stmt2.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        catch(SQLException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("executeDbSvrStts: SQLException, {}, {}", db.getDbSvrIp(), e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new RuntimeException(e.getMessage(), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        catch (ClassNotFoundException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("executeDbSvrStts: ClassNotFoundException, {}, {}", db.getDbSvrIp(), e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new RuntimeException(e.getMessage(), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (conn != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                conn.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dto.setUpdtDt(ItsUtils.getSysTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return dto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |