diff --git a/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java b/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java index bac9dd9..a897496 100644 --- a/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/apistatus/ApiStatusDetectionService.java @@ -49,6 +49,12 @@ import com.eactive.eai.rms.data.entity.onl.djb.apistatus.ApiNameRow; * 검수·게시해야 개발자포탈에 노출되며, {@code PUBLISH}면 탐지 즉시 노출된다. * {@code OFF} 여도 이미 열려있는 장애의 복구 처리(ERROR_END/DELAY_END)는 계속 동작한다.
* + *개발자포탈 미게시 인터페이스 포함 여부는 {@code djb.apistatus.auto-incident-include-unpublished} + * (기본 {@code false}) 로 정한다. 기본값이면 게시 API 만 이슈에 담고, + * 게시 API 가 하나도 없는 탐지는 기록하지 않는다. {@code true}면 미게시 인터페이스도 + * 포함해 건수로 집계된다. 복구 처리는 이 설정과 무관하게 + * 이미 이슈에 담긴 API 를 대상으로 동작한다.
+ * *점검(CONTROL_*) 은 관리자가 공지사항으로 등록한 점검 일정이 원천이다 * ({@code ApiStatusRepository.findApiStatusEvents} 가 INCIDENT 기간을 읽어 CTRL_YN 을 판정). * 따라서 CONTROL 이벤트를 다시 기록하면 순환이 되므로 기록하지 않는다.
@@ -96,6 +102,12 @@ public class ApiStatusDetectionService { /** 오탐이 그대로 고객에게 노출되지 않도록 기본은 검수(DRAFT) */ private static final String DEFAULT_AUTO_INCIDENT_MODE = MODE_DRAFT; + /** 자동 탐지 이슈에 개발자포탈 미게시 인터페이스도 포함할지 여부 - true / false */ + public static final String KEY_INCLUDE_UNPUBLISHED = "djb.apistatus.auto-incident-include-unpublished"; + + /** 포탈 게시 API 장애만 고객 공지 대상이 되도록 기본은 제외(false) */ + private static final String DEFAULT_INCLUDE_UNPUBLISHED = "false"; + @Autowired private DjbApistatusIncidentRepository incidentRepository; @@ -208,6 +220,19 @@ public class ApiStatusDetectionService { } boolean autoPublish = MODE_PUBLISH.equals(mode); + // 미게시 인터페이스 제외 설정(false)이면 게시 API 만 남기고, 하나도 없으면 기록하지 않는다 + if (!resolveIncludeUnpublished()) { + ListPTL_PROPERTY({@code Portal} / {@code djb.apistatus.auto-incident-include-unpublished}) 를 읽는다. + * 최초 접근 시 기본값으로 row 가 자동 생성된다. 기본 {@code false} - 게시 API 만 이슈에 담는다. + * 명시적으로 {@code true}/{@code Y} 를 설정한 경우에만 미게시 인터페이스를 포함하며, + * 알 수 없는 값·조회 실패는 기본값 쪽(false)으로 떨어뜨린다.
+ */ + private boolean resolveIncludeUnpublished() { + try { + String value = portalPropertyService.getOrCreateProperty( + PROPERTY_GROUP, KEY_INCLUDE_UNPUBLISHED, DEFAULT_INCLUDE_UNPUBLISHED, + "API 상태 자동 탐지 이슈에 포탈 미게시 인터페이스 포함 여부(true/false)"); + String normalized = StringUtils.trimToEmpty(value); + return "true".equalsIgnoreCase(normalized) || "Y".equalsIgnoreCase(normalized); + } catch (Exception e) { + log.warn("미게시 인터페이스 포함 여부 조회 실패 - 기본값 {} 적용", DEFAULT_INCLUDE_UNPUBLISHED, e); + return false; + } + } + private void mergeIntoOpenIncident(DjbApistatusIncident incident, String event, IncidentKind kind, List판정 조건 두 개가 서로 다른 스키마에 있어 조회를 나눈다 - API 그룹 편성은 AGWAPP, * 스펙 존재는 EMSAPP(PTL_API_SPEC_INFO). 한 쿼리로 조인하면 tenant=APIGW 커넥션이 * EMSAPP 를 못 봐서 ORA-00942 가 난다.
*/ + private Set