Przeglądaj źródła

ptis server update

HANTE 2 miesięcy temu
rodzic
commit
7aaa50f4ff

+ 1 - 1
conf/utic-ptis-server.pid

@@ -1 +1 @@
-10548
+5380

+ 1 - 1
utic-center-common/src/main/java/com/utic/center/common/aspect/SqlOperationAspect.java

@@ -80,7 +80,7 @@ public class SqlOperationAspect extends AbstractLoggingAspect {
             count = (int)result;  // int 반환 타입 처리
         } else if (signature.getReturnType().equals(List.class)) {
             List<?> list = (List<?>)result;  // List 반환 타입 처리
-            count = list.size();  // List의 크기 계산
+            count = list.size();  // List 의 크기 계산
         }
 
         if (!Objects.equals(param, "") && paramValue == null) {

+ 2 - 2
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/config/ApplicationConfig.java

@@ -25,13 +25,13 @@ public class ApplicationConfig {
     private int prcsThreadCount = 10;
     private int dbmsBatchSize = 1000;
 
-    private String bootingDateTime;
+    private String bootingTime;
     private boolean startSchedule;
 
     @PostConstruct
     private void init() {
         this.startSchedule = false;
-        this.bootingDateTime = TimeUtils.now();
+        this.bootingTime = TimeUtils.now();
 
         if (this.dbmsBatchSize <= 1000) {
             this.dbmsBatchSize = 1000;

+ 15 - 1
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/controller/UticPtisServerController.java

@@ -2,6 +2,8 @@ package com.utic.center.utic.ptis.server.controller;
 
 import com.utic.center.common.utils.LogUtils;
 import com.utic.center.common.utils.TimeUtils;
+import com.utic.center.utic.ptis.server.dto.BatchJobInfoDto;
+import com.utic.center.utic.ptis.server.repository.ApplicationRepository;
 import com.utic.center.utic.ptis.server.service.UticPtisServerService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -44,6 +46,7 @@ public class UticPtisServerController {
     }
 
     public void run() {
+        long start = System.currentTimeMillis();
         calculateTime();
         if (this.yesterday != this.today) {
             //this.service.processDay(); // 일작업 수행
@@ -59,8 +62,14 @@ public class UticPtisServerController {
         this.isRunning = true; // 현재 작업이 실행중임을 표시
         this.prevPrcsTime = TimeUtils.getCurrentTimeString(); // 현재 작업 시간 저장
 
+        BatchJobInfoDto jobInfo = new BatchJobInfoDto().builder()
+                .startTime(TimeUtils.now())
+                .endTime(TimeUtils.now())
+                .elapsedTime(0)
+                .build();
+
         log.info("");
-        log.info("[05MIN...] {}: [{}].", LogUtils.elapsedLog("PTIS ETLP JOb Processing"), this.prevPrcsTime);
+        log.info("[05MIN...] {}: [{}]", LogUtils.elapsedLog("PTIS ETLP Job Processing Start"), this.prevPrcsTime);
 
         this.service.initIndigoStats();
         this.service.jobEtlpTraf();
@@ -70,5 +79,10 @@ public class UticPtisServerController {
         this.service .jobDeleteTable();
 
         this.isRunning = false; // 현재 작업이 종료됨을 표시
+        long executionTime = System.currentTimeMillis() - start;
+        jobInfo.setEndTime(TimeUtils.now());
+        jobInfo.setElapsedTime(executionTime);
+        ApplicationRepository.addJobInfo(jobInfo);
+        log.info("[05MIN...] {}: [{}].", LogUtils.elapsedLog("PTIS ETLP Job Processing End", executionTime), this.prevPrcsTime);
     }
 }

+ 42 - 27
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/controller/UticPtisServerRestController.java

@@ -2,12 +2,15 @@ package com.utic.center.utic.ptis.server.controller;
 
 import com.utic.center.common.utils.TimeUtils;
 import com.utic.center.utic.ptis.server.config.ApplicationConfig;
+import com.utic.center.utic.ptis.server.dto.BatchJobInfoDto;
 import com.utic.center.utic.ptis.server.repository.ApplicationRepository;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.concurrent.TimeUnit;
+
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("")
@@ -15,41 +18,53 @@ public class UticPtisServerRestController {
 
     private final ApplicationConfig config;
     private final ApplicationRepository repo;
-
+    
+    private String elapsedTimeStr(long elapsed) {
+        long hours = TimeUnit.HOURS.convert(elapsed, TimeUnit.NANOSECONDS);
+        long minutes = TimeUnit.MINUTES.convert(elapsed, TimeUnit.NANOSECONDS);
+        long seconds = TimeUnit.SECONDS.convert(elapsed, TimeUnit.NANOSECONDS);
+        long miliSeconds = TimeUnit.MILLISECONDS.convert(elapsed, TimeUnit.NANOSECONDS) % 1000L;
+        long microSeconds = TimeUnit.MICROSECONDS.convert(elapsed, TimeUnit.NANOSECONDS) % 1000L;
+        long nanoSeconds = TimeUnit.NANOSECONDS.convert(elapsed, TimeUnit.NANOSECONDS) % 1000L;
+        if (hours > 0L) {
+            return String.format("%,d hr. %2d min. %2d sec. %3d ms. %3d us. %3d ns.", hours, minutes, seconds, miliSeconds, microSeconds, nanoSeconds);
+        } else if (minutes > 0L) {
+            return String.format("%2d min. %2d sec. %3d ms. %3d us. %3d ns.", minutes, seconds, miliSeconds, microSeconds, nanoSeconds);
+        } else if (seconds > 0L) {
+            return String.format("%2d sec. %3d ms. %3d us. %3d ns.", seconds, miliSeconds, microSeconds, nanoSeconds);
+        } else if (miliSeconds > 0L) {
+            return String.format("%3d ms. %3d us. %3d ns.", miliSeconds, microSeconds, nanoSeconds);
+        } else {
+            return microSeconds > 0L ? String.format("--- ms. %3d us. %3d ns.", microSeconds, nanoSeconds) : String.format("--- ms. --- us. %3d ns.", nanoSeconds);
+        }
+    }
+    
     @GetMapping(value = "/info", produces = {"application/json; charset=utf8"})
-    public String info() {
+    public String infoString() {
         String sep = System.lineSeparator();
-        String heading = "----------------------------------------------------------------------------";
+        String heading = "--------------------------------------------------------------------------------------------------------------";
 
         StringBuilder sb = new StringBuilder();
         sb.append(heading).append(sep);
-        sb.append("UTIC PTIS ETLP Server").append(sep);
+        sb.append("UTIC Center PTIS ETLP Server Running Information").append(sep);
         sb.append(heading).append(sep);
-        sb.append(String.format("Process Id: %s, %s, %s", this.config.getProcessId(), this.config.getBootingDateTime(), TimeUtils.now())).append(sep);
+        sb.append(String.format("Process Id: %s, %s, %s, %s", this.config.getProcessId(), this.config.getProcessName(), this.config.getBootingTime(), TimeUtils.now())).append(sep);
         sb.append(heading).append(sep);
-        sb.append("SEQ REGION   [TOD]  LastTodSimTime        Int(EA) Center Name").append(sep);
+        sb.append(String.format("%s %-20.20s %-20.20s %s",
+                " SEQ", "Start", "End", "Elapsed Time")).append(sep);
+        sb.append(heading).append(sep);
+        int total = 0;
+
+        int jobSize = ApplicationRepository.batchJobInfoList.size();
+        for (int ii = jobSize-1; ii >= 0; ii--) {
+            BatchJobInfoDto jobInfo = ApplicationRepository.batchJobInfoList.get(ii);
+            total++;
+            String startTime = jobInfo.getStartTime();
+            String endTime = jobInfo.getEndTime();
+            String elapsedTime = elapsedTimeStr(jobInfo.getElapsedTime());
+            sb.append(String.format("%4d %-20.20s %-20.20s %s", total, startTime, endTime, elapsedTime)).append(sep);
+        }
         sb.append(heading).append(sep);
-        int ii = 1;
-//        List<String> keySet = new ArrayList<>(this.repo.getCenterMap().keySet());
-//        Collections.sort(keySet);
-//        DecimalFormat dF = new DecimalFormat("#,###");
-//        for (String key : keySet) {
-//            RegionCenter region = this.repo.getCenterMap().get(key);
-//            if (region == null) {
-//                continue;
-//            }
-//            String tod = region.isSimulateFlag() ? " YES " : " NO  ";
-//            sb.append(String.format("%3d %-6.6s   %s  %19.19s  %7s  %s",
-//                            ii++,
-//                            region.getRegionCd(),
-//                            tod,
-//                            region.getLastTodRunTimeStr(),
-//                            dF.format(region.getIntCount()),
-//                            region.getRegionNm()))
-//                    .append(sep);
-//
-//        }
-//        sb.append(heading).append(sep);
         return sb.toString();
     }
 

+ 3 - 1
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/dto/BatchJobInfoDto.java

@@ -14,6 +14,8 @@ import java.io.Serializable;
 public class BatchJobInfoDto implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private Integer partitionCount;
+    private String startTime;  // 작업 시작 시각
+    private String endTime;    // 작업 종료 시각
+    private long elapsedTime; // 작업 소요 시간 (밀리초 단위)
 
 }

+ 7 - 0
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/repository/ApplicationRepository.java

@@ -48,6 +48,13 @@ public class ApplicationRepository {
 
     public static List<BatchJobInfoDto> batchJobInfoList = new ArrayList<>();
 
+    public static void addJobInfo(BatchJobInfoDto jobInfo) {
+        if (batchJobInfoList.size() > 72) {
+            batchJobInfoList.remove(0);
+        }
+        batchJobInfoList.add(jobInfo);
+    }
+
     @PostConstruct
     private void init() {
         log.info("ApplicationRepository.init: Start.");

+ 42 - 47
utic-ptis-server/src/main/java/com/utic/center/utic/ptis/server/service/UticPtisServerService.java

@@ -127,6 +127,10 @@ public class UticPtisServerService implements AbstractProcessService {
         ApplicationRepository.indigoStats.reset(); // 일작업 후 통계정보 초기화
    }
 
+   private void printResult(String message, int result) {
+       log.info("[05MIN...] {}: {} EA.", LogUtils.elapsedLog(message), result);
+   }
+
     @ProcessingElapsed(type="05MIN", name="TRAF Processing")
     public void jobEtlpTraf() {
         int result = 0;
@@ -143,31 +147,20 @@ public class UticPtisServerService implements AbstractProcessService {
         }
         if (regDate.equals(fromDate)) {
             log.warn("[05MIN...] {}: No new traf data to process.", LogUtils.elapsedLog(trafTable));
+            result = 0; // 새로운 교통정보가 없음
         }
-
-        // 교통정보 이관
-        result = this.repo.insertCurlinkstPoliceLog();
-        if (result < 0) {
-            log.error("[05MIN...] {}: Failed to insert traffic data.", LogUtils.elapsedLog("CURLINKST_POLICE_LOG"));
-            return; // 교통정보 이관 실패
+        else {
+            // 교통정보 이관
+            result = this.repo.insertCurlinkstPoliceLog();
+            if (result < 0) {
+                log.error("[05MIN...] {}: Failed to insert traffic data.", LogUtils.elapsedLog("CURLINKST_POLICE_LOG"));
+                result = 0; // 교통정보 이관 실패
+            }
         }
 
         ApplicationRepository.lastRegDate.setTrafDt(regDate); // 교통정보 최종시각 갱신
         ApplicationRepository.indigoStats.setTrafCnt(result + ApplicationRepository.indigoStats.getTrafCnt());
-        log.info("[05MIN...] {}: {} EA.", LogUtils.elapsedLog("Total Traffic"), ApplicationRepository.indigoStats.getTrafCnt());
-
-//        // 임시 교통정보테이블 삭제(사용안함)
-//        result = this.repo.deleteRcvLinkTrafficTmp();
-//        if (result < 0) {
-//            log.error("[05MIN...] {}: Failed to delete temporary traffic data.", LogUtils.elapsedLog("RCV_LINK_TRAFFIC_TMP"));
-//            return; // 임시 교통정보테이블 삭제 실패
-//        }
-
-//        // 임시 교통정보테이블에 데이터 이관(사용안함)
-//        result = this.repo.insertRcvLinkTrafficTmp();
-//        if (result < 0) {
-//            log.error("[05MIN...] {}: Failed to insert temporary traffic data.", LogUtils.elapsedLog("RCV_LINK_TRAFFIC_TMP"));
-//        }
+        printResult("Total Traffic", ApplicationRepository.indigoStats.getTrafCnt());
     }
 
     @ProcessingElapsed(type="05MIN", name="EVENT Processing")
@@ -186,25 +179,26 @@ public class UticPtisServerService implements AbstractProcessService {
         }
         if (regDate.equals(fromDate)) {
             log.info("[05MIN...] {}: No new evnt data to process.", LogUtils.elapsedLog(imsDataTable));
-            return; // 새로운 통제정보가 없음
+            result = 0; // 새로운 통제정보가 없음
         }
+        else {
+            // 통제정보 이관
+            result = this.repo.insertEventidPoliceLog(fromDate, regDate);
+            if (result < 0) {
+                log.error("[05MIN...] {}: Failed to insert event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG"));
+                result = 0; // 통제정보 이관 실패
+            }
 
-        // 통제정보 이관
-        result = this.repo.insertEventidPoliceLog(fromDate, regDate);
-        if (result < 0) {
-            log.error("[05MIN...] {}: Failed to insert event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG"));
-            return; // 통제정보 이관 실패
+            // 임시 통제정보테이블에 데이터 이관
+            int tmpResult = this.repo.insertEventidPoliceLogTmp(fromDate, regDate);
+            if (tmpResult < 0) {
+                log.error("[05MIN...] {}: Failed to insert temporary event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG_TMP"));
+            }
         }
 
         ApplicationRepository.lastRegDate.setEvntDt(regDate); // 통제정보 최종시각 갱신
         ApplicationRepository.indigoStats.setEvntCnt(result + ApplicationRepository.indigoStats.getEvntCnt());
-        log.info("[05MIN...] {}: {} EA.", LogUtils.elapsedLog("Total Event"), ApplicationRepository.indigoStats.getEvntCnt());
-
-        // 임시 통제정보테이블에 데이터 이관
-        result = this.repo.insertEventidPoliceLogTmp(fromDate, regDate);
-        if (result < 0) {
-            log.error("[05MIN...] {}: Failed to insert temporary event data.", LogUtils.elapsedLog("EVENTID_POLICE_LOG_TMP"));
-        }
+        printResult("Total Event", ApplicationRepository.indigoStats.getEvntCnt());
     }
 
     @ProcessingElapsed(type="05MIN", name="INCIDENT Processing")
@@ -223,31 +217,32 @@ public class UticPtisServerService implements AbstractProcessService {
         }
         if (regDate.equals(fromDate)) {
             log.info("[05MIN...] {}: No new incd data to process.", LogUtils.elapsedLog(imsDataTable));
-            return; // 새로운 돌발정보가 없음
+            result = 0; // 새로운 돌발정보가 없음
         }
-
-        // 돌발정보 이관
-        result = this.repo.insertOccuridPoliceLog(fromDate, regDate);
-        if (result < 0) {
-            log.error("[05MIN...] {}: Failed to insert incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG"));
-            return; // 돌발정보 이관 실패
+        else {
+            // 돌발정보 이관
+            result = this.repo.insertOccuridPoliceLog(fromDate, regDate);
+            if (result < 0) {
+                log.error("[05MIN...] {}: Failed to insert incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG"));
+                result = 0; // 돌발정보 이관 실패
+            }
+            // 임시 돌발정보테이블에 데이터 이관
+            int tmpResult = this.repo.insertOccuridPoliceLogTmp(fromDate, regDate);
+            if (tmpResult < 0) {
+                log.error("[05MIN...] {}: Failed to insert temporary incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG_TMP"));
+            }
         }
 
         ApplicationRepository.lastRegDate.setIncdDt(regDate); // 돌발정보 최종시각 갱신
         ApplicationRepository.indigoStats.setIncdCnt(result + ApplicationRepository.indigoStats.getIncdCnt());
-        log.info("[05MIN...] {}: {} EA.", LogUtils.elapsedLog("Total Incident"), ApplicationRepository.indigoStats.getIncdCnt());
-
-        // 임시 돌발정보테이블에 데이터 이관
-        result = this.repo.insertOccuridPoliceLogTmp(fromDate, regDate);
-        if (result < 0) {
-            log.error("[05MIN...] {}: Failed to insert temporary incident data.", LogUtils.elapsedLog("OCCURID_POLICE_LOG_TMP"));
-        }
+        printResult("Total Incident", ApplicationRepository.indigoStats.getIncdCnt());
     }
 
     @ProcessingElapsed(type="05MIN", name="DELETE Processing")
     public void jobDeleteTable() {
         int result = 0;
 
+        // 수신 교통정보 삭제
         result = this.repo.deleteRcvLinkTraffic();
         if (result < 0) {
             log.error("[05MIN...] {}: Failed to delete rcv traffic data.", LogUtils.elapsedLog("RCV_LINK_TRAFFIC"));