diff --git a/.gitignore b/.gitignore index 49fa5a1..de2e635 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,8 @@ out/ /db/ .DS_Store **/.DS_Store + +### logs ### +logs/ +logs/** + diff --git a/app/kac-app/build.gradle b/app/kac-app/build.gradle index a683513..923a823 100644 --- a/app/kac-app/build.gradle +++ b/app/kac-app/build.gradle @@ -48,6 +48,8 @@ dependencies { // implementation project(":data:com") // implementation project(":data:other") // implementation project(":data:pty") + + implementation 'org.springframework.boot:spring-boot-starter-actuator' } ext { diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java index 1bfba62..f5b184d 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/controller/InnerSocketController.java @@ -8,6 +8,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; +import java.util.Map; + @Slf4j @RequiredArgsConstructor @RestController @@ -29,7 +32,17 @@ public class InnerSocketController { @PostMapping("/receiver/drone") public ResponseEntity receiverDronData(@RequestBody DroneDto droneDto) { log.debug(">>>>> receiver <<<<<"); - innerSocketService.setDronData(droneDto); + innerSocketService.saveDronData(droneDto); + return ResponseEntity.ok().build(); + } + + // dron 정보 저장(전체) + @PostMapping("/receiver/drone/all") + public ResponseEntity receiverDronDataAll(@RequestBody Map> droneDtoAll) { + log.debug(">>>>> receiver all <<<<<"); + log.debug(">>>>> data : {}", droneDtoAll); + + innerSocketService.saveDronDataAll(droneDtoAll); return ResponseEntity.ok().build(); } diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java index f276099..3f74c7a 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/api/v1/inner/socket/service/InnerSocketService.java @@ -57,7 +57,7 @@ public class InnerSocketService { if (latestHistory != null) { long diffMinute = ChronoUnit.MINUTES.between(latestHistory.getSrvrRcvDt(), Instant.now()); -// log.info("DIFF MINUTE : {}", diffMinute); +// log.debug("DIFF MINUTE : {}", diffMinute); if ("01".equals(latestControl.getEndTypeCd()) || diffMinute > 5) { isControl = false; @@ -94,7 +94,7 @@ public class InnerSocketService { } // socket으로부터 받은 dron 정보 저장 - public void setDronData(DroneDto droneDto) { + public void saveDronData(DroneDto droneDto) { // 비행 이력 기본 생성 CtrCntrlBas ctrCntrlBas = ctrCntrlBasRepository.findById(droneDto.getControlId()).orElse(null); @@ -299,4 +299,10 @@ public class InnerSocketService { return distanceList.stream().mapToDouble(Double::doubleValue).sum(); } + + public void saveDronDataAll(Map> droneDtoAll) { + droneDtoAll.values().forEach(droneDtoList -> { + droneDtoList.forEach(this::saveDronData); + }); + } } diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java index 8cbd2eb..1cd5954 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/exception/ServerExceptionHandler.java @@ -119,7 +119,7 @@ public class ServerExceptionHandler { log.warn("", e); break; case ERROR: - log.trace("message: {}, params: {}, trace: ", message, paramArray, e); + log.error("message: {}, params: {}, trace: ", message, paramArray, e); log.error("", e); break; default: diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java index 6e44e87..7a3a0ac 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/security/AppSecurityConfig.java @@ -5,13 +5,9 @@ import kr.co.palnet.kac.config.security.exception.BaseAccessDeniedHandler; import kr.co.palnet.kac.config.security.exception.BaseAuthenticationEntryPoint; import kr.co.palnet.kac.config.security.service.BaseUserDetailsService; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.DependsOn; -import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.web.SecurityFilterChain; import java.util.ArrayList; @@ -26,9 +22,10 @@ public class AppSecurityConfig extends SecurityConfig { // 시큐리티 적용 안하는 URL 목록 private final String[] IGNORE_URL = { - "/test/**", "/v1/inner/socket/**", "/v1/com/code/**", + "/actuator/**", + "/test/**", }; // 권한(ROLE)별 URL diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java index 840c706..17cb994 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/core/web/BaseAcceptHeaderLocaleResolver.java @@ -2,7 +2,6 @@ package kr.co.palnet.kac.app.core.web; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.util.StringUtils; import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestErrorContoller.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestErrorContoller.java index 377db66..a27c343 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestErrorContoller.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestErrorContoller.java @@ -37,19 +37,19 @@ public class TestErrorContoller { @GetMapping("/encrypt/{plainText}") public String ecrypt(@PathVariable String plainText) { String encrypt = KisaEncryptUtil.CbcEncrypt.encrypt(plainText); - log.info("e : {}", encrypt); + log.debug("e : {}", encrypt); String decrypt = KisaEncryptUtil.CbcEncrypt.decrypt(encrypt); - log.info("d : {}", decrypt); + log.debug("d : {}", decrypt); String encrypt1 = EncryptUtil.encrypt(plainText); - log.info("e : {}", encrypt1); + log.debug("e : {}", encrypt1); String decrypt1 = EncryptUtil.decrypt(encrypt1); - log.info("d : {}", decrypt1); + log.debug("d : {}", decrypt1); return decrypt; } @GetMapping("/error/{caseNumber}") public String errorTest(@PathVariable("caseNumber") Integer caseNumber) throws Exception { - log.info("{}", caseNumber); + log.debug("{}", caseNumber); return switch (caseNumber) { case 1 -> throw new BaseException(BaseErrorCode.IO_ERROR); case 2 -> throw new Exception("test"); @@ -95,7 +95,7 @@ public class TestErrorContoller { log.error("{}", e.getMessage()); } - log.info("=========================================================================================="); + log.debug("=========================================================================================="); try { String df = errorMessageSourceAccessor.getMessage("TEST001"); map.put("df", df); @@ -126,6 +126,6 @@ public class TestErrorContoller { } catch (Exception e) { log.error("{}", e.getMessage()); } - log.info("{}", map); + log.debug("{}", map); } } diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestSessionContrller.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestSessionContrller.java index 94e04b2..eaa6db2 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestSessionContrller.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/ping/controller/TestSessionContrller.java @@ -15,17 +15,17 @@ public class TestSessionContrller { @GetMapping("/auth") public void test() { BaseUserDetails userInfo = SessionHelper.getUserInfo(); - log.info("userInfo ::: {}", userInfo); + log.debug("userInfo ::: {}", userInfo); Long userNo = SessionHelper.getCstmrSno(); - log.info("userNo ::: {}", userNo); + log.debug("userNo ::: {}", userNo); String userId = SessionHelper.getUserId(); - log.info("userId ::: {}", userId); + log.debug("userId ::: {}", userId); boolean isRole1 = SessionHelper.hasRole("USER"); - log.info("isRole1 ::: {}", isRole1); + log.debug("isRole1 ::: {}", isRole1); boolean isRole2 = SessionHelper.hasRole("ADMIN"); - log.info("isRole2 ::: {}", isRole2); + log.debug("isRole2 ::: {}", isRole2); boolean isRole3 = SessionHelper.hasRole("ADMINasdfasdf"); - log.info("isRole3 ::: {}", isRole3); + log.debug("isRole3 ::: {}", isRole3); } } diff --git a/app/kac-app/src/main/resources/application.yml b/app/kac-app/src/main/resources/application.yml index 2fad843..0492219 100644 --- a/app/kac-app/src/main/resources/application.yml +++ b/app/kac-app/src/main/resources/application.yml @@ -12,16 +12,68 @@ server.port: 8000 logging: level: kr.co.palnet: DEBUG - com.com.zaxxer.hikari: INFO + +management: + endpoints: + web: + exposure: + include: '*' + +--- + +spring: + config: + activate: + on-profile: local + +logging: + level: + kr.co.palnet: DEBUG jdbc: audit: OFF resultset: OFF resultsettable: INFO #SQL 결과 데이터 Table을 로그로 남긴다. sqlonly: OFF #SQL만 로그로 남긴다. - sqltiming: INFO #SQL과 소요시간을 표기한다. - connection : OFF # 커넥션 확인가능 + sqltiming: info #SQL과 소요시간을 표기한다. + connection : trace # 커넥션 확인가능 org.hibernate: - SQL: DEBUG + SQL: off type.descriptor.sql.BasicBinder: TRACE com.zaxxer.hikari.HikariConfig: DEBUG com.zaxxer.hikari: TRACE + file: + name: ./logs/kac-app/data.log + logback: + rollingpolicy: + clean-history-on-start: false + # file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz + file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log + max-file-size: 10MB + max-history: 60 + total-size-cap: 100MB + +--- + +spring: + config: + activate: + on-profile: docker + + +logging: + level: + kr.co.palnet: info + jdbc: off + org.hibernate: off +# jdbc: +# audit: OFF +# resultset: OFF +# resultsettable: INFO #SQL 결과 데이터 Table을 로그로 남긴다. +# sqlonly: OFF #SQL만 로그로 남긴다. +# sqltiming: info #SQL과 소요시간을 표기한다. +# connection : trace # 커넥션 확인가능 +# org.hibernate: +# SQL: off +# type.descriptor.sql.BasicBinder: TRACE +# com.zaxxer.hikari.HikariConfig: DEBUG +# com.zaxxer.hikari: TRACE \ No newline at end of file diff --git a/app/kac-app/src/main/resources/static/docs/index.html b/app/kac-app/src/main/resources/static/docs/index.html deleted file mode 100644 index ddab2f6..0000000 --- a/app/kac-app/src/main/resources/static/docs/index.html +++ /dev/null @@ -1,1967 +0,0 @@ - - - - - - - - -KAC App Docs - - - - - - -
-
-

Common-Code API

-
-
-

[Code 전체코드 조회]

-
-

[HTTP REQUEST INFO]

-
-
-
GET /v1/com/code/all?siteCd=KAC&langDivCd=ko_KR HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Host: localhost:8080
-
-
- ----- - - - - - - - - - - - - - - - - - - - -
파라미터설명필수

siteCd

사이트코드

true

langDivCd

언어코드

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 143
-
-[ {
-  "groupCd" : "NEW_GROUP_1707924397",
-  "siteCd" : "KAC",
-  "groupCdNm" : "신규그룹001",
-  "rm" : "비고....",
-  "codeList" : null
-} ]
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

[].groupCd

String

그룹 코드

false

[].siteCd

String

사이트 코드

false

[].groupCdNm

String

그룹 명

false

[].rm

String

비고

false

[].codeList

Array

그룹에 포함된 코드 리스트

false

[].codeList[].groupCd

String

코드의 그룹

false

[].codeList[].cdId

String

코드의 ID

false

[].codeList[].cdNm

String

코드의 이름

false

[].codeList[].upperCd

String

상위 코드의 이름

false

[].codeList[].sortOrdr

Number

코드의 정렬순서

false

[].codeList[].addInfoValue

String

코드의 추가 밸류

false

[].codeList[].children

String

코드의 하위요소

false

-
-
-
-
-

[Code 코드목록 조회]

-
-

[HTTP REQUEST INFO]

-
-
-
GET /v1/com/code/code?groupCd=NEW_GROUP_1707924397&langDivCd=ko_KR HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Host: localhost:8080
-
-
- ----- - - - - - - - - - - - - - - - - - - - -
파라미터설명필수

groupCd

그룹코드

true

langDivCd

언어코드

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 190
-
-[ {
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "cdNm" : "신규코드001",
-  "upperCd" : null,
-  "sortOrdr" : 0,
-  "addInfoValue" : "추가!!",
-  "children" : null
-} ]
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

[].groupCd

String

코드의 그룹

false

[].cdId

String

코드의 ID

false

[].cdNm

String

코드의 이름

false

[].upperCd

String

상위 코드의 이름

false

[].sortOrdr

Number

코드의 정렬순서

false

[].addInfoValue

String

코드의 추가 밸류

false

[].children

String

코드의 하위요소

false

-
-
-
-
-

[Code 그룹목록 조회]

-
-

[HTTP REQUEST INFO]

-
-
-
GET /v1/com/code/group HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Host: localhost:8080
-
-
-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 143
-
-[ {
-  "groupCd" : "NEW_GROUP_1707924397",
-  "siteCd" : "KAC",
-  "groupCdNm" : "신규그룹001",
-  "rm" : "비고....",
-  "codeList" : null
-} ]
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

[].groupCd

String

그룹 코드

false

[].siteCd

String

사이트 코드

false

[].groupCdNm

String

그룹 명

false

[].rm

String

비고

false

[].codeList

Array

그룹에 포함된 코드 리스트

false

-
-
-
-
-

[Code 그룹 등록]

-
-

[HTTP REQUEST INFO]

-
-
-
POST /v1/com/code/group HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Content-Length: 118
-Host: localhost:8080
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "siteCd" : "KAC",
-  "groupCdNm" : "신규그룹001",
-  "rm" : "비고...."
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

siteCd

String

사이트코드

true

groupCdNm

String

그룹이름

true

rm

String

비고

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 276
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "siteCd" : "KAC",
-  "groupCdNm" : "신규그룹001",
-  "rm" : "비고....",
-  "createUserId" : "CREATE_USER",
-  "createDt" : "2024-02-15T00:26:37.902778",
-  "updateUserId" : "CREATE_USER",
-  "updateDt" : "2024-02-15T00:26:37.902782"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

siteCd

String

사이트코드

true

groupCdNm

String

그룹이름

true

rm

String

비고

true

createUserId

String

등록한 유저 아이디

true

createDt

String

등록일시

true

updateUserId

String

수정한 유저 아이디

true

updateDt

String

수정일시

true

-
-
-
-
-

[Code 코드 등록]

-
-

[HTTP REQUEST INFO]

-
-
-
POST /v1/com/code/code HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Content-Length: 132
-Host: localhost:8080
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "sortOrdr" : 0,
-  "addInfoValue" : "추가!!",
-  "useYn" : "Y"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

sortOrdr

Number

정렬순서

true

addInfoValue

String

추가사항

true

useYn

String

사용여부

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 310
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "upperCd" : null,
-  "sortOrdr" : 0,
-  "addInfoValue" : "추가!!",
-  "useYn" : "Y",
-  "createUserId" : "CREATE_USER",
-  "createDt" : "2024-02-15T00:26:37.887931",
-  "updateUserId" : "CREATE_USER",
-  "updateDt" : "2024-02-15T00:26:37.887936"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

upperCd

String

상위 아이디

false

sortOrdr

Number

정렬순서

true

addInfoValue

String

추가사항

true

useYn

String

사용여부

true

createUserId

String

등록한 유저 아이디

true

createDt

String

등록일시

true

updateUserId

String

수정한 유저 아이디

true

updateDt

String

수정일시

true

-
-
-
-
-

[Code 코드언어 등록]

-
-

[HTTP REQUEST INFO]

-
-
-
POST /v1/com/code/lang HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Content-Length: 144
-Host: localhost:8080
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "langDivCd" : "ko_KR",
-  "cdNm" : "신규코드001",
-  "rm" : "비고...."
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

langDivCd

String

언어코드

true

cdNm

String

코드이름[언어별]

true

rm

String

비고

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 302
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "langDivCd" : "ko_KR",
-  "cdNm" : "신규코드001",
-  "rm" : "비고....",
-  "createUserId" : "CREATE_USER",
-  "createDt" : "2024-02-15T00:26:37.826757",
-  "updateUserId" : "CREATE_USER",
-  "updateDt" : "2024-02-15T00:26:37.826761"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

langDivCd

String

언어코드

true

cdNm

String

코드이름[언어별]

true

rm

String

비고

true

createUserId

String

등록한 유저 아이디

true

createDt

String

등록일시

true

updateUserId

String

수정한 유저 아이디

true

updateDt

String

수정일시

true

-
-
-
-
-

[Code 그룹 수정]

-
-

[HTTP REQUEST INFO]

-
-
-
PUT /v1/com/code/group HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Content-Length: 118
-Host: localhost:8080
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "siteCd" : "KAC",
-  "groupCdNm" : "신규그룹001",
-  "rm" : "비고...."
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

siteCd

String

사이트코드

true

groupCdNm

String

그룹이름

true

rm

String

비고

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 275
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "siteCd" : "KAC",
-  "groupCdNm" : "신규그룹001",
-  "rm" : "비고....",
-  "createUserId" : "CREATE_USER",
-  "createDt" : "2024-02-15T00:26:37.84228",
-  "updateUserId" : "UPDATE_USER",
-  "updateDt" : "2024-02-15T00:26:37.844978"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

siteCd

String

사이트코드

true

groupCdNm

String

그룹이름

true

rm

String

비고

true

createUserId

String

등록한 유저 아이디

true

createDt

String

등록일시

true

updateUserId

String

수정한 유저 아이디

true

updateDt

String

수정일시

true

-
-
-
-
-

[Code 코드 수정]

-
-

[HTTP REQUEST INFO]

-
-
-
PUT /v1/com/code/code HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Content-Length: 132
-Host: localhost:8080
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "sortOrdr" : 0,
-  "addInfoValue" : "수정!!",
-  "useYn" : "Y"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

sortOrdr

Number

정렬순서

true

addInfoValue

String

추가사항

true

useYn

String

사용여부

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 310
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "upperCd" : null,
-  "sortOrdr" : 0,
-  "addInfoValue" : "수정!!",
-  "useYn" : "Y",
-  "createUserId" : "CREATE_USER",
-  "createDt" : "2024-02-15T00:26:37.757743",
-  "updateUserId" : "UPDATE_USER",
-  "updateDt" : "2024-02-15T00:26:37.770459"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

upperCd

String

상위 아이디

false

sortOrdr

Number

정렬순서

true

addInfoValue

String

추가사항

true

useYn

String

사용여부

true

createUserId

String

등록한 유저 아이디

true

createDt

String

등록일시

true

updateUserId

String

수정한 유저 아이디

true

updateDt

String

수정일시

true

-
-
-
-
-

[Code 코드언어 수정]

-
-

[HTTP REQUEST INFO]

-
-
-
PUT /v1/com/code/lang HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Content-Length: 143
-Host: localhost:8080
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "langDivCd" : "ko_KR",
-  "cdNm" : "신규코드001",
-  "rm" : "수정..."
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

langDivCd

String

언어코드

true

cdNm

String

코드이름[언어별]

true

rm

String

비고

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-Content-Type: application/json;charset=UTF-8
-Content-Length: 301
-
-{
-  "groupCd" : "NEW_GROUP_1707924397",
-  "cdId" : "NEW_CODE001",
-  "langDivCd" : "ko_KR",
-  "cdNm" : "신규코드001",
-  "rm" : "수정...",
-  "createUserId" : "CREATE_USER",
-  "createDt" : "2024-02-15T00:26:37.798977",
-  "updateUserId" : "UPDATE_USER",
-  "updateDt" : "2024-02-15T00:26:37.803818"
-}
-
-
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터타입설명필수

groupCd

String

그룹코드

true

cdId

String

코드 아이디

true

langDivCd

String

언어코드

true

cdNm

String

코드이름[언어별]

true

rm

String

비고

true

createUserId

String

등록한 유저 아이디

true

createDt

String

등록일시

true

updateUserId

String

수정한 유저 아이디

true

updateDt

String

수정일시

true

-
-
-
-
-

[Code 그룹 삭제]

-
-

[HTTP REQUEST INFO]

-
-
-
DELETE /v1/com/code/group?groupCd=NEW_GROUP001 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Host: localhost:8080
-
-
- ----- - - - - - - - - - - - - - - -
파라미터설명필수

groupCd

그룹 아이디

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-
-
-
-
-
-
-

[Code 코드 삭제]

-
-

[HTTP REQUEST INFO]

-
-
-
DELETE /v1/com/code/code?groupCd=NEW_GROUP001&cdId=NEW_CODE001 HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Host: localhost:8080
-
-
- ----- - - - - - - - - - - - - - - - - - - - -
파라미터설명필수

groupCd

그룹 아이디

true

cdId

코드 아이디

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-
-
-
-
-
-
-

[Code 언어 삭제]

-
-

[HTTP REQUEST INFO]

-
-
-
DELETE /v1/com/code/lang?groupCd=NEW_GROUP001&cdId=NEW_CODE001&langDivCd=ko_KR HTTP/1.1
-Content-Type: application/json;charset=UTF-8
-Accept: application/json
-Host: localhost:8080
-
-
- ----- - - - - - - - - - - - - - - - - - - - - - - - - -
파라미터설명필수

groupCd

그룹 아이디

true

cdId

코드 아이디

true

langDivCd

삭제할 언어코드

true

-
-
-

[HTTP RESPONSE INFO]

-
-
-
HTTP/1.1 200 OK
-
-
-
-
-
-
-
-
- - - - - - \ No newline at end of file diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDroneCommandImpl.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDroneCommandImpl.java index 7f6347a..d185671 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDroneCommandImpl.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDroneCommandImpl.java @@ -1,12 +1,12 @@ package kr.co.palnet.kac.socket.core.command.impl; -import kr.co.palnet.kac.common.model.common.ControlDto; import kr.co.palnet.kac.common.model.common.DroneDto; import kr.co.palnet.kac.common.model.common.DroneHistoryDto; import kr.co.palnet.kac.common.model.common.SimpleControlDto; import kr.co.palnet.kac.socket.core.command.DroneCommand; import kr.co.palnet.kac.socket.core.model.DroneRq; -import kr.co.palnet.kac.socket.core.storage.ControlStorage; +import kr.co.palnet.kac.socket.core.storage.DroneCacheStorage; +import kr.co.palnet.kac.socket.core.storage.DroneStorage; import kr.co.palnet.kac.socket.service.KacAppService; import kr.co.palnet.kac.socket.service.WebSocketService; import kr.co.palnet.kac.util.DroneUtil; @@ -38,7 +38,7 @@ public class AdsbDroneCommandImpl implements DroneCommand { @Override public void command(DroneRq rq) { - log.info(">>>> AdsbCommandServiceImpl <<<<<"); + log.debug(">>>> AdsbCommandServiceImpl <<<<<"); List resultList = rq.getBody(); /** 전문 설정 ***/ @@ -78,10 +78,10 @@ public class AdsbDroneCommandImpl implements DroneCommand { // STEP 1. 전에 내부 메모리에서 controlId 조회 - ControlStorage controlStorage = ControlStorage.getInstance(); - ControlDto droneCacheDTO = controlStorage.get(drone.getObjectId()); + DroneCacheStorage droneCacheStorage = DroneCacheStorage.getInstance(); + DroneDto droneCacheDto = droneCacheStorage.get(drone.getObjectId()); - if (droneCacheDTO == null) { + if (droneCacheDto == null) { // STEP 1. Control ID 발급 -> Application Server Http 통신 try { SimpleControlDto simpleControlDto = kacAppService.getControlId(drone.getObjectId()); @@ -91,33 +91,35 @@ public class AdsbDroneCommandImpl implements DroneCommand { drone.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); drone.setControlStartDt(Instant.now()); - ControlDto controlDto = new ControlDto(); - controlDto.setControlId(simpleControlDto.getControlId()); - controlDto.setTypeCd(simpleControlDto.getTypeCd()); - controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); - controlDto.setRegTime(System.currentTimeMillis()); +// ControlDto controlDto = new ControlDto(); +// controlDto.setControlId(simpleControlDto.getControlId()); +// controlDto.setTypeCd(simpleControlDto.getTypeCd()); +// controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); +// controlDto.setRegTime(System.currentTimeMillis()); + + drone.setRegDt(Instant.now()); } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } } else { - drone.setControlId(droneCacheDTO.getControlId()); + drone.setControlId(droneCacheDto.getControlId()); drone.setTypeCd("02"); - drone.setAreaTrnsYn(droneCacheDTO.getAreaTrnsYn()); - drone.setControlWarnCd(droneCacheDTO.isControlWarnCd()); - droneCacheDTO.setRegTime(System.currentTimeMillis()); + drone.setAreaTrnsYn(droneCacheDto.getAreaTrnsYn()); + drone.setControlWarnCd(droneCacheDto.isControlWarnCd()); + drone.setControlStartDt(droneCacheDto.getControlStartDt()); + +// droneCacheDTO.setRegTime(System.currentTimeMillis()); + drone.setRegDt(Instant.now()); - controlStorage.put(drone.getObjectId(), droneCacheDTO); + droneCacheStorage.put(drone.getObjectId(), drone); } // STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리 try { - /* - // 저장 해 놓았다가 한거번에 전송 - DronStorage dronStorage = DronStorage.getInstance(); - dronStorage.add(dron); - */ - kacAppService.sendData(drone); + // 저장 해 놓았다가 한거번에 전송 - 필요한 곳에 전송(HISTORY, UTM) + DroneStorage dronStorage = DroneStorage.getInstance(); + dronStorage.add(drone); } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDroneCommandImpl.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDroneCommandImpl.java index a604014..3515f07 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDroneCommandImpl.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDroneCommandImpl.java @@ -1,12 +1,12 @@ package kr.co.palnet.kac.socket.core.command.impl; -import kr.co.palnet.kac.common.model.common.ControlDto; import kr.co.palnet.kac.common.model.common.DroneDto; import kr.co.palnet.kac.common.model.common.DroneHistoryDto; import kr.co.palnet.kac.common.model.common.SimpleControlDto; import kr.co.palnet.kac.socket.core.command.DroneCommand; import kr.co.palnet.kac.socket.core.model.DroneRq; -import kr.co.palnet.kac.socket.core.storage.ControlStorage; +import kr.co.palnet.kac.socket.core.storage.DroneCacheStorage; +import kr.co.palnet.kac.socket.core.storage.DroneStorage; import kr.co.palnet.kac.socket.service.KacAppService; import kr.co.palnet.kac.socket.service.WebSocketService; import kr.co.palnet.kac.util.DroneUtil; @@ -37,7 +37,7 @@ public class AntosDroneCommandImpl implements DroneCommand { @Override public void command(DroneRq rq) { - log.info(">>>> AntosCommandServiceImpl <<<<<"); + log.debug(">>>> AntosCommandServiceImpl <<<<<"); List resultList = rq.getBody(); /** 전문 설정 ***/ @@ -77,10 +77,11 @@ public class AntosDroneCommandImpl implements DroneCommand { // STEP 1. 전에 내부 메모리에서 controlId 조회 - ControlStorage controlStorage = ControlStorage.getInstance(); - ControlDto dronCacheDTO = controlStorage.get(drone.getObjectId()); + DroneCacheStorage droneCacheStorage = DroneCacheStorage.getInstance(); +// ControlDto dronCacheDTO = controlStorage.get(drone.getObjectId()); + DroneDto dronCacheDto = droneCacheStorage.get(drone.getObjectId()); - if (dronCacheDTO == null) { + if (dronCacheDto == null) { // STEP 1. Control ID 발급 -> Application Server Http 통신 try { SimpleControlDto simpleControlDto = kacAppService.getControlId(drone.getObjectId()); @@ -90,35 +91,36 @@ public class AntosDroneCommandImpl implements DroneCommand { drone.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); drone.setControlStartDt(Instant.now()); - ControlDto controlDto = new ControlDto(); - controlDto.setControlId(simpleControlDto.getControlId()); - controlDto.setTypeCd(simpleControlDto.getTypeCd()); - controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); - controlDto.setRegTime(System.currentTimeMillis()); +// ControlDto controlDto = new ControlDto(); +// controlDto.setControlId(simpleControlDto.getControlId()); +// controlDto.setTypeCd(simpleControlDto.getTypeCd()); +// controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); +// controlDto.setRegTime(System.currentTimeMillis()); - controlStorage.put(drone.getObjectId(), controlDto); +// controlStorage.put(drone.getObjectId(), controlDto); +// controlStorage.put(drone.getObjectId(), controlDto); + drone.setRegDt(Instant.now()); } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } } else { - drone.setControlId(dronCacheDTO.getControlId()); + drone.setControlId(dronCacheDto.getControlId()); drone.setTypeCd("02"); - drone.setAreaTrnsYn(dronCacheDTO.getAreaTrnsYn()); - drone.setControlWarnCd(dronCacheDTO.isControlWarnCd()); - dronCacheDTO.setRegTime(System.currentTimeMillis()); + drone.setAreaTrnsYn(dronCacheDto.getAreaTrnsYn()); + drone.setControlWarnCd(dronCacheDto.isControlWarnCd()); + drone.setControlStartDt(dronCacheDto.getControlStartDt()); - controlStorage.put(drone.getObjectId(), dronCacheDTO); + drone.setRegDt(Instant.now()); + + droneCacheStorage.put(drone.getObjectId(), drone); } // STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리 try { - /* - // 저장 해 놓았다가 한거번에 전송 - DronStorage dronStorage = DronStorage.getInstance(); - dronStorage.add(dron); - */ - kacAppService.sendData(drone); + // 저장 해 놓았다가 한거번에 전송 - 필요한 곳에 전송(HISTORY, UTM) + DroneStorage dronStorage = DroneStorage.getInstance(); + dronStorage.add(drone); } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } @@ -127,7 +129,8 @@ public class AntosDroneCommandImpl implements DroneCommand { // STEP 3. 화면에 표출할 정보 WebSocket 전달 try { if ("PA".equals(drone.getObjectId().substring(0, 2))) { - webSocketService.sendData(drone); +// webSocketService.sendData(drone); + webSocketService.asyncSendData(drone); } } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java index 1eb2706..061eaf0 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDroneCommandImpl.java @@ -1,12 +1,12 @@ package kr.co.palnet.kac.socket.core.command.impl; -import kr.co.palnet.kac.common.model.common.ControlDto; import kr.co.palnet.kac.common.model.common.DroneDto; import kr.co.palnet.kac.common.model.common.DroneHistoryDto; import kr.co.palnet.kac.common.model.common.SimpleControlDto; import kr.co.palnet.kac.socket.core.command.DroneCommand; import kr.co.palnet.kac.socket.core.model.DroneRq; -import kr.co.palnet.kac.socket.core.storage.ControlStorage; +import kr.co.palnet.kac.socket.core.storage.DroneCacheStorage; +import kr.co.palnet.kac.socket.core.storage.DroneStorage; import kr.co.palnet.kac.socket.service.KacAppService; import kr.co.palnet.kac.socket.service.WebSocketService; import kr.co.palnet.kac.util.DroneUtil; @@ -37,7 +37,7 @@ public class SandboxDroneCommandImpl implements DroneCommand { @Override public void command(DroneRq rq) { - log.info(">>>> SandboxCommandServiceImpl <<<<<"); + log.debug(">>>> SandboxCommandServiceImpl <<<<<"); log.debug("time 011 : {}::{}", Instant.now(), Instant.now().toEpochMilli()); List resultList = rq.getBody(); /** 전문 설정 ***/ @@ -77,10 +77,10 @@ public class SandboxDroneCommandImpl implements DroneCommand { Long start = System.currentTimeMillis(); // STEP 1. 전에 내부 메모리에서 controlId 조회 - ControlStorage controlStorage = ControlStorage.getInstance(); - ControlDto dronCacheDTO = controlStorage.get(drone.getObjectId()); + DroneCacheStorage droneCacheStorage = DroneCacheStorage.getInstance(); + DroneDto droneCacheDto = droneCacheStorage.get(drone.getObjectId()); - if (dronCacheDTO == null) { + if (droneCacheDto == null) { // STEP 1. Control ID 발급 -> Application Server Http 통신 try { log.debug("time 012 : {}::{}", Instant.now(), Instant.now().toEpochMilli()); @@ -93,38 +93,44 @@ public class SandboxDroneCommandImpl implements DroneCommand { drone.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); drone.setControlStartDt(Instant.now()); - ControlDto controlDto = new ControlDto(); - controlDto.setControlId(simpleControlDto.getControlId()); - controlDto.setTypeCd(simpleControlDto.getTypeCd()); - controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); - controlDto.setRegTime(System.currentTimeMillis()); +// DroneDto newDroneCacheDto = new DroneDto(); +// newDroneCacheDto.setControlId(simpleControlDto.getControlId()); +// newDroneCacheDto.setTypeCd(simpleControlDto.getTypeCd()); +// newDroneCacheDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn()); +// newDroneCacheDto.setRegDt(Instant.now()); - controlStorage.put(drone.getObjectId(), controlDto); +// controlStorage.put(drone.getObjectId(), newDroneCacheDto); + droneCacheStorage.put(drone.getObjectId(), drone); } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } } else { - drone.setControlId(dronCacheDTO.getControlId()); + drone.setControlId(droneCacheDto.getControlId()); drone.setTypeCd("02"); - drone.setAreaTrnsYn(dronCacheDTO.getAreaTrnsYn()); - drone.setControlWarnCd(dronCacheDTO.isControlWarnCd()); - dronCacheDTO.setRegTime(System.currentTimeMillis()); + drone.setAreaTrnsYn(droneCacheDto.getAreaTrnsYn()); + drone.setControlWarnCd(droneCacheDto.isControlWarnCd()); + drone.setControlStartDt(droneCacheDto.getControlStartDt()); +// droneCacheDto.setRegTime(System.currentTimeMillis()); +// controlStorage.put(drone.getObjectId(), droneCacheDto); - controlStorage.put(drone.getObjectId(), dronCacheDTO); + drone.setRegDt(Instant.now()); + + droneCacheStorage.put(drone.getObjectId(), drone); } // STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리 try { - /* - // 저장 해 놓았다가 한거번에 전송 - DronStorage dronStorage = DronStorage.getInstance(); - dronStorage.add(dron); - */ + // kacAppService.sendData(drone); - kacAppService.asyncSendData(drone); +// kacAppService.asyncSendData(drone); + + // 저장 해 놓았다가 한거번에 전송 - 필요한 곳에 전송(HISTORY, UTM) + DroneStorage dronStorage = DroneStorage.getInstance(); + dronStorage.add(drone); + } catch (Exception e) { log.error("ERROR : {}", e.getMessage(), e); } @@ -138,7 +144,7 @@ public class SandboxDroneCommandImpl implements DroneCommand { } Long end = System.currentTimeMillis(); - log.info(">>> during time : {} - {}", drone.getObjectId(), end - start); + log.debug(">>> during time : {} - {}", drone.getObjectId(), end - start); } else { log.error("좌표 정보가 존재하지 않습니다."); diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AppReadyEvent.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AppReadyEvent.java index a0f10a2..4204565 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AppReadyEvent.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AppReadyEvent.java @@ -16,7 +16,7 @@ public class AppReadyEvent implements ApplicationListener @Override public void onApplicationEvent(ApplicationReadyEvent event) { - log.info(">>>> onApplicationEvent <<<<<"); + log.debug(">>>> onApplicationEvent <<<<<"); socketServer.start(); } } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/NettyConfig.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/NettyConfig.java index aca8c05..1eee3c8 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/NettyConfig.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/NettyConfig.java @@ -32,7 +32,7 @@ public class NettyConfig { @Bean public ServerBootstrap serverBootstrap(ChannelInitializer channelInitializer) { - log.info(">>>>> serverBootstrap <<<<<"); + log.debug(">>>>> serverBootstrap <<<<<"); // ServerBootstrap: 서버 설정을 도와주는 class ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup(), workerGroup()) @@ -59,14 +59,14 @@ public class NettyConfig { // boss: incoming connection을 수락하고, 수락한 connection을 worker에게 등록(register) @Bean(destroyMethod = "shutdownGracefully") public NioEventLoopGroup bossGroup() { - log.info(">>>>> bossGroup <<<<<"); + log.debug(">>>>> bossGroup <<<<<"); return new NioEventLoopGroup(bossCount); } // worker: boss가 수락한 연결의 트래픽 관리 @Bean(destroyMethod = "shutdownGracefully") public NioEventLoopGroup workerGroup() { - log.info(">>>>> workerGroup <<<<<"); + log.debug(">>>>> workerGroup <<<<<"); return new NioEventLoopGroup(); } @@ -74,7 +74,7 @@ public class NettyConfig { // 도메인 이름으로 객체 생성 가능 @Bean public InetSocketAddress inetSocketAddress() { - log.info(">>>>> inetSocketAddress <<<<<"); + log.debug(">>>>> inetSocketAddress <<<<<"); return new InetSocketAddress(port); } } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DroneHandler.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DroneHandler.java index 4fbc7bc..2001410 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DroneHandler.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/handler/DroneHandler.java @@ -100,7 +100,7 @@ public class DroneHandler extends SimpleChannelInboundHandler { // 에러 처리 @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - log.info(">>>> exceptionCaught <<<<<"); + log.debug(">>>> exceptionCaught <<<<<"); DroneRs rs = DroneRs.builder() .code("-9999") .message("error - etc") diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/UtmDto.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/UtmDto.java index b892938..eb883a7 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/UtmDto.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/model/UtmDto.java @@ -16,13 +16,13 @@ public class UtmDto { @JsonProperty("GPSime") private String GPSime; // 시간 yyyyMMddHHmmss @JsonProperty("droneInfo") - private List dronInfo; + private List droneInfo; @Data @NoArgsConstructor @AllArgsConstructor @Builder - public static class DronInfo { + public static class DroneInfo { @JsonProperty("Id") private String id; @JsonProperty("Latitude") diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/ChannelInitializer.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/ChannelInitializer.java index cf18396..d665d2e 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/ChannelInitializer.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/ChannelInitializer.java @@ -23,7 +23,7 @@ public class ChannelInitializer extends io.netty.channel.ChannelInitializer>>>> initChannel <<<<<"); + log.debug(">>>>> initChannel <<<<<"); ChannelPipeline pipeline = ch.pipeline(); // 뒤이어 처리할 디코더 및 핸들러 추가 diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/SocketServer.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/SocketServer.java index 1439157..bf3b449 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/SocketServer.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/SocketServer.java @@ -19,7 +19,7 @@ public class SocketServer { private Channel serverChannel; public void start() { - log.info(">>>>> start <<<<<"); + log.debug(">>>>> start <<<<<"); try { // ChannelFuture: I/O operation의 결과나 상태를 제공하는 객체 // 지정한 host, port로 소켓을 바인딩하고 incoming connections을 받도록 준비함 @@ -36,7 +36,7 @@ public class SocketServer { // Bean을 제거하기 전에 해야할 작업이 있을 때 설정 @PreDestroy public void stop() { - log.info(">>>>> stop <<<<<"); + log.debug(">>>>> stop <<<<<"); if (serverChannel != null) { serverChannel.close(); serverChannel.parent().closeFuture(); diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/ControlStorage.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DroneCacheStorage.java similarity index 56% rename from app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/ControlStorage.java rename to app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DroneCacheStorage.java index d6a3adb..ef350d7 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/ControlStorage.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DroneCacheStorage.java @@ -1,40 +1,41 @@ package kr.co.palnet.kac.socket.core.storage; -import kr.co.palnet.kac.common.model.common.ControlDto; +import kr.co.palnet.kac.common.model.common.DroneDto; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; +import java.time.Instant; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @Slf4j -public class ControlStorage { +public class DroneCacheStorage { - private final Map controlMap; + private final Map controlMap; private final int REMOVE_TIME = 1000 * 10; - private ControlStorage() { + private DroneCacheStorage() { controlMap = new ConcurrentHashMap<>(); } - public static ControlStorage getInstance() { + public static DroneCacheStorage getInstance() { return LazyHolder.INSTANCE; } public static class LazyHolder { - private static final ControlStorage INSTANCE = new ControlStorage(); + private static final DroneCacheStorage INSTANCE = new DroneCacheStorage(); } - public ControlDto get(String objectId) { + public DroneDto get(String objectId) { return controlMap.get(objectId); } - public ControlDto put(String objectId, ControlDto control) { + public DroneDto put(String objectId, DroneDto control) { return controlMap.put(objectId, control); } - public ControlDto remove(String objectId) { + public DroneDto remove(String objectId) { return controlMap.remove(objectId); } @@ -42,8 +43,8 @@ public class ControlStorage { @Scheduled(fixedDelay = 1000 * 10) public void remove() { for (String key : controlMap.keySet()) { - ControlDto droneCacheDTO = controlMap.get(key); - long diff = System.currentTimeMillis() - droneCacheDTO.getRegTime(); + DroneDto droneCacheDTO = controlMap.get(key); + long diff = Instant.now().toEpochMilli() - droneCacheDTO.getRegDt().toEpochMilli(); if(diff > REMOVE_TIME){ remove(key); } diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DroneStorage.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DroneStorage.java index fdda9d8..14d0930 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DroneStorage.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/storage/DroneStorage.java @@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j; import java.time.Instant; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -89,33 +90,32 @@ public class DroneStorage { public List getAllByUtm() { // 보내지 않은 모든 데이터 추출 return droneMap.values().stream().reduce((list, result) -> { - result.addAll(list); + List yetSendData = list.stream().filter(droneDto -> !droneDto.isSendUtm()).toList(); + result.addAll(yetSendData); return result; - }).orElse(new ArrayList<>()).stream().filter(dronDto -> !dronDto.isSendUtm()).toList(); + }).orElse(new ArrayList<>()); } - public List getAllByHistory() { - // 보내지 않은 모든 데이터 추출 - return droneMap.values().stream().reduce((list, result) -> { - result.addAll(list); - return result; - }).orElse(new ArrayList<>()).stream().filter(dronDto -> !dronDto.isSendHistroy()).toList(); - } - - public static void main(String[] args) { - DroneStorage dronStorage = DroneStorage.getInstance(); - - DroneDto dronDto = new DroneDto(); - dronDto.setObjectId("test"); - dronDto.setSendHistroy(false); - dronDto.setSendUtm(false); - dronDto.setRegDt(Instant.now()); +// public List getAllByHistory() { +// // 보내지 않은 모든 데이터 추출 +// return droneMap.values().stream().reduce((list, result) -> { +// List yetSendData = list.stream().filter(droneDto -> !droneDto.isSendHistroy()).toList(); +// result.addAll(yetSendData); +// return result; +// }).orElse(new ArrayList<>()); +// } - dronStorage.add(dronDto); - - List allByUtm = dronStorage.getAllByUtm(); - allByUtm.forEach(c -> c.setSendUtm(true)); - log.info("..."); + public Map> getAllByHistory() { + // 보내지 않은 모든 데이터 추출 + Map> sendList = new HashMap<>(); + for (String objectId : droneMap.keySet()) { + List droneDtoList = droneMap.get(objectId); + List list = droneDtoList.stream().filter(droneDto -> !droneDto.isSendHistroy()).toList(); + if (list != null && !list.isEmpty()) { + sendList.put(objectId, list); + } + } + return sendList; } } \ No newline at end of file diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ExternalService.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ExternalService.java index 76336dc..d299a9b 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ExternalService.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ExternalService.java @@ -7,7 +7,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java index 88c3f83..dc51011 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java @@ -6,6 +6,8 @@ import kr.co.palnet.kac.util.ObjectMapperUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; @@ -13,6 +15,9 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; +import java.util.List; +import java.util.Map; + @Slf4j @RequiredArgsConstructor @Service @@ -21,7 +26,8 @@ public class KacAppService { private String kacAppHost; private final String GET_CONTROL_ID = "/v1/inner/socket/control"; - private final String SEND_ALL = "/v1/inner/socket/receiver/drone"; + private final String SEND_HISTORY = "/v1/inner/socket/receiver/drone"; + private final String SEND_HISTORY_ALL = "/v1/inner/socket/receiver/drone/all"; // control id 가져오기 public SimpleControlDto getControlId(String objectId) { @@ -39,7 +45,7 @@ public class KacAppService { public void sendData(DroneDto dto) { RestClient client = getRestClient(); client.post() - .uri(SEND_ALL) + .uri(SEND_HISTORY) .contentType(MediaType.APPLICATION_JSON) .body(dto) .retrieve() @@ -52,6 +58,20 @@ public class KacAppService { sendData(dto); } + public boolean sendDataAll(Map> history){ + RestClient client = getRestClient(); + ResponseEntity resp = client.post() + .uri(SEND_HISTORY_ALL) + .contentType(MediaType.APPLICATION_JSON) + .body(history) + .retrieve() + .toBodilessEntity(); + if(resp.getStatusCode() == HttpStatus.OK){ + return true; + } + return false; + } + private RestClient getRestClient() { return RestClient.builder() .baseUrl(kacAppHost) diff --git a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ScheduledService.java b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ScheduledService.java index d92b4d8..118eaf3 100644 --- a/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ScheduledService.java +++ b/app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/ScheduledService.java @@ -11,7 +11,9 @@ import org.springframework.stereotype.Service; import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Slf4j @@ -20,25 +22,40 @@ import java.util.stream.Collectors; public class ScheduledService { private final ExternalService externalService; + private final KacAppService kacAppService; - @Scheduled(fixedDelay = 1000 * 2) + @Scheduled(fixedDelay = 2 * 1000) + public void sendDataByHistory() { + DroneStorage droneStorage = DroneStorage.getInstance(); + Map> history = droneStorage.getAllByHistory(); + + if (!history.isEmpty()) { + if (kacAppService.sendDataAll(history)) { + history.values().forEach(droneDtoList -> droneDtoList.forEach(droneDto -> droneDto.setSendHistroy(true))); + } + } + + } + + // utm에 전송 + @Scheduled(fixedDelay = 2 * 1000) public void sendDataToUtm() { - log.info(">>>> sendDataToUtm <<<<<"); - DroneStorage dronStorage = DroneStorage.getInstance(); - List list = dronStorage.getAllByUtm(); +// log.debug(">>>> sendDataToUtm <<<<<"); + DroneStorage droneStorage = DroneStorage.getInstance(); + List list = droneStorage.getAllByUtm(); // 가공 - List dronInfoList = list.stream().map(model -> { - UtmDto.DronInfo dronInfo = UtmDto.DronInfo.builder() + List droneInfoList = list.stream().map(model -> { + UtmDto.DroneInfo droneInfo = UtmDto.DroneInfo.builder() .id(model.getObjectId()) .latitude(model.getLat().toString()) .longitude(model.getLon().toString()) .height(model.getElev().toString()) .build(); - return dronInfo; + return droneInfo; }).collect(Collectors.toList()); - if (dronInfoList.isEmpty()) return; + if (droneInfoList.isEmpty()) return; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss") .withZone(ZoneId.of("Asia/Seoul")); @@ -46,7 +63,7 @@ public class ScheduledService { UtmDto utmDto = UtmDto.builder() .GPSime(dateStr) - .dronInfo(dronInfoList) + .droneInfo(droneInfoList) .build(); // if (externalService.sendDataToUtm(utmDto)) { @@ -58,10 +75,28 @@ public class ScheduledService { } + // 사용을 다한 데이터 제거 @Scheduled(fixedDelay = 1000 * 30) - public void removeDron() { - log.info(">>>> removeDron <<<<<"); - DroneStorage dronStorage = DroneStorage.getInstance(); - dronStorage.removeByCondition(); + public void removeDrone() { + log.debug(">>>> removeDrone <<<<<"); + DroneStorage droneStorage = DroneStorage.getInstance(); + Map> all = droneStorage.getAll(); + if (all != null) { + log.debug(">>>> remove drone before size : {}::{}", all.keySet().size(), all.values().stream().reduce((list, result) -> { + result.addAll(list); + return result; + }).orElse(new ArrayList<>()).size()); + } + + droneStorage.removeByCondition(); + + if (all != null) { + log.debug(">>>> remove drone before size : {}::{}", all.keySet().size(), all.values().stream().reduce((list, result) -> { + result.addAll(list); + return result; + }).orElse(new ArrayList<>()).size()); + } } + + } diff --git a/app/kac-socket-app/src/main/resources/application.yml b/app/kac-socket-app/src/main/resources/application.yml index 44c61d9..5f8b307 100644 --- a/app/kac-socket-app/src/main/resources/application.yml +++ b/app/kac-socket-app/src/main/resources/application.yml @@ -63,6 +63,9 @@ app: server: port: 8004 +logging: + level: + kr.co.palnet: info diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java index 2f04909..6663d24 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/controller/SocketReceiverController.java @@ -23,7 +23,7 @@ public class SocketReceiverController { @PostMapping("/drone") public ResponseEntity receiver(@RequestBody DroneDto droneDto) { - log.info("websocket message receiver : {}", droneDto); + log.debug("websocket message receiver : {}", droneDto); DroneControlDto history = controlService.dronDtoToControlDtoConvert(droneDto); diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Decoder.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Decoder.java index 946437a..11e2fdf 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Decoder.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Decoder.java @@ -16,7 +16,7 @@ public class Decoder extends MessageToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, Object in, List out) throws Exception { - log.info(">>>>> decode <<<<<"); + log.debug(">>>>> decode <<<<<"); try { } catch (Exception e) { log.warn("decode parsing error : {} :: {}", e.getMessage(), in); diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Encoder.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Encoder.java index e49a98b..ac60ab4 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Encoder.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/codec/Encoder.java @@ -17,7 +17,7 @@ public class Encoder extends MessageToMessageEncoder { @Override protected void encode(ChannelHandlerContext ctx, Object msg, List out) throws Exception { - log.info(">>>>> encode <<<"); + log.debug(">>>>> encode <<<"); try { } catch (Exception e) { log.warn("json parsing error : {} :: {}", e.getMessage(), msg); diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/AppReadyEvent.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/AppReadyEvent.java index f30ca84..be2567c 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/AppReadyEvent.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/AppReadyEvent.java @@ -16,7 +16,7 @@ public class AppReadyEvent implements ApplicationListener @Override public void onApplicationEvent(ApplicationReadyEvent event) { - log.info(">>>> onApplicationEvent <<<<<"); + log.debug(">>>> onApplicationEvent <<<<<"); socketServer.start(); } } diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/NettyConfig.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/NettyConfig.java index 278e1fb..aa25d69 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/NettyConfig.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/NettyConfig.java @@ -33,7 +33,7 @@ public class NettyConfig { @Bean public ServerBootstrap serverBootstrap(ChannelInitializer channelInitializer) { - log.info(">>>>> serverBootstrap <<<<<"); + log.debug(">>>>> serverBootstrap <<<<<"); // ServerBootstrap: 서버 설정을 도와주는 class ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup(), workerGroup()); @@ -59,14 +59,14 @@ public class NettyConfig { // boss: incoming connection을 수락하고, 수락한 connection을 worker에게 등록(register) @Bean(destroyMethod = "shutdownGracefully") public NioEventLoopGroup bossGroup() { - log.info(">>>>> bossGroup <<<<<"); + log.debug(">>>>> bossGroup <<<<<"); return new NioEventLoopGroup(bossCount); } // worker: boss가 수락한 연결의 트래픽 관리 @Bean(destroyMethod = "shutdownGracefully") public NioEventLoopGroup workerGroup() { - log.info(">>>>> workerGroup <<<<<"); + log.debug(">>>>> workerGroup <<<<<"); return new NioEventLoopGroup(); } @@ -74,7 +74,7 @@ public class NettyConfig { // 도메인 이름으로 객체 생성 가능 @Bean public InetSocketAddress inetSocketAddress() { - log.info(">>>>> inetSocketAddress <<<<<"); + log.debug(">>>>> inetSocketAddress <<<<<"); return new InetSocketAddress(port); } } diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/handler/WebSocketHandler.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/handler/WebSocketHandler.java index a69c2a6..eaa3c72 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/handler/WebSocketHandler.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/handler/WebSocketHandler.java @@ -20,25 +20,25 @@ public class WebSocketHandler extends SimpleChannelInboundHandler>>> channelRead0 <<<<<"); + log.debug(">>>> channelRead0 <<<<<"); } @Override public void channelRegistered(ChannelHandlerContext ctx) throws Exception { - log.info(">>>>> channelRegistered <<<<<"); + log.debug(">>>>> channelRegistered <<<<<"); } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { - log.info(">>>>> channelActive <<<<<"); + log.debug(">>>>> channelActive <<<<<"); ChannelStorage channelStorage = ChannelStorage.getInstance(); - log.info("active size before : {}", channelStorage.getGroup().size()); + log.debug("active size before : {}", channelStorage.getGroup().size()); channelStorage.add(ctx.channel()); - log.info("active size after : {}", channelStorage.getGroup().size()); + log.debug("active size after : {}", channelStorage.getGroup().size()); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - log.info(">>>>> channelInactive <<<<<"); + log.debug(">>>>> channelInactive <<<<<"); } } diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/socket/ChannelInitializer.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/socket/ChannelInitializer.java index 8f5c67c..fbe3bf8 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/socket/ChannelInitializer.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/socket/ChannelInitializer.java @@ -22,7 +22,7 @@ public class ChannelInitializer extends io.netty.channel.ChannelInitializer>>>> initChannel <<<<<"); + log.debug(">>>>> initChannel <<<<<"); ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(new HttpServerCodec()); @@ -34,6 +34,6 @@ public class ChannelInitializer extends io.netty.channel.ChannelInitializer>>>> start <<<<<"); + log.debug(">>>>> start <<<<<"); try { // ChannelFuture: I/O operation의 결과나 상태를 제공하는 객체 // 지정한 host, port로 소켓을 바인딩하고 incoming connections을 받도록 준비함 @@ -36,7 +36,7 @@ public class WebSocketServer { // Bean을 제거하기 전에 해야할 작업이 있을 때 설정 @PreDestroy public void stop() { - log.info(">>>>> stop <<<<<"); + log.debug(">>>>> stop <<<<<"); if (serverChannel != null) { serverChannel.close(); serverChannel.parent().closeFuture(); diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java index e604465..487f10a 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ControlService.java @@ -21,7 +21,7 @@ public class ControlService { ControlStorage controlCache = ControlStorage.getInstance(); Map allHistory = controlCache.getAll(); - log.info(">>> getList :: {}", allHistory); + log.debug(">>> getList :: {}", allHistory); if (Objects.nonNull(allHistory)) { allHistory.forEach((k, v) -> { diff --git a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java index 2878885..68304db 100644 --- a/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java +++ b/app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java @@ -26,7 +26,7 @@ public class ScheduledService { // 접속한 모든 채널에 데이터 전송 @Scheduled(fixedDelay = 10 * 1000) // 10초 public void sendAllChannel() { - log.info("ready send to all channel"); + log.debug("ready send to all channel"); // 채널 가져오기 ChannelStorage channelStorage = ChannelStorage.getInstance(); ChannelGroup channelGroup = channelStorage.getGroup(); @@ -46,7 +46,7 @@ public class ScheduledService { } catch (Exception e) { log.warn("send fail to all channel. : {}", e.getMessage(), e); } - log.info("done send to all channel"); + log.debug("done send to all channel"); } } diff --git a/app/kac-websocket-app/src/main/resources/application.yml b/app/kac-websocket-app/src/main/resources/application.yml index 5dd3e99..b07431a 100644 --- a/app/kac-websocket-app/src/main/resources/application.yml +++ b/app/kac-websocket-app/src/main/resources/application.yml @@ -44,5 +44,10 @@ app: server: port: 8002 +logging: + level: + kr.co.palnet: info + + diff --git a/common/config-db/src/main/resources/application-db.yml b/common/config-db/src/main/resources/application-db.yml index 2e691a4..0ea066e 100644 --- a/common/config-db/src/main/resources/application-db.yml +++ b/common/config-db/src/main/resources/application-db.yml @@ -10,6 +10,12 @@ spring: jdbc-url: jdbc:log4jdbc:mysql://localhost:13306/PAV_KAC?characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true username: kac password: palnet!234 + minimumidle: 5 + maximumpoolsize: 5 + idletimeout: 60000 + maxlifetime: 300000 + connectiontimeout: 30000 + validationtimeout: 5000 --- diff --git a/common/model/src/main/java/kr/co/palnet/kac/common/model/common/ControlDto.java b/common/model/src/main/java/kr/co/palnet/kac/common/model/common/ControlDto.java deleted file mode 100644 index 4b9cb41..0000000 --- a/common/model/src/main/java/kr/co/palnet/kac/common/model/common/ControlDto.java +++ /dev/null @@ -1,18 +0,0 @@ -package kr.co.palnet.kac.common.model.common; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -public class ControlDto { - private String controlId; - private String typeCd; - private String areaTrnsYn; - private boolean controlWarnCd; - private Long regTime; -} diff --git a/common/util/src/main/java/kr/co/palnet/kac/util/EncryptUtil.java b/common/util/src/main/java/kr/co/palnet/kac/util/EncryptUtil.java index 26d4396..e34bda6 100644 --- a/common/util/src/main/java/kr/co/palnet/kac/util/EncryptUtil.java +++ b/common/util/src/main/java/kr/co/palnet/kac/util/EncryptUtil.java @@ -33,7 +33,7 @@ public class EncryptUtil { // 암호화 public static String encrypt(String key, String initVector, String value) { -// log.info("encrypt() key: {}, initVector: {}, value: {}", key, initVector, value); +// log.debug("encrypt() key: {}, initVector: {}, value: {}", key, initVector, value); try { IvParameterSpec iv = new IvParameterSpec(initVector.getBytes(StandardCharsets.UTF_8)); SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES"); @@ -54,7 +54,7 @@ public class EncryptUtil { // 복호화 public static String decrypt(String key, String initVector, String encrypted) { -// log.info("decrypt() key: {}, initVector: {}, encrypted: {}", key, initVector, encrypted); +// log.debug("decrypt() key: {}, initVector: {}, encrypted: {}", key, initVector, encrypted); try { IvParameterSpec iv = new IvParameterSpec(initVector.getBytes(StandardCharsets.UTF_8)); @@ -80,8 +80,8 @@ public class EncryptUtil { // WkaOhqSK03Z1pSuPOdc03w== // WkaOhqSK03Z1pSuPOdc03w== String encrypted = encrypt(test); - log.info("encrypted: {}", encrypted); + log.debug("encrypted: {}", encrypted); String decrypted = decrypt(encrypted); - log.info("decrypted: {}", decrypted); + log.debug("decrypted: {}", decrypted); } } diff --git a/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java b/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java index 29a28c0..d9a3eda 100644 --- a/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java +++ b/data/com/src/test/java/kr/co/palnet/kac/data/com/service/ComCodeDomainServiceTest.java @@ -32,7 +32,7 @@ class ComCodeDomainServiceTest { @BeforeEach void before() { - log.info("before start"); + log.debug("before start"); this.comCdLangCtgRepository.deleteAll(); this.comCdBasRepository.deleteAll(); this.comCdGroupBasRepository.deleteAll(); @@ -89,52 +89,52 @@ class ComCodeDomainServiceTest { } - log.info("before end"); + log.debug("before end"); } @DisplayName("before...") @Test void testBefore() { - log.info("before..."); + log.debug("before..."); } @DisplayName("그룹 조회 - 목록") @Test void getComCdGroupBasList() { - comCodeDomainService.getComCdGroupBasList(null).forEach(comCdGroupBas -> log.info("{}", comCdGroupBas)); + comCodeDomainService.getComCdGroupBasList(null).forEach(comCdGroupBas -> log.debug("{}", comCdGroupBas)); } @DisplayName("그룹 조회 - 단건") @Test void getComCdGroupBas() { var comCdGroupBas = comCodeDomainService.getComCdGroupBas("TEST"); - log.info("{}", comCdGroupBas); + log.debug("{}", comCdGroupBas); } @DisplayName("코드 조회 - 목록") @Test void getComCdBasList() { - comCodeDomainService.getComCdBasList("TEST").forEach(bas -> log.info("{}", bas)); + comCodeDomainService.getComCdBasList("TEST").forEach(bas -> log.debug("{}", bas)); } @DisplayName("코드 조회 - 단건") @Test void getComCdBas() { var comCdBas = comCodeDomainService.getComCdBas("TEST", "TEST"); - log.info("{}", comCdBas); + log.debug("{}", comCdBas); } @DisplayName("언어 조회 - 목록") @Test void getComCdLangCtgList() { - comCodeDomainService.getComCdLangCtgList("TEST", "TEST").forEach(lang -> log.info("{}", lang)); + comCodeDomainService.getComCdLangCtgList("TEST", "TEST").forEach(lang -> log.debug("{}", lang)); } @DisplayName("언어 조회 - 단건") @Test void getComCdLangCtg() { ComCdLangCtg comCdLangCtg = comCodeDomainService.getComCdLangCtg("TEST", "TEST", "ko_KR"); - log.info("{}", comCdLangCtg); + log.debug("{}", comCdLangCtg); } @@ -175,7 +175,7 @@ class ComCodeDomainServiceTest { .cdNm("테스트1") .build(); ComCdLangCtg comCdLangCtg = comCodeDomainService.createComCdLangCtg(entity); - log.info("{}", comCdLangCtg); + log.debug("{}", comCdLangCtg); } @DisplayName("그룹 수정 - 단건") @@ -188,7 +188,7 @@ class ComCodeDomainServiceTest { .rm("비고-update") .build(); ComCdGroupBas comCdGroupBas = comCodeDomainService.updateComCdGroupBas(entity); - log.info("{}", comCdGroupBas); + log.debug("{}", comCdGroupBas); } @DisplayName("코드 수정 - 단건") diff --git a/data/pty/src/test/java/kr/co/palnet/kac/data/pty/service/PtyCstmrDomainServiceTest.java b/data/pty/src/test/java/kr/co/palnet/kac/data/pty/service/PtyCstmrDomainServiceTest.java index 8f42c66..b0c41a9 100644 --- a/data/pty/src/test/java/kr/co/palnet/kac/data/pty/service/PtyCstmrDomainServiceTest.java +++ b/data/pty/src/test/java/kr/co/palnet/kac/data/pty/service/PtyCstmrDomainServiceTest.java @@ -45,8 +45,8 @@ class PtyCstmrDomainServiceTest { .build(); PtyCstmrBas ptyCstmrBas = ptyCstmrBasRepository.saveAndFlush(bas); - log.info("ptyCstmrBas >> {}", ptyCstmrBas); - log.info("bas >> {}", bas); + log.debug("ptyCstmrBas >> {}", ptyCstmrBas); + log.debug("bas >> {}", bas); } diff --git a/socket-test/pav-100-dron.js b/socket-test/pav-100-dron.js index 22ec3fa..c709c61 100644 --- a/socket-test/pav-100-dron.js +++ b/socket-test/pav-100-dron.js @@ -2,9 +2,10 @@ const { getConnection, writeData } = require('./pav-client'); const { dumyData } = require('./pav-utils'); const host = "localhost" -const port = 8003; +// const port = 8003; +const port = 18003; -const prefix = 'PA-DRON-'; +const prefix = 'PA-DRON-004-'; const severalDrones = cnt => { // 클라이언트 정보 저장공간 const clients = []; @@ -55,7 +56,7 @@ const severalDrones = cnt => { return clients; }; // -const clients = severalDrones(100); +const clients = severalDrones(10); const dist = 0.01; const sendData = cnt => { const direction = Math.floor(cnt / 10) % 4; @@ -91,6 +92,7 @@ const sendData = cnt => { const iteratorSendData = (cnt = 0) => { setTimeout(() => sendData(cnt), 1000); + // sendData(cnt) }; iteratorSendData(); diff --git a/socket-test/pav-client.js b/socket-test/pav-client.js index b8d6c45..a1a2199 100644 --- a/socket-test/pav-client.js +++ b/socket-test/pav-client.js @@ -10,6 +10,7 @@ const getConnection = (connName, host, port) => { this.setEncoding('utf8'); this.on('data', function (data) { console.log(connName + " From Server: " + data.toString()); + console.log('response time : ', new Date()); // this.end(); }); this.on('end', function () { @@ -29,6 +30,7 @@ const getConnection = (connName, host, port) => { } const writeData = (socket, data) => { + console.log('start time : ', new Date()); const success = !!socket.write(data); // if (success) { // (function (socket, data) {