모델학습관리 > 모델별 진행 상황 API 추가
This commit is contained in:
@@ -11,6 +11,7 @@ import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTrainMetrics;
|
|||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferDetailDto;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferDetailDto;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainMngDto.Basic;
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.Basic;
|
||||||
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.ModelProgressStepDto;
|
||||||
import com.kamco.cd.training.model.service.ModelTrainDetailService;
|
import com.kamco.cd.training.model.service.ModelTrainDetailService;
|
||||||
import com.kamco.cd.training.model.service.ModelTrainMngService;
|
import com.kamco.cd.training.model.service.ModelTrainMngService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@@ -304,4 +305,25 @@ public class ModelTrainDetailApiController {
|
|||||||
UUID uuid) {
|
UUID uuid) {
|
||||||
return ApiResponseDto.ok(modelTrainDetailService.getModelTrainFileInfo(uuid));
|
return ApiResponseDto.ok(modelTrainDetailService.getModelTrainFileInfo(uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "모델관리 > 모델별 진행 상황", description = "모델관리 > 모델별 진행 상황 API")
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
responseCode = "200",
|
||||||
|
description = "조회 성공",
|
||||||
|
content =
|
||||||
|
@Content(
|
||||||
|
mediaType = "application/json",
|
||||||
|
schema = @Schema(implementation = ModelProgressStepDto.class))),
|
||||||
|
@ApiResponse(responseCode = "404", description = "데이터셋을 찾을 수 없음", content = @Content),
|
||||||
|
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
|
||||||
|
})
|
||||||
|
@GetMapping("/progress/{uuid}")
|
||||||
|
public ApiResponseDto<List<ModelProgressStepDto>> findModelTrainProgressInfo(
|
||||||
|
@Parameter(description = "모델 uuid", example = "95cb116c-380a-41c0-98d8-4d1142f15bbf")
|
||||||
|
@PathVariable
|
||||||
|
UUID uuid) {
|
||||||
|
return ApiResponseDto.ok(modelTrainDetailService.findModelTrainProgressInfo(uuid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -312,4 +312,16 @@ public class ModelTrainMngDto {
|
|||||||
return formatDuration(this.packingStrtDttm, this.packingEndDttm);
|
return formatDuration(this.packingStrtDttm, this.packingEndDttm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
public static class ModelProgressStepDto {
|
||||||
|
|
||||||
|
private int step;
|
||||||
|
private String status;
|
||||||
|
@JsonFormatDttm private ZonedDateTime startTime;
|
||||||
|
@JsonFormatDttm private ZonedDateTime endTime;
|
||||||
|
private boolean isError;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetric
|
|||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferDetailDto;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferDetailDto;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainMngDto.Basic;
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.Basic;
|
||||||
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.ModelProgressStepDto;
|
||||||
import com.kamco.cd.training.postgres.core.ModelTrainDetailCoreService;
|
import com.kamco.cd.training.postgres.core.ModelTrainDetailCoreService;
|
||||||
import com.kamco.cd.training.postgres.core.ModelTrainMngCoreService;
|
import com.kamco.cd.training.postgres.core.ModelTrainMngCoreService;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -121,4 +122,8 @@ public class ModelTrainDetailService {
|
|||||||
public ModelFileInfo getModelTrainFileInfo(UUID uuid) {
|
public ModelFileInfo getModelTrainFileInfo(UUID uuid) {
|
||||||
return modelTrainDetailCoreService.getModelTrainFileInfo(uuid);
|
return modelTrainDetailCoreService.getModelTrainFileInfo(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ModelProgressStepDto> findModelTrainProgressInfo(UUID uuid) {
|
||||||
|
return modelTrainDetailCoreService.findModelTrainProgressInfo(uuid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTrainMetrics;
|
|||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainMngDto.Basic;
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.Basic;
|
||||||
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.ModelProgressStepDto;
|
||||||
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
|
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
|
||||||
import com.kamco.cd.training.postgres.repository.model.ModelConfigRepository;
|
import com.kamco.cd.training.postgres.repository.model.ModelConfigRepository;
|
||||||
import com.kamco.cd.training.postgres.repository.model.ModelDetailRepository;
|
import com.kamco.cd.training.postgres.repository.model.ModelDetailRepository;
|
||||||
@@ -102,4 +103,8 @@ public class ModelTrainDetailCoreService {
|
|||||||
public ModelFileInfo getModelTrainFileInfo(UUID uuid) {
|
public ModelFileInfo getModelTrainFileInfo(UUID uuid) {
|
||||||
return modelDetailRepository.getModelTrainFileInfo(uuid);
|
return modelDetailRepository.getModelTrainFileInfo(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ModelProgressStepDto> findModelTrainProgressInfo(UUID uuid) {
|
||||||
|
return modelDetailRepository.findModelTrainProgressInfo(uuid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTestMetrics;
|
|||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTrainMetrics;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTrainMetrics;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
||||||
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.ModelProgressStepDto;
|
||||||
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
|
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -37,4 +38,6 @@ public interface ModelDetailRepositoryCustom {
|
|||||||
ModelBestEpoch getModelTrainBestEpoch(UUID uuid);
|
ModelBestEpoch getModelTrainBestEpoch(UUID uuid);
|
||||||
|
|
||||||
ModelFileInfo getModelTrainFileInfo(UUID uuid);
|
ModelFileInfo getModelTrainFileInfo(UUID uuid);
|
||||||
|
|
||||||
|
List<ModelProgressStepDto> findModelTrainProgressInfo(UUID uuid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,12 +19,14 @@ import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTestMetrics;
|
|||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTrainMetrics;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelTrainMetrics;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.ModelValidationMetrics;
|
||||||
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
import com.kamco.cd.training.model.dto.ModelTrainDetailDto.TransferHyperSummary;
|
||||||
|
import com.kamco.cd.training.model.dto.ModelTrainMngDto.ModelProgressStepDto;
|
||||||
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
|
import com.kamco.cd.training.postgres.entity.ModelMasterEntity;
|
||||||
import com.kamco.cd.training.postgres.entity.QModelHyperParamEntity;
|
import com.kamco.cd.training.postgres.entity.QModelHyperParamEntity;
|
||||||
import com.kamco.cd.training.postgres.entity.QModelMasterEntity;
|
import com.kamco.cd.training.postgres.entity.QModelMasterEntity;
|
||||||
import com.querydsl.core.types.Projections;
|
import com.querydsl.core.types.Projections;
|
||||||
import com.querydsl.jpa.JPAExpressions;
|
import com.querydsl.jpa.JPAExpressions;
|
||||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -287,4 +289,70 @@ public class ModelDetailRepositoryImpl implements ModelDetailRepositoryCustom {
|
|||||||
.where(modelMasterEntity.uuid.eq(uuid))
|
.where(modelMasterEntity.uuid.eq(uuid))
|
||||||
.fetchOne();
|
.fetchOne();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ModelProgressStepDto> findModelTrainProgressInfo(UUID uuid) {
|
||||||
|
ModelMasterEntity entity = findByModelByUUID(uuid);
|
||||||
|
if (entity == null) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ModelProgressStepDto> steps = new ArrayList<>();
|
||||||
|
|
||||||
|
// 0단계 : 대기 상태
|
||||||
|
steps.add(
|
||||||
|
ModelProgressStepDto.builder()
|
||||||
|
.step(0)
|
||||||
|
.status(TrainStatusType.READY.getId())
|
||||||
|
.startTime(entity.getCreatedDttm())
|
||||||
|
.endTime(null)
|
||||||
|
.isError(false)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
// 1단계 : Train/Validation 실행
|
||||||
|
boolean step1Active =
|
||||||
|
entity.getStep1StrtDttm() != null
|
||||||
|
&& !TrainStatusType.READY.getId().equals(entity.getStep1State());
|
||||||
|
|
||||||
|
if (step1Active) {
|
||||||
|
steps.add(
|
||||||
|
ModelProgressStepDto.builder()
|
||||||
|
.step(1)
|
||||||
|
.status(entity.getStep1State())
|
||||||
|
.startTime(entity.getStep1StrtDttm())
|
||||||
|
.endTime(entity.getStep1EndDttm())
|
||||||
|
.isError(TrainStatusType.ERROR.getId().equals(entity.getStep1State()))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2단계 : Test 실행
|
||||||
|
boolean step2Done = entity.getStep2State() != null;
|
||||||
|
|
||||||
|
if (step2Done) {
|
||||||
|
steps.add(
|
||||||
|
ModelProgressStepDto.builder()
|
||||||
|
.step(2)
|
||||||
|
.status(entity.getStep2State())
|
||||||
|
.startTime(entity.getStep2StrtDttm())
|
||||||
|
.endTime(entity.getStep2EndDttm())
|
||||||
|
.isError(TrainStatusType.ERROR.getId().equals(entity.getStep2State()))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3단계 : 패키징
|
||||||
|
boolean step3Done = entity.getPackingState() != null;
|
||||||
|
|
||||||
|
if (step3Done) {
|
||||||
|
steps.add(
|
||||||
|
ModelProgressStepDto.builder()
|
||||||
|
.step(3)
|
||||||
|
.status(entity.getPackingState())
|
||||||
|
.startTime(entity.getPackingStrtDttm())
|
||||||
|
.endTime(entity.getPackingEndDttm())
|
||||||
|
.isError(TrainStatusType.ERROR.getId().equals(entity.getPackingState()))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
return steps;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user