Browse Source

maintenance 2nd

shjung 2 năm trước cách đây
mục cha
commit
7285337431

+ 2 - 2
src/main/java/com/its/pis/PisCommServerApplication.java

@@ -99,9 +99,9 @@ public class PisCommServerApplication implements CommandLineRunner, ApplicationL
         unitSystService.updateUnitSystStts(true);
 
         PisInfrService ctlrService = (PisInfrService)AppUtils.getBean(PisInfrService.class);
-        ctlrService.loadDb();
+        //ctlrService.loadDb();
         ctlrService.updateCtlrStts(true);
-        ctlrService.startC2C_Client();
+//        ctlrService.startC2C_Client();
 
         // schedule enable
         processConfig.setStartSchedule(true);

+ 1 - 0
src/main/java/com/its/pis/entity/TbPisInfr.java

@@ -41,6 +41,7 @@ public class TbPisInfr {
 	private int PIS_CYCLE;
 	private String PIS_CLCT_YN;
 	private String DEL_YN;
+	private String connectIpAddr;
 	private long lastRecvTime;
 
 	private Map<String, TbPrkPlce>  rltnPrkPlce;

+ 39 - 35
src/main/java/com/its/pis/service/PisInfrService.java

@@ -21,6 +21,7 @@ import java.util.*;
 @Slf4j
 @Service
 @Transactional(rollbackFor = {Exception.class})
+//@Order(1)
 public class PisInfrService {
 
     private PisInfrMapper pisInfrMapper;
@@ -36,6 +37,7 @@ public class PisInfrService {
         this.prkPlceMapper = (PrkPlceMapper) AppUtils.getBean(PrkPlceMapper.class);
         this.dbmsDataProcess = (DbmsDataProcess) AppUtils.getBean(DbmsDataProcess.class);
         this.historyMin = -1;
+        loadDb();
         log.info("PisInfrService.init: ..End.");
     }
 
@@ -61,7 +63,7 @@ public class PisInfrService {
         List<TbPisInfr> objList = this.pisInfrMapper.selectAll();
         for (TbPisInfr obj : objList) {
             obj.setPIS_IP(obj.getPIS_IP().trim());
-            obj.setPIS_CYCLE(Math.max(10, obj.getPIS_CYCLE()));
+            obj.setPIS_CYCLE(Math.max(30, obj.getPIS_CYCLE()));
             obj.getStts().setPIS_NMBR(obj.getPIS_NMBR());
             obj.getStts().initStts(false);
 
@@ -71,22 +73,22 @@ public class PisInfrService {
             AppRepository.getInstance().getPisIdMap().put(obj.getPIS_ID(), obj);
         }
 
-        log.info("loadPisInfr.PIS NMBR List............... {} EA.", AppRepository.getInstance().getPisInfrMap().size());
-        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisInfrMap().entrySet()) {
-            log.info("  {}", e.toString());
-        }
-        log.info("loadPisInfr.PIS IP List............ {} EA.", AppRepository.getInstance().getPisIpAddrMap().size());
-        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisIpAddrMap().entrySet()) {
-            log.info("  {}", e.toString());
-        }
-        log.info("loadPisInfr.PIS TOKEN List............ {} EA.", AppRepository.getInstance().getPisTokenMap().size());
-        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisTokenMap().entrySet()) {
-            log.info("  {}", e.toString());
-        }
-        log.info("loadPisInfr.PIS ID List............ {} EA.", AppRepository.getInstance().getPisIdMap().size());
-        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisIdMap().entrySet()) {
-            log.info("  {}", e.toString());
-        }
+//        log.info("loadPisInfr.PIS NMBR List............... {} EA.", AppRepository.getInstance().getPisInfrMap().size());
+//        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisInfrMap().entrySet()) {
+//            log.info("  {}", e.toString());
+//        }
+//        log.info("loadPisInfr.PIS IP List............ {} EA.", AppRepository.getInstance().getPisIpAddrMap().size());
+//        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisIpAddrMap().entrySet()) {
+//            log.info("  {}", e.toString());
+//        }
+//        log.info("loadPisInfr.PIS TOKEN List............ {} EA.", AppRepository.getInstance().getPisTokenMap().size());
+//        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisTokenMap().entrySet()) {
+//            log.info("  {}", e.toString());
+//        }
+//        log.info("loadPisInfr.PIS ID List............ {} EA.", AppRepository.getInstance().getPisIdMap().size());
+//        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisIdMap().entrySet()) {
+//            log.info("  {}", e.toString());
+//        }
     }
 
     /**
@@ -130,13 +132,13 @@ public class PisInfrService {
             obj.getRltnPrkPlce().put(rltn.getPRK_PLCE_NMBR(), prlt);
         }
 
-        log.info("loadPisRltnPrlt.PIS Rltn PRLT List.................");
-        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisInfrMap().entrySet()) {
-            log.info("loadPisRltnPrlt.PIS PRLT Prlt: {}", e.getValue().getPIS_NMBR());
-            for (Map.Entry<String, TbPrkPlce> l : e.getValue().getRltnPrkPlce().entrySet()) {
-                log.info("  {}", l.toString());
-            }
-        }
+//        log.info("loadPisRltnPrlt.PIS Rltn PRLT List.................");
+//        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisInfrMap().entrySet()) {
+//            log.info("loadPisRltnPrlt.PIS PRLT Prlt: {}", e.getValue().getPIS_NMBR());
+//            for (Map.Entry<String, TbPrkPlce> l : e.getValue().getRltnPrkPlce().entrySet()) {
+//                log.info("  {}", l.toString());
+//            }
+//        }
     }
 
     /**
@@ -153,15 +155,15 @@ public class PisInfrService {
             AppRepository.getInstance().getPrltIdMap().put(obj.getPRK_PLCE_MANAGE_NO(), obj);
         }
 
-        log.info("loadPrkPlce.PRK NMBR List............... {} EA.", AppRepository.getInstance().getPrltNmbrMap().size());
-        for (Map.Entry<String, TbPrkPlce> e : AppRepository.getInstance().getPrltNmbrMap().entrySet()) {
-            log.info("  {}", e.toString());
-        }
-
-        log.info("loadPrkPlce.PRK ID List............... {} EA.", AppRepository.getInstance().getPrltIdMap().size());
-        for (Map.Entry<String, TbPrkPlce> e : AppRepository.getInstance().getPrltIdMap().entrySet()) {
-            log.info("  {}", e.toString());
-        }
+//        log.info("loadPrkPlce.PRK NMBR List............... {} EA.", AppRepository.getInstance().getPrltNmbrMap().size());
+//        for (Map.Entry<String, TbPrkPlce> e : AppRepository.getInstance().getPrltNmbrMap().entrySet()) {
+//            log.info("  {}", e.toString());
+//        }
+//
+//        log.info("loadPrkPlce.PRK ID List............... {} EA.", AppRepository.getInstance().getPrltIdMap().size());
+//        for (Map.Entry<String, TbPrkPlce> e : AppRepository.getInstance().getPrltIdMap().entrySet()) {
+//            log.info("  {}", e.toString());
+//        }
     }
 
     /**
@@ -288,13 +290,15 @@ public class PisInfrService {
             if (pis.getNetState() >= NET.LOGIN_REQ && pis.getSession() != null) {
                 // 주차정보시스템 통신정상
                 long recvTimout = currMilliSeconds - pis.getLastRecvTime();
-                if (recvTimout > 60000) {
+                if (recvTimout > ((pis.getPIS_CYCLE() * 5) * 1000)) {
+                    log.error("Idle timeout: {}, ipAddr={}", pis.getPIS_ID(), pis.getConnectIpAddr());
                     pis.channelClosed();
                     continue;
                 }
 
                 if (recvTimout > (pis.getPIS_CYCLE() * 1000L)) {
-                    pis.requestRlTimeInfo();
+                    boolean isSendOk = pis.requestRlTimeInfo();
+                    log.info("Idle request: {}, ipAddr={}, sendOk={}", pis.getPIS_ID(), pis.getConnectIpAddr(), isSendOk);
                 }
             }
         }

+ 3 - 0
src/main/java/com/its/pis/websocket/PisWebSocketConfig.java

@@ -11,6 +11,7 @@ import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
 @RequiredArgsConstructor
 @Configuration
 @EnableWebSocket
+//@Order(2)
 public class PisWebSocketConfig implements WebSocketConfigurer {
 
     public static final String WS_C2F_ENDPOINT = "/ws/pis-c2f.do";
@@ -49,6 +50,8 @@ public class PisWebSocketConfig implements WebSocketConfigurer {
         //.addInterceptors(new ItsWebSocketHandshakeInterceptor()).setAllowedOriginPatterns("*")
         //.setAllowedOrigins("*")
         ; // 그냥 websocket 지원
+
+        log.info("PisWebSocketConfig.registerWebSocketHandlers: ..End.");
     }
 
 }

+ 8 - 2
src/main/java/com/its/pis/websocket/PisWebSocketHandler.java

@@ -105,6 +105,7 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
             if (pisSession != null && pisSession.isOpen()) {
                 log.error("{}: afterConnectionEstablished: ipAddr={}, token={}, session already opened, old session will be closed", this.type, ipAddr, token);
                 try {
+                    log.error("{}: afterConnectionEstablished: ipAddr={}, token={}, pis={}, old session", this.type, pis.getConnectIpAddr(), pis.getPIS_TOKEN(), pis.getPIS_ID());
                     pisSession.close();
                 } catch(IOException e) {}
             }
@@ -112,6 +113,7 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
 
         PisWebSocketSession vo = new PisWebSocketSession(pis, session);
         pis.channelOpen(vo);
+        pis.setConnectIpAddr(ipAddr);
         PisWebSocketSessionManager.getInstance().addSession(session, vo);
 
         session.setBinaryMessageSizeLimit(1*1024*1024);
@@ -119,7 +121,7 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
         super.afterConnectionEstablished(session);
 
         updatePisStts(pis, true);
-        log.info("{}: afterConnectionEstablished: connection accept, {}, {}", this.type, pis.getPIS_ID(), pis.getPIS_NM());
+        log.info("{}: afterConnectionEstablished: connection accept, {}, ipAddr={}, token={}, {}", this.type, pis.getPIS_ID(), ipAddr, token, pis.getPIS_NM());
     }
 
     //클라이언트 연결을 끊었을 때 실행
@@ -162,7 +164,11 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
 
     @Override
     public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
-        log.error("{}: handleTransportError: {}", this.type, exception.getMessage());
+        String ipAddr = "1";
+        if (session.getRemoteAddress() != null) {
+            ipAddr = session.getRemoteAddress().getHostString();
+        }
+        log.error("{}: handleTransportError: ipAddr={}, {}", this.type, ipAddr, exception.getMessage());
         if (session.isOpen()) {
             session.close();
         }

+ 3 - 2
src/main/java/com/its/pis/websocket/PisWebSocketHandlerC2F.java

@@ -28,6 +28,7 @@ public class PisWebSocketHandlerC2F extends PisWebSocketHandler {
     @Override
     protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
 
+        String ipAddr = session.getRemoteAddress().getHostString();
         String payloadMessage = message.getPayload();
         if (payloadMessage == null || payloadMessage.trim().isEmpty()) {
             log.error("C2F: Payload data is empty");
@@ -37,14 +38,14 @@ public class PisWebSocketHandlerC2F extends PisWebSocketHandler {
 
         PisWebSocketSession sessionClient = PisWebSocketSessionManager.getInstance().getSession(session);
         if (sessionClient == null) {
-            log.error("C2F: Request session not found, session will be closed {}", session);
+            log.error("C2F: Request session not found, session will be closed {}, ipAddr={}", session, ipAddr);
             session.close();
             return;
         }
 
         TbPisInfr pis = sessionClient.getObj();
         if (pis == null) {
-            log.error("C2F: PIS object not found, session will be closed {}", session);
+            log.error("C2F: PIS object not found, session will be closed {}, ipAddr={}", session, ipAddr);
             session.close();
             return;
         }

+ 6 - 5
src/main/resources/logback-spring.xml

@@ -24,7 +24,8 @@
     <property name="MAX_FILESIZE" value="10MB"/>
     <property name="MAX_HISTORY"  value="30"/>
     <property name="LOG_PATTERN_FILE"        value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%30t] [%5level] %42logger{35}.%-20M ${PID:-} %msg%n"/>
+<!--    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%30t] [%5level] %42logger{35}.%-20M ${PID:-} %msg%n"/>-->
+    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
     <property name="LOG_PATTERN_PACKET"      value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
     <property name="LOG_PATTERN_SESSION"     value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
     <property name="LOG_PATTERN_CENTER_COMM" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
@@ -138,10 +139,10 @@
         </rollingPolicy>
     </appender>
 
-<!--    <logger name="${APP_CLASS_PATH}.xnettcp" level="DEBUG" additivity="true">-->
-<!--        <appender-ref ref="FILE_SESSION"/>-->
-<!--        <appender-ref ref="FILE_ERROR"/>-->
-<!--    </logger>-->
+    <logger name="${APP_CLASS_PATH}.websocket.PisWebSocketHandler" level="DEBUG" additivity="true">
+        <appender-ref ref="FILE_SESSION"/>
+        <appender-ref ref="FILE_ERROR"/>
+    </logger>
 
     <appender name="FILE_STATISTICS" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${LOG_PATH}${LOG_FILE_NAME_STATISTICS}</file>