From c315d352ad355beb0f99a115f47983c68129bf2f Mon Sep 17 00:00:00 2001 From: Rinjae Date: Mon, 3 Aug 2026 17:06:50 +0900 Subject: [PATCH] =?UTF-8?q?-=20IncidentKind=20=EC=97=B4=EA=B1=B0=ED=98=95?= =?UTF-8?q?=20=EC=A7=80=EC=97=B0(DELAY)=20=EC=83=81=ED=83=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=A0=95=EB=B9=84=20-=20=EB=A0=88=ED=8F=AC=EC=A7=80?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95:=20=EC=9E=A5=EC=95=A0/=EC=A7=80=EC=97=B0=20=EB=B3=B5?= =?UTF-8?q?=EC=88=98=20=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90=20-=20=EC=A7=80=EC=97=B0=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=ED=83=90=EC=A7=80=20=EB=B0=8F=20=EB=B3=91?= =?UTF-8?q?=ED=95=A9=20=EC=8B=9C=20=EA=B8=B0=EC=A1=B4=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=ED=98=B8=ED=99=98=EC=84=B1=20=EC=9C=A0=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../incident/entity/IncidentKind.java | 35 ++++++++++++++++++- .../DjbApistatusIncidentRepository.java | 16 ++++++--- 2 files changed, 45 insertions(+), 6 deletions(-) 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);