Skip to content

Commit e9f8252

Browse files
authored
Merge pull request #364 from Kernel360/fix/#363-alarm
fix: alarm 문제 수정
2 parents e091c78 + 8026bc6 commit e9f8252

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

monicar-control-center/src/main/java/org/controlcenter/alarm/application/AlarmService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ public class AlarmService {
3636
private final VehicleRepository vehicleRepository;
3737
private final ManagerRepository managerRepository;
3838

39+
public Map<String, SseEmitter> getSseEmitters() {
40+
return sseEmitters;
41+
}
42+
3943
/**
4044
* 특정 userId가 SSE 구독을 시작할 때 호출.
4145
*/

monicar-control-center/src/main/java/org/controlcenter/alarm/infrastructure/jpa/AlarmJpaRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.controlcenter.alarm.infrastructure.jpa;
22

3-
import java.util.List;
43
import java.util.Optional;
54

65
import org.controlcenter.alarm.domain.AlarmInfo;
@@ -35,6 +34,7 @@ Page<AlarmInfo> findAlarmListByStatus(@Param("status") AlarmStatus status,
3534
SUM(CASE WHEN a.status = 'COMPLETED' THEN 1 ELSE 0 END)
3635
)
3736
FROM alarm a
37+
WHERE a.isChecked = FALSE
3838
""")
3939
AlarmStatusStats findStatusCounts();
4040
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.controlcenter.common.scheduler;
2+
3+
import java.io.IOException;
4+
5+
import lombok.RequiredArgsConstructor;
6+
7+
import org.controlcenter.alarm.application.AlarmService;
8+
import org.springframework.scheduling.annotation.Scheduled;
9+
import org.springframework.stereotype.Component;
10+
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
11+
12+
@Component
13+
@RequiredArgsConstructor
14+
public class SseHeartbeatScheduler {
15+
private final AlarmService alarmService;
16+
17+
@Scheduled(fixedRate = 15000)
18+
public void sendHeartbeat() {
19+
var emitters = alarmService.getSseEmitters();
20+
emitters.forEach((userId, emitter) -> {
21+
try {
22+
emitter.send(SseEmitter.event()
23+
.name("ping")
24+
.data("ping"));
25+
} catch (IOException e) {
26+
emitter.complete();
27+
emitters.remove(userId);
28+
}
29+
});
30+
}
31+
}
32+

0 commit comments

Comments
 (0)