From f21a96a4f28cd28161f9ec5814f492f839047c9b Mon Sep 17 00:00:00 2001 From: MonHun Date: Fri, 13 Oct 2023 18:00:17 +0900 Subject: [PATCH] win 10/13 --- application.pid | 2 +- cfg/udpsocket.xml | 19 +-- pom.xml | 21 ++++ .../asde/asterix/AsterixParserThread.java | 2 +- .../controller/AsdeServiceController.java | 114 +++++++++++++++--- .../asderecv/controller/MainController.java | 4 +- .../controller/RestReciveController.java | 30 +++-- .../dev/restdev/vo/AiMetaVideoStatusVO.java | 18 --- .../kr/gmtc/gw/dev/restdev/vo/CustomMap.java | 0 src/main/resources/application.yml | 47 -------- 10 files changed, 144 insertions(+), 113 deletions(-) create mode 100644 src/main/java/kr/gmtc/gw/dev/restdev/vo/CustomMap.java delete mode 100644 src/main/resources/application.yml diff --git a/application.pid b/application.pid index 36cb2f0..4a2088a 100644 --- a/application.pid +++ b/application.pid @@ -1 +1 @@ -23584 \ No newline at end of file +5052 \ No newline at end of file diff --git a/cfg/udpsocket.xml b/cfg/udpsocket.xml index ded1b7d..38b5212 100644 --- a/cfg/udpsocket.xml +++ b/cfg/udpsocket.xml @@ -1,28 +1,17 @@ - - - + - - + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index c13ac32..46e64fb 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,12 @@ org.springframework.boot spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-logging + + @@ -44,6 +50,13 @@ test + + org.projectlombok + lombok + 1.18.30 + provided + + ipworks.local @@ -53,6 +66,13 @@ ${basedir}/lib/ipworks/local/1.0.0/ipworks-local-1.0.0.jar + + + com.google.guava + guava + 31.1-jre + + org.yaml @@ -71,6 +91,7 @@ + EyeGW_AsdeRecv-0.0.1 org.springframework.boot diff --git a/src/main/java/kr/gmtc/gw/dev/asderecv/asde/asterix/AsterixParserThread.java b/src/main/java/kr/gmtc/gw/dev/asderecv/asde/asterix/AsterixParserThread.java index 3c4f65a..bc97904 100644 --- a/src/main/java/kr/gmtc/gw/dev/asderecv/asde/asterix/AsterixParserThread.java +++ b/src/main/java/kr/gmtc/gw/dev/asderecv/asde/asterix/AsterixParserThread.java @@ -92,7 +92,7 @@ public class AsterixParserThread { List> result = asterixParser.parse(data, sTime); // logger.info("[ASDE분석결과:"+LocalDateTime.now().format(dfPattern)+"] result = "+ result); - logger.info("[ASDE분석결과(service):"+LocalDateTime.now().format(dfPattern)+"] serviceMap = "+ Arrays.deepToString(serviceMap.toArray())); + //logger.info("[ASDE분석결과(service):"+LocalDateTime.now().format(dfPattern)+"] serviceMap = "+ Arrays.deepToString(serviceMap.toArray())); if(!serviceMap.isEmpty()) { diff --git a/src/main/java/kr/gmtc/gw/dev/asderecv/asde/controller/AsdeServiceController.java b/src/main/java/kr/gmtc/gw/dev/asderecv/asde/controller/AsdeServiceController.java index d90f37b..4b7217d 100644 --- a/src/main/java/kr/gmtc/gw/dev/asderecv/asde/controller/AsdeServiceController.java +++ b/src/main/java/kr/gmtc/gw/dev/asderecv/asde/controller/AsdeServiceController.java @@ -9,20 +9,24 @@ import kr.gmtc.gw.dev.asderecv.asde.rest.vo.AsdeServiceVO; import kr.gmtc.gw.dev.asderecv.asde.rest.vo.ServiceAsdeData; import kr.gmtc.gw.dev.asderecv.asde.rest.vo.ServiceHeader; import kr.gmtc.gw.dev.asderecv.config.ServiceConfig; +import kr.gmtc.gw.dev.asderecv.controller.MainController; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.stereotype.Component; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.util.concurrent.RateLimiter; @RestController -@Component("AsdeServiceController") public class AsdeServiceController{ // 프레임 워크 구성요소 // @@ -53,10 +57,61 @@ public class AsdeServiceController{ private Integer scvDatacount; private AsdeServiceVO asdeServiceVO; + + private static RateLimiter rateLimiter; + + protected Logger logger; + + protected ObjectMapper mapper; + + + public AsdeServiceController() { + + logger = LoggerFactory.getLogger(this.getClass()); + mapper = new ObjectMapper(); + + // 0.33.. 초에 한 번만 호출 가능 + rateLimiter = RateLimiter.create(3); + + } - @SuppressWarnings("deprecation") - @GetMapping(value = "/getASDE/{qid}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) - public String getASDE( @PathVariable Integer qid) { + @GetMapping(value = "/getASDE/{qid}") + public ResponseEntity getASDE( @PathVariable Integer qid) { + + int qidx = qid -1; + + String sRetJsonData = ""; + + if(!serviceRunnig) { + } + + // if (rateLimiter.tryAcquire()) { + + // sRetJsonData = makeServiceData(qidx, sendQueue.get(qidx)); + + // logger.debug("make json data END."); + // return ResponseEntity.ok(sRetJsonData); + // }else{ + // sRetJsonData = "처리중 요청함"; + // } + + sRetJsonData = makeServiceData(qidx, sendQueue.get(qidx)); + + // logger.debug("make json data END."); + return ResponseEntity.ok(sRetJsonData); + + // 호출할 수 없다면 429 리턴 + // return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS).build(); + + // return ResponseEntity.ok(sRetJsonData); + + } + + + private String makeServiceData(int queIdx, Queue procQue){ + + serviceRunnig = true; + String sendCode, sendMsg ; ServiceHeader jsonHeader = new ServiceHeader(); List jsonData = new ArrayList(); @@ -66,26 +121,26 @@ public class AsdeServiceController{ asdeServiceVO = new AsdeServiceVO(); - int idx = qid -1; - long qSize = sendQueue.get(idx).size(); - - if(qSize > 0) serviceRunnig = true ; + int qSize = procQue.size(); + + //if(qSize > 0) serviceRunnig = true ; if(qSize > scvDatacount) qSize = scvDatacount; - if(qid > scvQcount || qid <= 0) { + if(queIdx > scvQcount -1 || queIdx < 0) { sendCode = "Err-01"; sendMsg = "할당되지 않은 큐를 지정했습니다."; -// retList.add(sendMsg); + logger.error(sendMsg); }else { - if(sendQueue.get(idx).peek() == null) { + //if(procQue.peek() == null) { + if(procQue.size() <= 0) { sendCode = "200"; sendMsg = "전송할 데이터 없음."; -// retList.add(sendMsg); + // logger.error("procQue size" + " / " + procQue.size()); }else{ while (qSize > 0 ) { - jsonData.add(sendQueue.get(idx).poll()); + jsonData.add(procQue.poll()); qSize--; } } @@ -98,14 +153,27 @@ public class AsdeServiceController{ asdeServiceVO.setHeader(jsonHeader); if (sendCode.equals("200")) { + + //logger.debug("jsonData : " + jsonData.size() + " / " + jsonData); asdeServiceVO.setData(jsonData); + + if(jsonData.size() > 0){ + logger.debug("jsonData : " + jsonData.size()); + } + // asdeServiceVO.setData(jsonData); + // }else{ + // logger.debug("////////////////////////////////////////////////////////////////////////////////////////////////jsonData : " + jsonData.size()); + // asdeServiceVO.setData(new ArrayList<>()); + // //jsonData.add("jsonData : " + jsonData.size()); + // } + + + } - ObjectMapper mapper = new ObjectMapper(); - - String sTmp = ""; + String sRetJsonData = ""; try { - sTmp = mapper.writeValueAsString(asdeServiceVO); + sRetJsonData = mapper.writeValueAsString(asdeServiceVO); } catch (JsonProcessingException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -113,11 +181,17 @@ public class AsdeServiceController{ serviceRunnig = false ; - return sTmp; - + // if( !sendMsg.equals("")){ + // logger.debug("debug :" + sRetJsonData); + // } + + return sRetJsonData; + } + + } diff --git a/src/main/java/kr/gmtc/gw/dev/asderecv/controller/MainController.java b/src/main/java/kr/gmtc/gw/dev/asderecv/controller/MainController.java index 91db54c..ba446fc 100644 --- a/src/main/java/kr/gmtc/gw/dev/asderecv/controller/MainController.java +++ b/src/main/java/kr/gmtc/gw/dev/asderecv/controller/MainController.java @@ -27,7 +27,7 @@ import java.util.HashMap; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; -//@Component("controller") +@Component("controller") public class MainController implements ApplicationListener { @Value("${root}") @@ -159,6 +159,8 @@ public class MainController implements ApplicationListener { public void start() { isRunning = true; udpManager.initializeUDPFromXML(); + + serviceQClearThread.start(); udpManager.startClient(); recvQThread.start(); diff --git a/src/main/java/kr/gmtc/gw/dev/restdev/controller/RestReciveController.java b/src/main/java/kr/gmtc/gw/dev/restdev/controller/RestReciveController.java index a4e178e..742fbb0 100644 --- a/src/main/java/kr/gmtc/gw/dev/restdev/controller/RestReciveController.java +++ b/src/main/java/kr/gmtc/gw/dev/restdev/controller/RestReciveController.java @@ -24,7 +24,7 @@ import kr.gmtc.gw.dev.restdev.vo.AiMetaVideoStatusVO.AiMetaVideoStatusVO_Data; import kr.gmtc.gw.dev.restdev.vo.AiMetaVideoStatusVO.AiMetaVideoStatusVO_Sts; import kr.gmtc.gw.dev.restdev.vo.StandMasterVO; -@Component("restReciveController") +//@Component("restReciveController") public class RestReciveController { @@ -38,6 +38,8 @@ public class RestReciveController { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + private AiMetaVideoStatusVO_Sts aiVideo_Sts; + private AiMetaVideoStatusVO_Data aiVideo_Data; @Autowired private StandMasterService standService; @@ -51,6 +53,11 @@ public class RestReciveController { this.recvQ = new LinkedBlockingQueue(); this.mapStatus = new AiMetaVideoStatusVO(); + + // this.aiVideo_Sts = new AiMetaVideoStatusVO_Sts(); + // this.aiVideo_Data = new AiMetaVideoStatusVO_Data(); + + } @Scheduled(fixedRate = 1000) // 1초마다 실행 @@ -104,22 +111,25 @@ public class RestReciveController { String sStandNO = mappingStand(sCctvID); String sSts = recvDatas.get(idx).getStts_cls(); - AiMetaVideoStatusVO_Sts stsMap = mapStatus.getStsMap(sStandNO); - AiMetaVideoStatusVO_Data dataMap = mapStatus.getStsMap(sStandNO).getDataMap(sSts); + // AiMetaVideoStatusVO_Sts stsMap = mapStatus.getStsMap(sStandNO); - Map standStsMap = new HashMap(); + // AiMetaVideoStatusVO_Data dataMap = mapStatus.getStsMap(sStandNO).getDataMap(sSts); + + // Map standStsMap = new HashMap(); - Date now = new Date(); + // Date now = new Date(); - dataMap.setRecvTime( String.valueOf(sdf.format(now))); - dataMap.setStandNo(sStandNO); - dataMap.setSts(sSts); + // aiVideo_Data.setRecvTime( String.valueOf(sdf.format(now))); + // aiVideo_Data.setStandNo(sStandNO); + // aiVideo_Data.setSts(sSts); - standStsMap.put(sStandNO, stsMap); + // aiVideo_Sts.setMapStatusGroup(new HashMap().put(sSts, aiVideo_Data) ); - mapStatus.setMapStandNoGroup(standStsMap); + // aiVideo_Sts.put(sStandNO, aiVideo_Data); + + // mapStatus.setMapStandNoGroup(standStsMap); } diff --git a/src/main/java/kr/gmtc/gw/dev/restdev/vo/AiMetaVideoStatusVO.java b/src/main/java/kr/gmtc/gw/dev/restdev/vo/AiMetaVideoStatusVO.java index 9b08741..e5e06cf 100644 --- a/src/main/java/kr/gmtc/gw/dev/restdev/vo/AiMetaVideoStatusVO.java +++ b/src/main/java/kr/gmtc/gw/dev/restdev/vo/AiMetaVideoStatusVO.java @@ -12,30 +12,12 @@ public class AiMetaVideoStatusVO { private Map mapStandNoGroup; - public AiMetaVideoStatusVO(){ - mapStandNoGroup = new HashMap(); - } - - public AiMetaVideoStatusVO_Sts getStsMap(String sStandNo){ - - return mapStandNoGroup.get(sStandNo); - } - @Getter @Setter public static class AiMetaVideoStatusVO_Sts { private Map mapStatusGroup; - public AiMetaVideoStatusVO_Sts(String sSts, AiMetaVideoStatusVO_Data map){ - mapStatusGroup = new HashMap(); - } - - public AiMetaVideoStatusVO_Data getDataMap(String sSts){ - - return mapStatusGroup.get(sSts); - } - } @Getter diff --git a/src/main/java/kr/gmtc/gw/dev/restdev/vo/CustomMap.java b/src/main/java/kr/gmtc/gw/dev/restdev/vo/CustomMap.java new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml deleted file mode 100644 index 085216d..0000000 --- a/src/main/resources/application.yml +++ /dev/null @@ -1,47 +0,0 @@ -spring: - profiles: - active: default - group: - default: - - winTest - ---- -spring: - config: - activate: - on-profile: default - -server: - port: 18082 - -asde: - service: - queueCount: 3 - serviceCount: 3000 - clearQ: - maxCount: 10000 # 1만건 - diffTime: 10000 # 10 sec - clearTime: 300000 # milli-Sec, 5분 - filepath1: ${root}/sendTest/Asterix010.txt - filepath2: ${root}/sendTest/Asterix011.txt - ---- -spring: - config: - activate: - on-profile: real - -root: /home/gmt/app/EyeGW_AsdeRecv - ---- -spring: - config: - activate: - on-profile: winTest - -root: D:\Workspace\Odroid_repository\EyeGW_CompDev - -request: - url: - recvTest: http://localhost:18082/getVideoTest -