Skip to content

Commit c72c30e

Browse files
feat: sse 관련 지표 Bean 주입
1 parent 41c4c45 commit c72c30e

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

thefirsttake/src/main/java/com/thefirsttake/app/chat/service/SSEConnectionService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ public SseEmitter initializeConnection(String connectionId, SseEmitter emitter,
6767
// 연결 메트릭 증가
6868
sseConnectionCounter.increment();
6969

70+
// 활성 연결 수 증가
71+
com.thefirsttake.app.config.MetricsConfig.getGlobalActiveConnections().incrementAndGet();
72+
7073
log.info("SSE 연결 초기화 완료: connectionId={}, roomId={}", connectionId, finalRoomId);
7174

7275
} catch (IOException e) {
@@ -201,6 +204,9 @@ public void completeConnection(String connectionId, SseEmitter emitter, AtomicBo
201204

202205
// 연결 해제 메트릭 증가
203206
sseDisconnectionCounter.increment();
207+
208+
// 활성 연결 수 감소
209+
com.thefirsttake.app.config.MetricsConfig.getGlobalActiveConnections().decrementAndGet();
204210
} else {
205211
log.warn("SSE 연결이 이미 종료됨: connectionId={}", connectionId);
206212
}

thefirsttake/src/main/java/com/thefirsttake/app/chat/sse/SseInitializer.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ public Result initialize(SseTrackingHooks hooks) {
4949
Timer.Sample totalResponseTimer = Timer.start();
5050

5151
sseConnectionCounter.increment();
52+
53+
// 활성 연결 수 증가
54+
com.thefirsttake.app.config.MetricsConfig.getGlobalActiveConnections().incrementAndGet();
55+
5256
Timer.Sample connectionTimer = Timer.start();
5357

5458
CompletableFuture.delayedExecutor(120, TimeUnit.SECONDS).execute(() -> {
@@ -59,6 +63,8 @@ public Result initialize(SseTrackingHooks hooks) {
5963
connectionTimer.stop(sseConnectionDurationTimer);
6064
totalResponseTimer.stop(sseApiTotalResponseTimer);
6165
sseDisconnectionCounter.increment();
66+
// 활성 연결 수 감소
67+
com.thefirsttake.app.config.MetricsConfig.getGlobalActiveConnections().decrementAndGet();
6268
hooks.onEnd(connectionCreationTimer, connectionLifetimeTimer, "force_timeout", connectionId);
6369
}
6470
try { emitter.complete(); } catch (Exception e) { log.warn("강제 종료 중 오류: {}", e.getMessage()); }
@@ -71,6 +77,8 @@ public Result initialize(SseTrackingHooks hooks) {
7177
connectionTimer.stop(sseConnectionDurationTimer);
7278
totalResponseTimer.stop(sseApiTotalResponseTimer);
7379
sseDisconnectionCounter.increment();
80+
// 활성 연결 수 감소
81+
com.thefirsttake.app.config.MetricsConfig.getGlobalActiveConnections().decrementAndGet();
7482
hooks.onEnd(connectionCreationTimer, connectionLifetimeTimer, "completion", connectionId);
7583
}
7684
});
@@ -80,6 +88,8 @@ public Result initialize(SseTrackingHooks hooks) {
8088
connectionTimer.stop(sseConnectionDurationTimer);
8189
totalResponseTimer.stop(sseApiTotalResponseTimer);
8290
sseDisconnectionCounter.increment();
91+
// 활성 연결 수 감소
92+
com.thefirsttake.app.config.MetricsConfig.getGlobalActiveConnections().decrementAndGet();
8393
hooks.onEnd(connectionCreationTimer, connectionLifetimeTimer, "timeout", connectionId);
8494
}
8595
});
@@ -89,6 +99,8 @@ public Result initialize(SseTrackingHooks hooks) {
8999
connectionTimer.stop(sseConnectionDurationTimer);
90100
totalResponseTimer.stop(sseApiTotalResponseTimer);
91101
sseDisconnectionCounter.increment();
102+
// 활성 연결 수 감소
103+
com.thefirsttake.app.config.MetricsConfig.getGlobalActiveConnections().decrementAndGet();
92104
hooks.onEnd(connectionCreationTimer, connectionLifetimeTimer, "error", connectionId);
93105
}
94106
});

thefirsttake/src/main/java/com/thefirsttake/app/config/MetricsConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,15 @@ public Counter llmApiRetryCounter(MeterRegistry meterRegistry) {
174174
// ===== SSE API 전체 응답 시간 메트릭 =====
175175

176176
@Bean
177+
@Qualifier("sseApiTotalResponseTimer")
177178
public Timer sseApiTotalResponseTimer(MeterRegistry meterRegistry) {
178179
return Timer.builder("sse_api_total_response_duration")
179180
.description("Total SSE API response time from start to complete")
180181
.register(meterRegistry);
181182
}
182183

183184
@Bean
185+
@Qualifier("sseApiTotalCounter")
184186
public Counter sseApiTotalCounter(MeterRegistry meterRegistry) {
185187
return Counter.builder("sse_api_total_requests")
186188
.description("Total number of SSE API requests")

0 commit comments

Comments
 (0)