shjung преди 2 години
родител
ревизия
6da3827b1b

+ 23 - 11
src/main/java/com/its/op/dto/its/rse/RseOdStatListDataDto.java

@@ -36,17 +36,16 @@ public class RseOdStatListDataDto implements Serializable {
     private Map<Long, RseOdTraf> map;
 
     public void mapToList() {
-        //this.lists = new ArrayList<>(this.map.values());
-        if (this.lists == null) {
-            this.lists = new ArrayList<>();
-        }
-
-        // 키로 정렬
-        Object[] keys = this.map.keySet().toArray();
-        Arrays.sort(keys);
-        for (Long key : this.map.keySet()) {
-            this.lists.add(this.map.get(key));
-        }
+        this.lists = new ArrayList<>(this.map.values());
+//        if (this.lists == null) {
+//            this.lists = new ArrayList<>();
+//        }
+//        // 키로 정렬
+//        Object[] keys = this.map.keySet().toArray();
+//        Arrays.sort(keys);
+//        for (Long key : this.map.keySet()) {
+//            this.lists.add(this.map.get(key));
+//        }
     }
 
     public static RseOdStatListDataDto makeRseList(Long RSE_CTLR_NMBR, String RSE_NM, List<TbRseCtlr> lists) {
@@ -65,6 +64,19 @@ public class RseOdStatListDataDto implements Serializable {
         });
         return dto;
     }
+
+    public static Comparator<RseOdStatListDataDto> RseOdStatListDataDtoSort = new Comparator<RseOdStatListDataDto>() {
+        public int compare(RseOdStatListDataDto s1, RseOdStatListDataDto s2) {
+            return (int) (s1.getRSE_CTLR_NMBR() - s2.getRSE_CTLR_NMBR());
+        }
+    };
+
+    public static Comparator<RseOdStatListDataDto.RseOdTraf> RseOdTrafSort = new Comparator<RseOdStatListDataDto.RseOdTraf>() {
+        public int compare(RseOdStatListDataDto.RseOdTraf s1, RseOdStatListDataDto.RseOdTraf s2) {
+            return (int) (s1.getRSE_CTLR_NMBR() - s2.getRSE_CTLR_NMBR());
+        }
+    };
+
     @Data
     @Builder
     public static class RseOdTraf {

+ 3 - 4
src/main/java/com/its/op/scheduler/ItsApiScheduler.java

@@ -91,7 +91,6 @@ public class ItsApiScheduler {
      */
     @Async
     @Scheduled(cron = "40 0/10 * * * *")  // 10분 주기 작업 실행
-    //@Scheduled(cron = "40 * * * * *")  // 10분 주기 작업 실행
     public void jobDbSvrStts() {
         if (!this.applicationConfig.isStartSchedule()) {
             return;
@@ -102,9 +101,9 @@ public class ItsApiScheduler {
 //        }
     }
 
-    /*@Async
+    @Async
     @Scheduled(cron = "0/2 * * * * *")  // 2초 주기 작업 실행
-    public void checkKafkaServerAlive() {
-    }*/
+    public void jobSignalPhaseCurrent() {
+    }
 
 }

+ 53 - 49
src/main/java/com/its/op/scheduler/job/DbmsSttsJobThread.java

@@ -15,7 +15,6 @@ import org.springframework.util.StopWatch;
 import javax.annotation.PostConstruct;
 import java.util.HashMap;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
 
 @Slf4j
 @AllArgsConstructor
@@ -38,84 +37,89 @@ public class DbmsSttsJobThread {
         StopWatch stopWatch = new StopWatch();
         stopWatch.start();
 
-        AtomicReference<String> itsMaxTblsName = new AtomicReference<>("");
-        AtomicReference<String> bisMaxTblsName = new AtomicReference<>("");
+        HashMap<String, TbDbmsSttsDto> sessionMap = new HashMap<>();
+        HashMap<String, TbDbmsSttsDto> tbsMap = new HashMap<>();
 
-        HashMap<String, TbDbmsSttsDto> dbmsMap = new HashMap<>();
         List<TbDbmsSttsDto> dbms = this.dbmsSttsMapper.findAll();
         dbms.forEach((obj) -> {
-            dbmsMap.put(obj.getDbSvrId(), obj);
-            if (obj.getDbSvrId().equals("2")) {
-                itsMaxTblsName.set(obj.getTblsNm());
-            } else if (obj.getDbSvrId().equals("4")) {
-                bisMaxTblsName.set(obj.getTblsNm());
+            if ("1".equals(obj.getDbSvrId()) || "2".equals(obj.getDbSvrId())) {
+                sessionMap.put(obj.getDbSvrId(), obj);
+            }
+            else {
+                tbsMap.put(obj.getTblsNm(), obj);
             }
         });
 
         String UPDT_DT = ItsUtils.getSysTime();
         List<SessionSttsDto> session = this.dbmsSttsMapper.findSessionUsage();
         session.forEach((obj) -> {
-            String dbSvrId;
-            if (obj.getINST_ID() == 101) {
-                dbSvrId = "1";
-            } else if (obj.getINST_ID() == 102) {
-                dbSvrId = "2";
-            } else {
-                return;
-            }
-            TbDbmsSttsDto data = dbmsMap.get(dbSvrId);
+            String dbSvrId = String.valueOf(obj.getINST_ID());
+            TbDbmsSttsDto data = sessionMap.get(dbSvrId);
             if (data != null) {
                 data.setUseSesn(String.valueOf(obj.getUSE_SESN()));
                 data.setUpdtDt(UPDT_DT);
             }
         });
 
-        final String[] minTblsName = new String[1];
-        final Double[] minFree = {100.0};
-        final Double[] total = {0.0};
-        final Double[] free = {0.0};
+        Double minFree = 100.0;
+        Double total = 0.0;
+        Double free = 0.0;
 
-        minTblsName[0] = itsMaxTblsName.get();
         List<TblSpaceSttsDto> tbls = this.dbmsSttsMapper.findTblsUsage();
-        tbls.forEach((obj) -> {
-            if (obj.getTBLS_NM().contains("UNDO")) {
-                return;
-            }
-            if (!obj.getTBLS_NM().contains("_")) {
-                return;
+        for (TblSpaceSttsDto obj : tbls) {
+            total += obj.getTOTAL();
+            free += obj.getFREE();
+            if (minFree > obj.getTBLS_REMAIN_STTS()) {
+                minFree = obj.getTBLS_REMAIN_STTS();
             }
-            total[0] += obj.getTOTAL();
-            free[0] += obj.getFREE();
-            if (minFree[0] > obj.getTBLS_REMAIN_STTS()) {
-                minTblsName[0] = obj.getTBLS_NM();
-                minFree[0] = obj.getTBLS_REMAIN_STTS();
+            TbDbmsSttsDto data = tbsMap.get(obj.getTBLS_NM());
+            if (data != null) {
+                Double totalRemain = 100 - obj.getTBLS_REMAIN_STTS();
+                String tblsRmndCpct = String.format("%.2f", totalRemain);
+                data.setTblsRmndCpct(tblsRmndCpct);
+                data.setUpdtDt(UPDT_DT);
             }
-        });
-        Double totalRemain = 100 - ((total[0] - free[0]) * 100 / total[0]);
+        }
+
+        Double totalRemain = 100 - ((total - free) * 100 / total);
         String tblsRmndCpct = String.format("%.2f", totalRemain);
-        TbDbmsSttsDto data1 = dbmsMap.get("1");
+        TbDbmsSttsDto data1 = sessionMap.get("1");
         if (data1 != null) {
             data1.setTblsRmndCpct(tblsRmndCpct);
             data1.setUpdtDt(UPDT_DT);
         }
-        TbDbmsSttsDto data2 = dbmsMap.get("2");
-        if (data2 != null) {
-            data2.setTblsNm(minTblsName[0]);
-            data2.setTblsRmndCpct(String.valueOf(minFree[0]));
-            data2.setUpdtDt(UPDT_DT);
-        }
         //log.info("ITS DBMS: Total {}, Free {}", total[0], free[0]);
 
         // 결과 저장
-//        for (Map.Entry<String, TbDbmsSttsDto> entry : dbmsMap.entrySet()) {
-//            TbDbmsSttsDto obj = entry.getValue();
-//            this.dbmsSttsMapper.updateDbmsStts(obj);
-//        }
-        dbmsMap.forEach((key, obj) -> {
-            this.dbmsSttsMapper.updateDbmsStts(obj);
+        sessionMap.forEach((key, obj) -> {
+            updateDbmsStts(obj);
         });
+        tbsMap.forEach((key, obj) -> {
+            updateDbmsStts(obj);
+        });
+
         stopWatch.stop();
         log.info("--END: DbmsSttsJobThread.run: {}, {} ms.", Thread.currentThread().getName(), stopWatch.getTotalTimeMillis());
     }
 
+    public void updateDbmsStts(TbDbmsSttsDto obj) {
+        try {
+            if (obj.getUpdtDt() == null) {
+                obj.setUpdtDt(ItsUtils.getSysTime());
+            }
+            if (obj.getDbSvrNm() == null) {
+                obj.setDbSvrNm("");
+            }
+            if (obj.getUseSesn() == null) {
+                obj.setUseSesn("");
+            }
+            if (obj.getTblsRmndCpct() == null) {
+                obj.setTblsRmndCpct("");
+            }
+            this.dbmsSttsMapper.updateDbmsStts(obj);
+        } catch (Exception e) {
+            log.error("Error updating: {}", obj);
+        }
+    }
+
 }

+ 12 - 5
src/main/java/com/its/op/service/its/rse/TbRseOdStatHhService.java

@@ -87,13 +87,20 @@ public class TbRseOdStatHhService {
         }
 
         // 키로 정렬
-        Object[] keys = resultMap.keySet().toArray();
-        Arrays.sort(keys);
-        for (Long key : resultMap.keySet()) {
-            result.add(resultMap.get(key));
-        }
+//        Object[] keys = resultMap.keySet().toArray();
+//        Arrays.sort(keys);
+//        for (Long key : resultMap.keySet()) {
+//            result.add(resultMap.get(key));
+//        }
+        result = new ArrayList<>(resultMap.values());
+//        JSONArray jArray = new JSONArray(result);
+//        JSONObject jObject = new JSONObject();
+//        JSONObject jObject = new JSONObject(new TreeMap());
+//        jObject.put("list", jArray);
+//        System.out.println(jObject.toString());
 
 //        List<RseOdStatListDataDto> result = resultMap.values();
+//        Collections.sort(result, RseOdStatListDataDto.RseOdStatListDataDtoSort);
 //        Collections.sort(result);
         return result;
     }

+ 4 - 2
src/main/resources/mybatis/mapper/its/dbms/DbmsSttsMapper.xml

@@ -11,9 +11,11 @@
         ]]>
     </select>
 
+<!--    SELECT * from v$resource_limit where resource_name in ('processes', 'sessions', 'transactions');-->
+
     <select id="findSessionUsage" resultType="com.its.op.dto.its.dbms.SessionSttsDto">
         <![CDATA[
-        SELECT INST_ID AS INST_ID, ROUND(COUNT(1) / 200 * 100, 1) AS USE_SESN FROM GV$SESSION GROUP BY INST_ID
+        SELECT INST_ID AS INST_ID, ROUND(COUNT(1) / 2432 * 100, 1) AS USE_SESN FROM GV$SESSION GROUP BY INST_ID
         ]]>
     </select>
 
@@ -28,7 +30,7 @@
               FROM DBA_FREE_SPACE Y
               GROUP BY Y.TABLESPACE_NAME) B
         WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)
-          AND A.TABLESPACE_NAME NOT IN ('UNDO', 'UNDO0', 'UNDO1', 'USR', 'TEMP', 'SYSTEM')
+          AND A.TABLESPACE_NAME NOT IN ('UNDO', 'UNDO0', 'UNDO1', 'USR', 'TEMP', 'SYSTEM', 'SYSAUX', 'USERS', 'UNDOTBS1')
         ]]>
     </select>