From 9022f05cc53d6da83f6e11bc6bd36dffc212ff0e Mon Sep 17 00:00:00 2001 From: teddy Date: Mon, 12 Jan 2026 20:03:04 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[KC-108]=20ai=20api=20batch=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InferenceResultApiController.java | 22 ++--- .../inference/dto/InferenceResultDto.java | 83 +++++++++---------- .../service/InferenceResultService.java | 3 +- .../core/InferenceResultCoreService.java | 11 ++- .../postgres/entity/GpuMetricEntity.java | 1 - .../postgres/entity/SystemMetricEntity.java | 1 - .../MapSheetLearnRepositoryCustom.java | 4 +- .../MapSheetLearnRepositoryImpl.java | 66 +++++++++------ .../kamcoback/scheduler/dto/JobStatusDto.java | 52 ++++++++++++ .../service/MapSheetInferenceJobService.java | 47 ++++++++++- src/main/resources/application-dev.yml | 1 + src/main/resources/application-local.yml | 1 + src/main/resources/application-prod.yml | 1 + 13 files changed, 207 insertions(+), 86 deletions(-) create mode 100644 src/main/java/com/kamco/cd/kamcoback/scheduler/dto/JobStatusDto.java diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java index afedbb4b..34771618 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java @@ -221,17 +221,17 @@ public class InferenceResultApiController { @Operation(summary = "추론관리 추론진행 서버 현황", description = "추론관리 추론진행 서버 현황") @ApiResponses( - value = { - @ApiResponse( - responseCode = "200", - description = "검색 성공", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = Page.class))), - @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), - @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) - }) + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Page.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) @GetMapping("/serverStatus") public ApiResponseDto> getInferenceServerStatusList() { diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index 3941876f..c97942d3 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -129,10 +129,7 @@ public class InferenceResultDto { } public static Status fromCode(String code) { - return Arrays.stream(values()) - .filter(v -> v.name().equals(code)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("알 수 없는 상태 코드: " + code)); + return Arrays.stream(values()).filter(v -> v.name().equals(code)).findFirst().orElse(null); } public static String getDescByCode(String code) { @@ -205,81 +202,81 @@ public class InferenceResultDto { public static class InferenceServerStatusDto { private String serverName; - @JsonIgnore - private float cpu_user; + @JsonIgnore private float cpu_user; @JsonIgnore private float cpu_system; @JsonIgnore private float memused; private Long kbmemused; private float gpuUtil; - //private String cpuStatusName; - //private String memStatusName; - //private String gpuStatusName; - //private float cpu_use_rate; - //private float gpu_use_rate; - //private float mem_use_rate; - public float getCpuUseRate() - { - return this.cpu_user+this.cpu_system; + // private String cpuStatusName; + // private String memStatusName; + // private String gpuStatusName; + // private float cpu_use_rate; + // private float gpu_use_rate; + // private float mem_use_rate; + + public float getCpuUseRate() { + return this.cpu_user + this.cpu_system; } - public String getServerStatus() - { + public String getServerStatus() { String enumId = "SAFETY"; - //if( this.cpu_user+this.cpu_system >= 80 )enumId = "CAUTION"; + // if( this.cpu_user+this.cpu_system >= 80 )enumId = "CAUTION"; return enumId; } - public String getServerStatusName() - { - //String enumId = "SAFETY"; - //if( this.cpu_user+this.cpu_system >= 80 )enumId = "CAUTION"; + public String getServerStatusName() { + // String enumId = "SAFETY"; + // if( this.cpu_user+this.cpu_system >= 80 )enumId = "CAUTION"; return ServerStatus.SAFETY.getText(); } - public String getCpuStatus() - { + public String getCpuStatus() { String enumId = "SAFETY"; - if( this.cpu_user+this.cpu_system >= 80 )enumId = "CAUTION"; + if (this.cpu_user + this.cpu_system >= 80) { + enumId = "CAUTION"; + } return enumId; } - public String getGpuStatus() - { + public String getGpuStatus() { String enumId = "SAFETY"; - if( this.gpuUtil >= 80 )enumId = "CAUTION"; + if (this.gpuUtil >= 80) { + enumId = "CAUTION"; + } return enumId; } - public String getMemStatus() - { + public String getMemStatus() { String enumId = "SAFETY"; - if( this.memused >= 80 )enumId = "CAUTION"; + if (this.memused >= 80) { + enumId = "CAUTION"; + } return enumId; } - public String getCpuStatusName() - { - if( this.cpu_user+this.cpu_system >= 80 )return ServerStatus.CAUTION.getText(); + public String getCpuStatusName() { + if (this.cpu_user + this.cpu_system >= 80) { + return ServerStatus.CAUTION.getText(); + } return ServerStatus.SAFETY.getText(); } - public String getGpuStatusName() - { - if( this.gpuUtil >= 80 )return ServerStatus.CAUTION.getText(); + public String getGpuStatusName() { + if (this.gpuUtil >= 80) { + return ServerStatus.CAUTION.getText(); + } return ServerStatus.SAFETY.getText(); } - public String getMemStatusName() - { - if( this.memused >= 80 )return ServerStatus.CAUTION.getText(); + public String getMemStatusName() { + if (this.memused >= 80) { + return ServerStatus.CAUTION.getText(); + } return ServerStatus.SAFETY.getText(); } - - } - @Getter @AllArgsConstructor public enum ServerStatus implements EnumType { diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index 705936bc..e78e23a5 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -15,6 +15,7 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerSt import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetNumDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Status; import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto; import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto.pred_requests_areas; import com.kamco.cd.kamcoback.mapsheet.dto.MapSheetMngDto.MngListCompareDto; @@ -199,7 +200,7 @@ public class InferenceResultService { m3.setPred_requests_areas(predRequestsAreas); Long batchId = this.ensureAccepted(m1); - inferenceResultCoreService.update(uuid, batchId, "IN_PROGRESS"); + inferenceResultCoreService.update(uuid, batchId, Status.IN_PROGRESS.getId()); } /** diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index 1d7710a1..34419e5f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -228,6 +228,15 @@ public class InferenceResultCoreService { entity.setStatus(status); } - public List getInferenceServerStatusList(){return mapSheetLearnRepository.getInferenceServerStatusList(); + public List getInferenceServerStatusList() { + return mapSheetLearnRepository.getInferenceServerStatusList(); + } + + public Long getInferenceResultByStatus(String status) { + MapSheetLearnEntity entity = + mapSheetLearnRepository + .getInferenceResultByStatus(status) + .orElseThrow(() -> new EntityNotFoundException(status)); + return entity.getBatchId(); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/GpuMetricEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/GpuMetricEntity.java index 55fee73d..23f74a52 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/GpuMetricEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/GpuMetricEntity.java @@ -44,5 +44,4 @@ public class GpuMetricEntity { @Column(name = "gpu_mem_total") private Float gpuMemTotal; - } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/SystemMetricEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/SystemMetricEntity.java index eb072a3f..05e5bb02 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/SystemMetricEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/SystemMetricEntity.java @@ -55,5 +55,4 @@ public class SystemMetricEntity { @Column(name = "memused") private Float memused; - } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java index 4d896aa3..74dc4ce0 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java @@ -3,9 +3,9 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; +import java.util.List; import java.util.Optional; import java.util.UUID; -import java.util.List; import org.springframework.data.domain.Page; public interface MapSheetLearnRepositoryCustom { @@ -15,4 +15,6 @@ public interface MapSheetLearnRepositoryCustom { Optional getInferenceResultByUuid(UUID uuid); List getInferenceServerStatusList(); + + Optional getInferenceResultByStatus(String status); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java index 79c7e827..9ead997b 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java @@ -94,35 +94,49 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto BooleanBuilder builder = new BooleanBuilder(); - List latestIds = queryFactory - .select(systemMetricEntity.id1.max()) - .from(systemMetricEntity) - .groupBy(systemMetricEntity.serverName) - .fetch(); + List latestIds = + queryFactory + .select(systemMetricEntity.id1.max()) + .from(systemMetricEntity) + .groupBy(systemMetricEntity.serverName) + .fetch(); - List latestGpuIds = queryFactory - .select(gpuMetricEntity.id1.max()) - .from(gpuMetricEntity) - .groupBy(gpuMetricEntity.serverName) - .fetch(); + List latestGpuIds = + queryFactory + .select(gpuMetricEntity.id1.max()) + .from(gpuMetricEntity) + .groupBy(gpuMetricEntity.serverName) + .fetch(); - List foundContent = queryFactory - .select(Projections.constructor( - InferenceServerStatusDto.class, - systemMetricEntity.serverName, - systemMetricEntity.cpuUser, - systemMetricEntity.cpuSystem, - systemMetricEntity.memused, - systemMetricEntity.kbmemused, - gpuMetricEntity.gpuUtil - )) - .from(systemMetricEntity) - .leftJoin(gpuMetricEntity).on(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName)) - .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 - .orderBy(systemMetricEntity.serverName.asc()) - .limit(4) - .fetch(); + List foundContent = + queryFactory + .select( + Projections.constructor( + InferenceServerStatusDto.class, + systemMetricEntity.serverName, + systemMetricEntity.cpuUser, + systemMetricEntity.cpuSystem, + systemMetricEntity.memused, + systemMetricEntity.kbmemused, + gpuMetricEntity.gpuUtil)) + .from(systemMetricEntity) + .leftJoin(gpuMetricEntity) + .on(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName)) + .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 + .orderBy(systemMetricEntity.serverName.asc()) + .limit(4) + .fetch(); return foundContent; } + + @Override + public Optional getInferenceResultByStatus(String status) { + return Optional.ofNullable( + queryFactory + .selectFrom(mapSheetLearnEntity) + .where(mapSheetLearnEntity.status.eq(status)) + .limit(1) + .fetchOne()); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/dto/JobStatusDto.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/dto/JobStatusDto.java new file mode 100644 index 00000000..a995357e --- /dev/null +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/dto/JobStatusDto.java @@ -0,0 +1,52 @@ +package com.kamco.cd.kamcoback.scheduler.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.ZonedDateTime; +import java.util.List; +import lombok.Data; + +@Data +public class JobStatusDto { + + private Long id; + + @JsonProperty("created_at") + private ZonedDateTime createdAt; + + @JsonProperty("input1_year") + private Integer input1Year; + + @JsonProperty("input2_year") + private Integer input2Year; + + @JsonProperty("total_jobs") + private Integer totalJobs; + + @JsonProperty("pending_jobs") + private Integer pendingJobs; + + @JsonProperty("running_jobs") + private Integer runningJobs; + + @JsonProperty("completed_jobs") + private Integer completedJobs; + + @JsonProperty("failed_jobs") + private Integer failedJobs; + + private String status; + + private List jobs; + + @JsonProperty("completed_ids") + private List completedIds; + + @JsonProperty("processing_ids") + private List processingIds; + + @JsonProperty("queued_ids") + private List queuedIds; + + @JsonProperty("failed_ids") + private List failedIds; +} diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java index 174eeb80..9ef683bd 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java @@ -1,8 +1,19 @@ package com.kamco.cd.kamcoback.scheduler.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient; +import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient.ExternalCallResult; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Status; import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; +import com.kamco.cd.kamcoback.scheduler.dto.JobStatusDto; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -12,6 +23,12 @@ import org.springframework.stereotype.Service; public class MapSheetInferenceJobService { private final InferenceResultCoreService inferenceResultCoreService; + private final ExternalHttpClient externalHttpClient; + + private final ObjectMapper objectMapper; + + @Value("${inference.batch-url}") + private String batchUrl; @Scheduled(fixedDelay = 60_000) public void runBatch() { @@ -19,8 +36,36 @@ public class MapSheetInferenceJobService { try { // TODO: 배치 로직 작성 + + Long batchId = + inferenceResultCoreService.getInferenceResultByStatus(Status.IN_PROGRESS.getId()); + + if (batchId == null) { + return; + } + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + + String url = batchUrl + "/" + batchId; + + ExternalCallResult result = + externalHttpClient.call(url, HttpMethod.GET, null, headers, String.class); + + int status = result.statusCode(); + if (status < 200 || status >= 300) { + return; + } + + String json = result.body(); + JobStatusDto dto = objectMapper.readValue(json, JobStatusDto.class); + + System.out.println(dto); + Thread.sleep(3000); // 예시: 처리 시간 3초 - } catch (InterruptedException e) { + + } catch (InterruptedException | JsonProcessingException e) { Thread.currentThread().interrupt(); log.error("배치 중 인터럽트 발생", e); } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 4894e6b6..128480f3 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -97,4 +97,5 @@ file: inference: url: http://10.100.0.11:8000/jobs + batch-url: http://10.100.0.11:8000/batches geojson-dir: /kamco-nfs/requests/ diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index c75e7709..369ed2c4 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -83,4 +83,5 @@ file: inference: url: http://10.100.0.11:8000/jobs + batch-url: http://10.100.0.11:8000/batches geojson-dir: /kamco-nfs/requests/ diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 0e5de80c..51449152 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -58,5 +58,6 @@ file: inference: url: http://10.100.0.11:8000/jobs + batch-url: http://10.100.0.11:8000/batches geojson-dir: /kamco-nfs/requests/ From a5a5b034b400b00a42567918c305d6fbfc721252 Mon Sep 17 00:00:00 2001 From: teddy Date: Mon, 12 Jan 2026 20:05:48 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[KC-108]=20ai=20api=20batch=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inference/dto/InferenceResultDto.java | 22 +++++++++++++------ .../core/InferenceResultCoreService.java | 2 -- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index 6fcc9612..c97942d3 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -233,34 +233,42 @@ public class InferenceResultDto { public String getCpuStatus() { String enumId = "SAFETY"; - if (this.cpu_user + this.cpu_system >= 80) enumId = "CAUTION"; + if (this.cpu_user + this.cpu_system >= 80) { + enumId = "CAUTION"; + } return enumId; } public String getGpuStatus() { String enumId = "SAFETY"; - if (this.gpuUtil >= 80) enumId = "CAUTION"; + if (this.gpuUtil >= 80) { + enumId = "CAUTION"; + } return enumId; } public String getMemStatus() { String enumId = "SAFETY"; - if (this.memused >= 80) enumId = "CAUTION"; + if (this.memused >= 80) { + enumId = "CAUTION"; + } return enumId; } public String getCpuStatusName() { - if (this.cpu_user + this.cpu_system >= 80) return ServerStatus.CAUTION.getText(); + if (this.cpu_user + this.cpu_system >= 80) { + return ServerStatus.CAUTION.getText(); + } return ServerStatus.SAFETY.getText(); } public String getGpuStatusName() { - if (this.gpuUtil >= 80) return ServerStatus.CAUTION.getText(); + if (this.gpuUtil >= 80) { + return ServerStatus.CAUTION.getText(); + } return ServerStatus.SAFETY.getText(); } - public String getMemStatusName() { - if (this.memused >= 80) return ServerStatus.CAUTION.getText(); public String getMemStatusName() { if (this.memused >= 80) { return ServerStatus.CAUTION.getText(); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index be21bef3..34419e5f 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -238,7 +238,5 @@ public class InferenceResultCoreService { .getInferenceResultByStatus(status) .orElseThrow(() -> new EntityNotFoundException(status)); return entity.getBatchId(); - public List getInferenceServerStatusList() { - return mapSheetLearnRepository.getInferenceServerStatusList(); } } From a2d9dfc0360ab8465340d0c4e7e150f788a95375 Mon Sep 17 00:00:00 2001 From: teddy Date: Mon, 12 Jan 2026 20:34:07 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[KC-108]=20ai=20api=20batch=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inference/dto/InferenceDetailDto.java | 13 ++++++++ .../inference/dto/InferenceResultDto.java | 13 ++++++++ .../service/InferenceResultService.java | 11 ++++++- .../core/InferenceResultCoreService.java | 33 +++++++++++++++---- .../postgres/entity/MapSheetLearnEntity.java | 16 +++++++-- .../service/MapSheetInferenceJobService.java | 21 ++++++++++-- 6 files changed, 95 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java index 4f3167ff..51158a32 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceDetailDto.java @@ -391,4 +391,17 @@ public class InferenceDetailDto { return PageRequest.of(page, size); } } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class InferenceBatchSheet { + + private Long m1BatchId; + private Long m2BatchId; + private Long m3BatchId; + private String status; + private String runningModelType; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index c97942d3..057b81fa 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -297,4 +297,17 @@ public class InferenceResultDto { return desc; } } + + @Getter + @Setter + @AllArgsConstructor + @NoArgsConstructor + public static class SaveInferenceAiDto { + + private UUID uuid; + private Long batchId; + private String status; + private String type; + private ZonedDateTime inferStartDttm; + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index e78e23a5..42903c8c 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -15,6 +15,7 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerSt import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetNumDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.SaveInferenceAiDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Status; import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto; import com.kamco.cd.kamcoback.inference.dto.InferenceSendDto.pred_requests_areas; @@ -25,6 +26,7 @@ import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; import com.kamco.cd.kamcoback.postgres.core.MapSheetMngCoreService; import com.kamco.cd.kamcoback.postgres.core.ModelMngCoreService; import jakarta.validation.constraints.NotNull; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -200,7 +202,14 @@ public class InferenceResultService { m3.setPred_requests_areas(predRequestsAreas); Long batchId = this.ensureAccepted(m1); - inferenceResultCoreService.update(uuid, batchId, Status.IN_PROGRESS.getId()); + + SaveInferenceAiDto saveInferenceAiDto = new SaveInferenceAiDto(); + saveInferenceAiDto.setUuid(uuid); + saveInferenceAiDto.setBatchId(batchId); + saveInferenceAiDto.setStatus(Status.IN_PROGRESS.getId()); + saveInferenceAiDto.setType("M1"); + saveInferenceAiDto.setInferStartDttm(ZonedDateTime.now()); + inferenceResultCoreService.update(saveInferenceAiDto); } /** diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index 34419e5f..2cbd3cb7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -4,11 +4,13 @@ import com.kamco.cd.kamcoback.common.enums.CommonUseStatus; import com.kamco.cd.kamcoback.common.utils.UserUtil; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Dashboard; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.InferenceBatchSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetNumDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.SaveInferenceAiDto; import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceEntity; import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataInferenceGeomEntity; @@ -218,25 +220,42 @@ public class InferenceResultCoreService { .toList(); } - public void update(UUID uuid, Long batchId, String status) { + public void update(SaveInferenceAiDto request) { MapSheetLearnEntity entity = mapSheetLearnRepository - .getInferenceResultByUuid(uuid) - .orElseThrow(() -> new EntityNotFoundException(uuid.toString())); + .getInferenceResultByUuid(request.getUuid()) + .orElseThrow(() -> new EntityNotFoundException()); - entity.setBatchId(batchId); - entity.setStatus(status); + if (request.getType().equals("M1")) { + entity.setM1ModelBatchId(request.getBatchId()); + } else if (request.getType().equals("M2")) { + entity.setM2ModelBatchId(request.getBatchId()); + } else if (request.getType().equals("M3")) { + entity.setM3ModelBatchId(request.getBatchId()); + } + + entity.setStatus(request.getStatus()); + if (request.getInferStartDttm() != null) { + entity.setInferStartDttm(request.getInferStartDttm()); + } } public List getInferenceServerStatusList() { return mapSheetLearnRepository.getInferenceServerStatusList(); } - public Long getInferenceResultByStatus(String status) { + public InferenceBatchSheet getInferenceResultByStatus(String status) { MapSheetLearnEntity entity = mapSheetLearnRepository .getInferenceResultByStatus(status) .orElseThrow(() -> new EntityNotFoundException(status)); - return entity.getBatchId(); + + InferenceBatchSheet inferenceBatchSheet = new InferenceBatchSheet(); + inferenceBatchSheet.setM1BatchId(entity.getM1ModelBatchId()); + inferenceBatchSheet.setM2BatchId(entity.getM2ModelBatchId()); + inferenceBatchSheet.setM3BatchId(entity.getM3ModelBatchId()); + inferenceBatchSheet.setStatus(entity.getStatus()); + inferenceBatchSheet.setRunningModelType(entity.getRunningModelType()); + return inferenceBatchSheet; } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java index 8e70a514..f0a2093d 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/entity/MapSheetLearnEntity.java @@ -103,8 +103,20 @@ public class MapSheetLearnEntity { @Column(name = "updated_uid") private Long updatedUid; - @Column(name = "batch_id") - private Long batchId; + @Column(name = "running_model_type") + private String runningModelType; + + @Column(name = "m1_model_batch_id") + private Long m1ModelBatchId; + + @Column(name = "m2_model_batch_id") + private Long m2ModelBatchId; + + @Column(name = "m3_model_batch_id") + private Long m3ModelBatchId; + + @Column(name = "detect_end_cnt") + private Long detectEndCnt; public InferenceResultDto.ResultList toDto() { return new InferenceResultDto.ResultList( diff --git a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java index 9ef683bd..80b57955 100644 --- a/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java +++ b/src/main/java/com/kamco/cd/kamcoback/scheduler/service/MapSheetInferenceJobService.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient; import com.kamco.cd.kamcoback.config.resttemplate.ExternalHttpClient.ExternalCallResult; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.InferenceBatchSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.Status; import com.kamco.cd.kamcoback.postgres.core.InferenceResultCoreService; import com.kamco.cd.kamcoback.scheduler.dto.JobStatusDto; @@ -37,10 +38,10 @@ public class MapSheetInferenceJobService { try { // TODO: 배치 로직 작성 - Long batchId = + InferenceBatchSheet batchSheet = inferenceResultCoreService.getInferenceResultByStatus(Status.IN_PROGRESS.getId()); - if (batchId == null) { + if (batchSheet == null) { return; } @@ -48,6 +49,16 @@ public class MapSheetInferenceJobService { headers.setContentType(MediaType.APPLICATION_JSON); headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + Long batchId = 0L; + + if (batchSheet.getM3BatchId() != null) { + batchId = batchSheet.getM3BatchId(); + } else if (batchSheet.getM2BatchId() != null) { + batchId = batchSheet.getM2BatchId(); + } else if (batchSheet.getM1BatchId() != null) { + batchId = batchSheet.getM1BatchId(); + } + String url = batchUrl + "/" + batchId; ExternalCallResult result = @@ -61,6 +72,12 @@ public class MapSheetInferenceJobService { String json = result.body(); JobStatusDto dto = objectMapper.readValue(json, JobStatusDto.class); + if ("COMPLETED".equals(dto.getStatus())) { + String type = batchSheet.getRunningModelType(); + + // if(type.equals("M3")) + } + System.out.println(dto); Thread.sleep(3000); // 예시: 처리 시간 3초 From d69e10a024f58496fcd44dc84669317980fbabf6 Mon Sep 17 00:00:00 2001 From: Moon Date: Mon, 12 Jan 2026 21:05:24 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=EC=B6=94=EB=A1=A0=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=EC=83=81=ED=83=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InferenceResultApiController.java | 29 ++++++++ .../inference/dto/InferenceResultDto.java | 72 +++++++++++++++++-- .../service/InferenceResultService.java | 18 +++++ .../model/service/ModelMngService.java | 24 ++++++- .../core/InferenceResultCoreService.java | 5 ++ .../MapSheetLearnRepositoryCustom.java | 4 ++ .../MapSheetLearnRepositoryImpl.java | 44 +++++++++++- 7 files changed, 186 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java index afedbb4b..9e6f2879 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java @@ -1,8 +1,10 @@ package com.kamco.cd.kamcoback.inference; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; import com.kamco.cd.kamcoback.inference.service.InferenceResultService; import com.kamco.cd.kamcoback.mapsheet.service.MapSheetMngService; @@ -23,6 +25,7 @@ import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -237,4 +240,30 @@ public class InferenceResultApiController { return ApiResponseDto.ok(inferenceResultService.getInferenceServerStatusList()); } + + + + @Operation(summary = "추론관리 진행현황 상세", description = "어드민 홈 > 추론관리 > 추론관리 > 진행현황 상세") + @ApiResponses( + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Page.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) + @GetMapping("/status/{uuid}") + public ApiResponseDto getInferenceStatus( + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "모델 삭제 요청 정보", + required = true) + @PathVariable + UUID uuid) { + + return ApiResponseDto.ok(inferenceResultService.getInferenceStatus(uuid)); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index 3941876f..3129a90e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -198,6 +198,72 @@ public class InferenceResultDto { private String mapSheetName; } + @Getter + @Setter + @NoArgsConstructor + @AllArgsConstructor + public static class InferenceStatusDetailDto { + private String title; + private Integer compareYyyy; + private Integer targetYyyy; + private String detectOption; + private String mapSheetScope; + @JsonFormatDttm private ZonedDateTime inferStartDttm; + @JsonFormatDttm private ZonedDateTime inferEndDttm; + private Long detectingCnt; + + private String model1Ver; + private String model2Ver; + private String model3Ver; + + public InferenceStatusDetailDto( + String title, + Integer compareYyyy, + Integer targetYyyy, + String detectOption, + String mapSheetScope, + ZonedDateTime inferStartDttm, + ZonedDateTime inferEndDttm, + Long detectingCnt, + String model1Ver, + String model2Ver, + String model3Ver) { + this.title = title; + this.compareYyyy = compareYyyy; + this.targetYyyy = targetYyyy; + this.detectOption = detectOption; + this.mapSheetScope = mapSheetScope; + this.inferStartDttm = inferStartDttm; + this.inferEndDttm = inferEndDttm; + this.detectingCnt = detectingCnt; + this.model1Ver = model1Ver; + this.model2Ver = model2Ver; + this.model3Ver = model3Ver; + } + + private String usedServerName; + private Long detectingEndCnt = 7L; + private String model1VerStatus = "PROCCESING"; + private String model1VerStatusName = "진행중"; + private String model2VerStatus = "PROCCESING"; + private String model2VerStatusName = "진행중"; + private String model3VerStatus = "PROCCESING"; + private String model4VerStatusName = "진행중"; + + public String getDetectOptionName() + { + if( this.detectOption.equals("EXCL") )return "추론제외"; + return "이전 년도 도엽 사용"; + } + + public String getMapSheetScopeName() + { + if( this.detectOption.equals("ALL") )return "전체"; + return "부분"; + } + + } + @Getter @Setter @NoArgsConstructor @@ -211,12 +277,6 @@ public class InferenceResultDto { @JsonIgnore private float memused; private Long kbmemused; private float gpuUtil; - //private String cpuStatusName; - //private String memStatusName; - //private String gpuStatusName; - //private float cpu_use_rate; - //private float gpu_use_rate; - //private float mem_use_rate; public float getCpuUseRate() { diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index 705936bc..23e084d7 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -12,6 +12,7 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.DetectOption; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetNumDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetScope; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; @@ -391,4 +392,21 @@ public class InferenceResultService { public List getInferenceServerStatusList() { return inferenceResultCoreService.getInferenceServerStatusList(); } + + public InferenceStatusDetailDto getInferenceStatus(UUID uuid) { + + List servers = inferenceResultCoreService.getInferenceServerStatusList(); + + String serverNames = ""; + for (InferenceServerStatusDto server : servers) { + if( serverNames.equals("") )serverNames = server.getServerName(); + else serverNames = serverNames+","+server.getServerName(); + } + + InferenceStatusDetailDto dto = inferenceResultCoreService.getInferenceStatus(uuid); + dto.setUsedServerName(serverNames); + + return dto; + } + } diff --git a/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java b/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java index efefe1a2..d62ceeeb 100644 --- a/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java +++ b/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java @@ -86,8 +86,24 @@ public class ModelMngService { modelMetricAddReq.setLoss(0); modelMetricAddReq.setIou(0); + ModelUploadResDto modelUploadResDto = new ModelUploadResDto(); + try { + FIleChecker.unzip(addReq.getFileName(), addReq.getFilePath()); + this.getUnzipModelFiles(addReq.getFilePath(), modelUploadResDto); + + addReq.setCdModelPath(modelUploadResDto.getCdModelPath()); + addReq.setCdModelFileName(modelUploadResDto.getCdModelFileName()); + addReq.setCdModelConfigPath(modelUploadResDto.getCdModelConfigPath()); + addReq.setCdModelConfigFileName(modelUploadResDto.getCdModelConfigFileName()); + addReq.setClsModelPath(modelUploadResDto.getClsModelPath()); + addReq.setClsModelFileName(modelUploadResDto.getClsModelFileName()); + + } catch (IOException e) { + throw new RuntimeException(e); + } + ObjectMapper mapper = new ObjectMapper(); - String filePath = addReq.getClsModelPath() + addReq.getClsModelFileName(); + String filePath = modelUploadResDto.getClsModelPath() + modelUploadResDto.getClsModelFileName(); String dataJson = null; try { dataJson = Files.readString(Path.of(filePath)); @@ -115,7 +131,7 @@ public class ModelMngService { } public ModelUploadResDto uploadChunkModelFile( - UploadDto.UploadAddReq upAddReqDto, MultipartFile chunkFile) { + UploadDto.UploadAddReq upAddReqDto, MultipartFile chunkFile) { UploadDto.UploadRes upRes = uploadService.uploadChunk(upAddReqDto, chunkFile); ModelUploadResDto modelUploadResDto = new ModelUploadResDto(); @@ -126,8 +142,9 @@ public class ModelMngService { modelUploadResDto.setFileName(upRes.getFileName()); modelUploadResDto.setChunkIndex(upRes.getChunkIndex()); modelUploadResDto.setChunkTotalIndex(upRes.getChunkTotalIndex()); - // 압축풀기 (String zipFilePath, String destDirectory) + // 압축풀기 (String zipFilePath, String destDirectory) + /* if (upRes.getChunkIndex() == upRes.getChunkTotalIndex()) { try { FIleChecker.unzip(upRes.getFileName(), upRes.getFilePath()); @@ -138,6 +155,7 @@ public class ModelMngService { throw new RuntimeException(e); } } + */ return modelUploadResDto; } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index 1d7710a1..b7db07b3 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -7,6 +7,7 @@ import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.Dashboard; import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto.MapSheet; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.MapSheetNumDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.ResultList; import com.kamco.cd.kamcoback.postgres.entity.MapInkx5kEntity; @@ -230,4 +231,8 @@ public class InferenceResultCoreService { public List getInferenceServerStatusList(){return mapSheetLearnRepository.getInferenceServerStatusList(); } + + public InferenceStatusDetailDto getInferenceStatus(UUID uuid){ + return mapSheetLearnRepository.getInferenceStatus(uuid); + } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java index 4d896aa3..67448929 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java @@ -1,7 +1,9 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; import java.util.Optional; import java.util.UUID; @@ -15,4 +17,6 @@ public interface MapSheetLearnRepositoryCustom { Optional getInferenceResultByUuid(UUID uuid); List getInferenceServerStatusList(); + + public InferenceStatusDetailDto getInferenceStatus(UUID uuid); } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java index 79c7e827..b83ffe2e 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java @@ -2,12 +2,17 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; import static com.kamco.cd.kamcoback.postgres.entity.QGpuMetricEntity.gpuMetricEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; +import static com.kamco.cd.kamcoback.postgres.entity.QModelMngEntity.modelMngEntity; import static com.kamco.cd.kamcoback.postgres.entity.QSystemMetricEntity.systemMetricEntity; import com.kamco.cd.kamcoback.common.utils.DateRange; +import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; +import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; +import com.kamco.cd.kamcoback.model.service.ModelMngService; import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; +import com.kamco.cd.kamcoback.postgres.entity.QModelMngEntity; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.CaseBuilder; @@ -28,6 +33,7 @@ import org.springframework.stereotype.Repository; public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCustom { private final JPAQueryFactory queryFactory; + private final ModelMngService modelMngService; @Override public Page getInferenceMgnResultList(InferenceResultDto.SearchListReq req) { @@ -117,7 +123,8 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto gpuMetricEntity.gpuUtil )) .from(systemMetricEntity) - .leftJoin(gpuMetricEntity).on(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName)) + .leftJoin(gpuMetricEntity).on(gpuMetricEntity.id1.in(latestGpuIds) + .and(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName))) .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 .orderBy(systemMetricEntity.serverName.asc()) .limit(4) @@ -125,4 +132,39 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto return foundContent; } + + @Override + public InferenceStatusDetailDto getInferenceStatus(UUID uuid) { + + String serverNames = ""; + + QModelMngEntity m1Model = new QModelMngEntity("m1Model"); + QModelMngEntity m2Model = new QModelMngEntity("m2Model"); + QModelMngEntity m3Model = new QModelMngEntity("m3Model"); + + InferenceStatusDetailDto foundContent = queryFactory + .select(Projections.constructor( + InferenceStatusDetailDto.class, + mapSheetLearnEntity.title, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.detectOption, + mapSheetLearnEntity.mapSheetScope, + mapSheetLearnEntity.inferStartDttm, + mapSheetLearnEntity.inferEndDttm, + mapSheetLearnEntity.detectingCnt, + m1Model.modelVer.as("model1Ver"), + m2Model.modelVer.as("model2Ver"), + m3Model.modelVer.as("model3Ver") + )) + .from(mapSheetLearnEntity) + .leftJoin(m1Model).on(m1Model.uuid.eq(mapSheetLearnEntity.m1ModelUuid)) + .leftJoin(m2Model).on(m2Model.uuid.eq(mapSheetLearnEntity.m2ModelUuid)) + .leftJoin(m3Model).on(m3Model.uuid.eq(mapSheetLearnEntity.m3ModelUuid)) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .fetchOne(); + + return foundContent; + } + } From b4ad2fb8585a78b31079b62886ed5b52686cc2c8 Mon Sep 17 00:00:00 2001 From: "gayoun.park" Date: Mon, 12 Jan 2026 21:08:34 +0900 Subject: [PATCH 5/5] spotless --- .../InferenceResultApiController.java | 35 +++--- .../inference/dto/InferenceResultDto.java | 33 +++--- .../service/InferenceResultService.java | 8 +- .../model/service/ModelMngService.java | 2 +- .../core/InferenceResultCoreService.java | 2 +- .../MapSheetLearnRepositoryCustom.java | 3 +- .../MapSheetLearnRepositoryImpl.java | 110 ++++++++++-------- 7 files changed, 97 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java index 28718d69..c7f7aa72 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/InferenceResultApiController.java @@ -1,7 +1,6 @@ package com.kamco.cd.kamcoback.inference; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; -import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; @@ -241,28 +240,26 @@ public class InferenceResultApiController { return ApiResponseDto.ok(inferenceResultService.getInferenceServerStatusList()); } - - @Operation(summary = "추론관리 진행현황 상세", description = "어드민 홈 > 추론관리 > 추론관리 > 진행현황 상세") @ApiResponses( - value = { - @ApiResponse( - responseCode = "200", - description = "검색 성공", - content = - @Content( - mediaType = "application/json", - schema = @Schema(implementation = Page.class))), - @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), - @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) - }) + value = { + @ApiResponse( + responseCode = "200", + description = "검색 성공", + content = + @Content( + mediaType = "application/json", + schema = @Schema(implementation = Page.class))), + @ApiResponse(responseCode = "400", description = "잘못된 검색 조건", content = @Content), + @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) + }) @GetMapping("/status/{uuid}") public ApiResponseDto getInferenceStatus( - @io.swagger.v3.oas.annotations.parameters.RequestBody( - description = "모델 삭제 요청 정보", - required = true) - @PathVariable - UUID uuid) { + @io.swagger.v3.oas.annotations.parameters.RequestBody( + description = "모델 삭제 요청 정보", + required = true) + @PathVariable + UUID uuid) { return ApiResponseDto.ok(inferenceResultService.getInferenceStatus(uuid)); } diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java index b1bc3c99..aaae1591 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/dto/InferenceResultDto.java @@ -214,17 +214,17 @@ public class InferenceResultDto { private String model3Ver; public InferenceStatusDetailDto( - String title, - Integer compareYyyy, - Integer targetYyyy, - String detectOption, - String mapSheetScope, - ZonedDateTime inferStartDttm, - ZonedDateTime inferEndDttm, - Long detectingCnt, - String model1Ver, - String model2Ver, - String model3Ver) { + String title, + Integer compareYyyy, + Integer targetYyyy, + String detectOption, + String mapSheetScope, + ZonedDateTime inferStartDttm, + ZonedDateTime inferEndDttm, + Long detectingCnt, + String model1Ver, + String model2Ver, + String model3Ver) { this.title = title; this.compareYyyy = compareYyyy; this.targetYyyy = targetYyyy; @@ -247,18 +247,15 @@ public class InferenceResultDto { private String model3VerStatus = "PROCCESING"; private String model4VerStatusName = "진행중"; - public String getDetectOptionName() - { - if( this.detectOption.equals("EXCL") )return "추론제외"; + public String getDetectOptionName() { + if (this.detectOption.equals("EXCL")) return "추론제외"; return "이전 년도 도엽 사용"; } - public String getMapSheetScopeName() - { - if( this.detectOption.equals("ALL") )return "전체"; + public String getMapSheetScopeName() { + if (this.detectOption.equals("ALL")) return "전체"; return "부분"; } - } @Getter diff --git a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java index 38e13037..db7e6099 100644 --- a/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java +++ b/src/main/java/com/kamco/cd/kamcoback/inference/service/InferenceResultService.java @@ -405,12 +405,13 @@ public class InferenceResultService { public InferenceStatusDetailDto getInferenceStatus(UUID uuid) { - List servers = inferenceResultCoreService.getInferenceServerStatusList(); + List servers = + inferenceResultCoreService.getInferenceServerStatusList(); String serverNames = ""; for (InferenceServerStatusDto server : servers) { - if( serverNames.equals("") )serverNames = server.getServerName(); - else serverNames = serverNames+","+server.getServerName(); + if (serverNames.equals("")) serverNames = server.getServerName(); + else serverNames = serverNames + "," + server.getServerName(); } InferenceStatusDetailDto dto = inferenceResultCoreService.getInferenceStatus(uuid); @@ -418,5 +419,4 @@ public class InferenceResultService { return dto; } - } diff --git a/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java b/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java index d62ceeeb..6381b8f1 100644 --- a/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java +++ b/src/main/java/com/kamco/cd/kamcoback/model/service/ModelMngService.java @@ -131,7 +131,7 @@ public class ModelMngService { } public ModelUploadResDto uploadChunkModelFile( - UploadDto.UploadAddReq upAddReqDto, MultipartFile chunkFile) { + UploadDto.UploadAddReq upAddReqDto, MultipartFile chunkFile) { UploadDto.UploadRes upRes = uploadService.uploadChunk(upAddReqDto, chunkFile); ModelUploadResDto modelUploadResDto = new ModelUploadResDto(); diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java index 38243a63..de3cc439 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/core/InferenceResultCoreService.java @@ -260,7 +260,7 @@ public class InferenceResultCoreService { return inferenceBatchSheet; } - public InferenceStatusDetailDto getInferenceStatus(UUID uuid){ + public InferenceStatusDetailDto getInferenceStatus(UUID uuid) { return mapSheetLearnRepository.getInferenceStatus(uuid); } } diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java index 67448929..50892c71 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryCustom.java @@ -1,13 +1,12 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; -import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; import com.kamco.cd.kamcoback.postgres.entity.MapSheetLearnEntity; +import java.util.List; import java.util.Optional; import java.util.UUID; -import java.util.List; import org.springframework.data.domain.Page; public interface MapSheetLearnRepositoryCustom { diff --git a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java index b83ffe2e..ad199a12 100644 --- a/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java +++ b/src/main/java/com/kamco/cd/kamcoback/postgres/repository/Inference/MapSheetLearnRepositoryImpl.java @@ -2,11 +2,9 @@ package com.kamco.cd.kamcoback.postgres.repository.Inference; import static com.kamco.cd.kamcoback.postgres.entity.QGpuMetricEntity.gpuMetricEntity; import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetLearnEntity.mapSheetLearnEntity; -import static com.kamco.cd.kamcoback.postgres.entity.QModelMngEntity.modelMngEntity; import static com.kamco.cd.kamcoback.postgres.entity.QSystemMetricEntity.systemMetricEntity; import com.kamco.cd.kamcoback.common.utils.DateRange; -import com.kamco.cd.kamcoback.inference.dto.InferenceDetailDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceServerStatusDto; import com.kamco.cd.kamcoback.inference.dto.InferenceResultDto.InferenceStatusDetailDto; @@ -100,35 +98,42 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto BooleanBuilder builder = new BooleanBuilder(); - List latestIds = queryFactory - .select(systemMetricEntity.id1.max()) - .from(systemMetricEntity) - .groupBy(systemMetricEntity.serverName) - .fetch(); + List latestIds = + queryFactory + .select(systemMetricEntity.id1.max()) + .from(systemMetricEntity) + .groupBy(systemMetricEntity.serverName) + .fetch(); - List latestGpuIds = queryFactory - .select(gpuMetricEntity.id1.max()) - .from(gpuMetricEntity) - .groupBy(gpuMetricEntity.serverName) - .fetch(); + List latestGpuIds = + queryFactory + .select(gpuMetricEntity.id1.max()) + .from(gpuMetricEntity) + .groupBy(gpuMetricEntity.serverName) + .fetch(); - List foundContent = queryFactory - .select(Projections.constructor( - InferenceServerStatusDto.class, - systemMetricEntity.serverName, - systemMetricEntity.cpuUser, - systemMetricEntity.cpuSystem, - systemMetricEntity.memused, - systemMetricEntity.kbmemused, - gpuMetricEntity.gpuUtil - )) - .from(systemMetricEntity) - .leftJoin(gpuMetricEntity).on(gpuMetricEntity.id1.in(latestGpuIds) - .and(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName))) - .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 - .orderBy(systemMetricEntity.serverName.asc()) - .limit(4) - .fetch(); + List foundContent = + queryFactory + .select( + Projections.constructor( + InferenceServerStatusDto.class, + systemMetricEntity.serverName, + systemMetricEntity.cpuUser, + systemMetricEntity.cpuSystem, + systemMetricEntity.memused, + systemMetricEntity.kbmemused, + gpuMetricEntity.gpuUtil)) + .from(systemMetricEntity) + .leftJoin(gpuMetricEntity) + .on( + gpuMetricEntity + .id1 + .in(latestGpuIds) + .and(gpuMetricEntity.serverName.eq(systemMetricEntity.serverName))) + .where(systemMetricEntity.id1.in(latestIds)) // In 절 사용 + .orderBy(systemMetricEntity.serverName.asc()) + .limit(4) + .fetch(); return foundContent; } @@ -142,29 +147,32 @@ public class MapSheetLearnRepositoryImpl implements MapSheetLearnRepositoryCusto QModelMngEntity m2Model = new QModelMngEntity("m2Model"); QModelMngEntity m3Model = new QModelMngEntity("m3Model"); - InferenceStatusDetailDto foundContent = queryFactory - .select(Projections.constructor( - InferenceStatusDetailDto.class, - mapSheetLearnEntity.title, - mapSheetLearnEntity.compareYyyy, - mapSheetLearnEntity.targetYyyy, - mapSheetLearnEntity.detectOption, - mapSheetLearnEntity.mapSheetScope, - mapSheetLearnEntity.inferStartDttm, - mapSheetLearnEntity.inferEndDttm, - mapSheetLearnEntity.detectingCnt, - m1Model.modelVer.as("model1Ver"), - m2Model.modelVer.as("model2Ver"), - m3Model.modelVer.as("model3Ver") - )) - .from(mapSheetLearnEntity) - .leftJoin(m1Model).on(m1Model.uuid.eq(mapSheetLearnEntity.m1ModelUuid)) - .leftJoin(m2Model).on(m2Model.uuid.eq(mapSheetLearnEntity.m2ModelUuid)) - .leftJoin(m3Model).on(m3Model.uuid.eq(mapSheetLearnEntity.m3ModelUuid)) - .where(mapSheetLearnEntity.uuid.eq(uuid)) - .fetchOne(); + InferenceStatusDetailDto foundContent = + queryFactory + .select( + Projections.constructor( + InferenceStatusDetailDto.class, + mapSheetLearnEntity.title, + mapSheetLearnEntity.compareYyyy, + mapSheetLearnEntity.targetYyyy, + mapSheetLearnEntity.detectOption, + mapSheetLearnEntity.mapSheetScope, + mapSheetLearnEntity.inferStartDttm, + mapSheetLearnEntity.inferEndDttm, + mapSheetLearnEntity.detectingCnt, + m1Model.modelVer.as("model1Ver"), + m2Model.modelVer.as("model2Ver"), + m3Model.modelVer.as("model3Ver"))) + .from(mapSheetLearnEntity) + .leftJoin(m1Model) + .on(m1Model.uuid.eq(mapSheetLearnEntity.m1ModelUuid)) + .leftJoin(m2Model) + .on(m2Model.uuid.eq(mapSheetLearnEntity.m2ModelUuid)) + .leftJoin(m3Model) + .on(m3Model.uuid.eq(mapSheetLearnEntity.m3ModelUuid)) + .where(mapSheetLearnEntity.uuid.eq(uuid)) + .fetchOne(); return foundContent; } - }