From b708aa7688fcc90f657b8d2f067cc5b4eb82af3d Mon Sep 17 00:00:00 2001 From: pksup Date: Tue, 13 Jan 2026 13:51:16 +0900 Subject: [PATCH] =?UTF-8?q?=ED=86=B5=EA=B3=84=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistics/ApiStatsMonitorImpl.java | 4 +-- .../collector/HourStatsAggregator.java | 30 +++++++++++-------- .../collector/MinuteStatsAggregator.java | 30 +++++++++++-------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/eactive/eai/custom/statistics/ApiStatsMonitorImpl.java b/src/main/java/com/eactive/eai/custom/statistics/ApiStatsMonitorImpl.java index bf4064a..b024bd6 100644 --- a/src/main/java/com/eactive/eai/custom/statistics/ApiStatsMonitorImpl.java +++ b/src/main/java/com/eactive/eai/custom/statistics/ApiStatsMonitorImpl.java @@ -25,9 +25,9 @@ public class ApiStatsMonitorImpl implements StatisticsMonitor { @Override public void recordStatistics(EAIMessage requestEaiMessage) { try { - // 로그 시퀀스 400 또는 900만 처리 + // 로그 시퀀스 100, 400, 900만 처리 int logSequence = requestEaiMessage.getLogPssSno(); - if (logSequence != 400 && logSequence != 900) { + if (logSequence != 100 && logSequence != 400 && logSequence != 900) { return; } diff --git a/src/main/java/com/eactive/eai/custom/statistics/collector/HourStatsAggregator.java b/src/main/java/com/eactive/eai/custom/statistics/collector/HourStatsAggregator.java index 0feb141..b3be7b2 100644 --- a/src/main/java/com/eactive/eai/custom/statistics/collector/HourStatsAggregator.java +++ b/src/main/java/com/eactive/eai/custom/statistics/collector/HourStatsAggregator.java @@ -22,7 +22,6 @@ public class HourStatsAggregator { // 건수 메트릭 private final AtomicLong totalCnt = new AtomicLong(0); - private final AtomicLong successCnt = new AtomicLong(0); private final AtomicLong timeoutCnt = new AtomicLong(0); private final AtomicLong systemErrCnt = new AtomicLong(0); private final AtomicLong bizErrCnt = new AtomicLong(0); @@ -62,13 +61,13 @@ public class HourStatsAggregator { public void recordEvent(TransactionEvent event) { int logSeq = event.getLogSequence(); - // 로그 시퀀스 400: 일반 통계 집계 - if (logSeq == 400) { + // 로그 시퀀스 100: 총 건수만 증가 (첫 호출) + if (logSeq == 100) { totalCnt.incrementAndGet(); - - if (event.isSuccess()) { - successCnt.incrementAndGet(); - } else { + } + // 로그 시퀀스 400: 응답시간 및 에러 타입 기록 + else if (logSeq == 400) { + if (!event.isSuccess()) { switch (event.getErrorType()) { case TIMEOUT: timeoutCnt.incrementAndGet(); @@ -185,11 +184,17 @@ public class HourStatsAggregator { stats.setOutboundAdapter(key.getOutboundAdapter()); // 건수 메트릭 - stats.setTotalCnt(totalCnt.get()); - stats.setSuccessCnt(successCnt.get()); - stats.setTimeoutCnt(timeoutCnt.get()); - stats.setSystemErrCnt(systemErrCnt.get()); - stats.setBizErrCnt(bizErrCnt.get()); + long total = totalCnt.get(); + long timeout = timeoutCnt.get(); + long systemErr = systemErrCnt.get(); + long bizErr = bizErrCnt.get(); + long success = total - (timeout + systemErr + bizErr); + + stats.setTotalCnt(total); + stats.setSuccessCnt(success); + stats.setTimeoutCnt(timeout); + stats.setSystemErrCnt(systemErr); + stats.setBizErrCnt(bizErr); // 로그 시퀀스 900 구간 에러 카운트 stats.setSeq900TimeoutCnt(seq900TimeoutCnt.get()); @@ -197,7 +202,6 @@ public class HourStatsAggregator { stats.setSeq900BizErrCnt(seq900BizErrCnt.get()); // 응답시간 메트릭 - long total = totalCnt.get(); if (total > 0) { // 평균 double avg = (double) totalRespTime.get() / total; diff --git a/src/main/java/com/eactive/eai/custom/statistics/collector/MinuteStatsAggregator.java b/src/main/java/com/eactive/eai/custom/statistics/collector/MinuteStatsAggregator.java index 794a19b..5bb94cf 100644 --- a/src/main/java/com/eactive/eai/custom/statistics/collector/MinuteStatsAggregator.java +++ b/src/main/java/com/eactive/eai/custom/statistics/collector/MinuteStatsAggregator.java @@ -22,7 +22,6 @@ public class MinuteStatsAggregator { // 건수 메트릭 private final AtomicLong totalCnt = new AtomicLong(0); - private final AtomicLong successCnt = new AtomicLong(0); private final AtomicLong timeoutCnt = new AtomicLong(0); private final AtomicLong systemErrCnt = new AtomicLong(0); private final AtomicLong bizErrCnt = new AtomicLong(0); @@ -62,13 +61,13 @@ public class MinuteStatsAggregator { public void recordEvent(TransactionEvent event) { int logSeq = event.getLogSequence(); - // 로그 시퀀스 400: 일반 통계 집계 - if (logSeq == 400) { + // 로그 시퀀스 100: 총 건수만 증가 (첫 호출) + if (logSeq == 100) { totalCnt.incrementAndGet(); - - if (event.isSuccess()) { - successCnt.incrementAndGet(); - } else { + } + // 로그 시퀀스 400: 응답시간 및 에러 타입 기록 + else if (logSeq == 400) { + if (!event.isSuccess()) { switch (event.getErrorType()) { case TIMEOUT: timeoutCnt.incrementAndGet(); @@ -185,11 +184,17 @@ public class MinuteStatsAggregator { stats.setOutboundAdapter(key.getOutboundAdapter()); // 건수 메트릭 - stats.setTotalCnt(totalCnt.get()); - stats.setSuccessCnt(successCnt.get()); - stats.setTimeoutCnt(timeoutCnt.get()); - stats.setSystemErrCnt(systemErrCnt.get()); - stats.setBizErrCnt(bizErrCnt.get()); + long total = totalCnt.get(); + long timeout = timeoutCnt.get(); + long systemErr = systemErrCnt.get(); + long bizErr = bizErrCnt.get(); + long success = total - (timeout + systemErr + bizErr); + + stats.setTotalCnt(total); + stats.setSuccessCnt(success); + stats.setTimeoutCnt(timeout); + stats.setSystemErrCnt(systemErr); + stats.setBizErrCnt(bizErr); // 로그 시퀀스 900 구간 에러 카운트 stats.setSeq900TimeoutCnt(seq900TimeoutCnt.get()); @@ -197,7 +202,6 @@ public class MinuteStatsAggregator { stats.setSeq900BizErrCnt(seq900BizErrCnt.get()); // 응답시간 메트릭 - long total = totalCnt.get(); if (total > 0) { // 평균 double avg = (double) totalRespTime.get() / total;