package com.snp.batch.global.dto; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; import java.util.List; import java.util.Map; /** * Job 실행 상세 정보 DTO * JobExecution + StepExecution 정보 포함 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class JobExecutionDetailDto { // Job Execution 기본 정보 private Long executionId; private String jobName; private String status; private LocalDateTime startTime; private LocalDateTime endTime; private String exitCode; private String exitMessage; // Job Parameters private Map jobParameters; // Job Instance 정보 private Long jobInstanceId; // 실행 통계 private Long duration; // 실행 시간 (ms) private Integer readCount; private Integer writeCount; private Integer skipCount; private Integer filterCount; // Step 실행 정보 private List stepExecutions; /** * Step 실행 정보 DTO */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public static class StepExecutionDto { private Long stepExecutionId; private String stepName; private String status; private LocalDateTime startTime; private LocalDateTime endTime; private Integer readCount; private Integer writeCount; private Integer commitCount; private Integer rollbackCount; private Integer readSkipCount; private Integer processSkipCount; private Integer writeSkipCount; private Integer filterCount; private String exitCode; private String exitMessage; private Long duration; // 실행 시간 (ms) private ApiCallInfo apiCallInfo; // API 호출 정보 - StepExecutionContext 기반 (옵셔널) private StepApiLogSummary apiLogSummary; // API 호출 로그 요약 - batch_api_log 기반 (옵셔널) } /** * API 호출 정보 DTO (StepExecutionContext 기반) */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public static class ApiCallInfo { private String apiUrl; // API URL private String method; // HTTP Method (GET, POST, etc.) private Map parameters; // API 파라미터 private Integer totalCalls; // 전체 API 호출 횟수 private Integer completedCalls; // 완료된 API 호출 횟수 private String lastCallTime; // 마지막 호출 시간 } /** * Step별 API 로그 집계 요약 (batch_api_log 테이블 기반) */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public static class StepApiLogSummary { private Long totalCalls; // 총 호출수 private Long successCount; // 성공(2xx) 수 private Long errorCount; // 에러(4xx/5xx) 수 private Double avgResponseMs; // 평균 응답시간 private Long maxResponseMs; // 최대 응답시간 private Long minResponseMs; // 최소 응답시간 private Long totalResponseMs; // 총 응답시간 private Long totalRecordCount; // 총 반환 건수 private List logs; // 개별 로그 목록 } /** * 개별 API 호출 로그 DTO (batch_api_log 1건) */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public static class ApiLogEntryDto { private Long logId; private String requestUri; private String httpMethod; private Integer statusCode; private Long responseTimeMs; private Long responseCount; private String errorMessage; private LocalDateTime createdAt; } }