diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java index 7880108..af821cd 100644 --- a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/entity/IncidentKind.java @@ -1,6 +1,39 @@ package com.eactive.apim.portal.djb.apistatus.incident.entity; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; + +/** + * 이슈 종류. + * + *

{@link #INCIDENT} 와 {@link #DELAY} 는 둘 다 서비스 저하이며 {@code STATE} 를 가진다. + * {@link #MAINTENANCE} 만 계획된 작업이라 {@code STATE} 가 없다 (ADR-F15).

+ * + *

{@link #DELAY} 는 자동 탐지(응답시간 임계 초과) 전용이며 공지(PTL_NOTICE)를 만들지 않는다. + * 관리자 검수 화면이 없고 복구 이벤트({@code DELAY_END}/{@code ERROR_END})로 자동 종결된다.

+ */ public enum IncidentKind { + + /** 장애 */ INCIDENT, - MAINTENANCE + + /** 지연 - 자동 탐지 전용, 연결 공지 없음 */ + DELAY, + + /** 점검 */ + MAINTENANCE; + + /** + * 서비스 저하로 취급하는 종류 (장애 + 지연). + * + *

가동률 차감, 복구 처리, 진행 중 이슈 조회의 대상이다. 점검은 계획된 작업이라 제외된다.

+ */ + public static final Collection DEGRADING = + Collections.unmodifiableList(Arrays.asList(INCIDENT, DELAY)); + + /** {@link #DEGRADING} 여부 */ + public boolean isDegrading() { + return this != MAINTENANCE; + } } diff --git a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java index 92796c2..8b4faa1 100644 --- a/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java +++ b/src/main/java/com/eactive/apim/portal/djb/apistatus/incident/repository/DjbApistatusIncidentRepository.java @@ -23,23 +23,29 @@ public interface DjbApistatusIncidentRepository Optional findByInterfaceId(String interfaceId); - List findByKindAndStateNotInOrderByStartedAtDesc( - IncidentKind kind, Collection excludedStates); + /** + * 미종결 이슈. 장애와 지연을 함께 봐야 하므로 종류는 복수로 받는다 + * ({@link IncidentKind#DEGRADING}). + */ + List findByKindInAndStateNotInOrderByStartedAtDesc( + Collection kinds, Collection excludedStates); /** - * 특정 API 들에 영향을 주는 미종결 장애. 자동 탐지 시 기존 장애 병합 대상 판별용. + * 특정 API 들에 영향을 주는 미종결 이슈. 자동 탐지 시 기존 이슈 병합 대상 판별용. * *

{@code detectedBy} 로 등록 주체를 한정한다. 자동 탐지는 자동 등록 건에만 영향 API 를 덧붙여야 * 관리자가 직접 작성한 장애 공지의 내용이 바뀌지 않는다.

+ * + *

지연(DELAY)이 장애(INCIDENT)로 번지는 경우가 있어 종류는 복수로 받는다.

*/ @Query("SELECT DISTINCT i FROM DjbApistatusIncident i, DjbApistatusIncidentApi a" + " WHERE a.incidentId = i.incidentId" - + " AND i.kind = :kind" + + " AND i.kind IN :kinds" + " AND i.detectedBy = :detectedBy" + " AND i.state NOT IN :excludedStates" + " AND a.apiId IN :apiIds" + " ORDER BY i.startedAt DESC") - List findOpenByApiIds(@Param("kind") IncidentKind kind, + List findOpenByApiIds(@Param("kinds") Collection kinds, @Param("detectedBy") String detectedBy, @Param("excludedStates") Collection excludedStates, @Param("apiIds") Collection apiIds);