Task 4-1: Firebase Listener Health Monitoring
Phase: 4 Priority: Medium Module:
firebaselistenerDepends on: Không có Reference: docs/BountyHunter-Backend/details/feature-livestream/SPEC.md
Background
Firebase listeners trong firebaselistener module không có health check. Nếu listener crash hoặc disconnect, events không được process nhưng hệ thống không biết.
Tasks
DI Note:
FirebaseHealthCheckServicelà Spring@Servicevà dùng@Scheduled— cần đảm bảo@EnableSchedulingđã được khai báo trongfirebaselistenermodule (thường ở@SpringBootApplicationclass hoặc một@Configurationclass).FirebaseDatabase.getInstance()không cần inject — dùng static factory method của Firebase SDK. Logger dùng Lombok@Slf4jhoặcLoggerFactory.getLogger(...).
File mới: firebaselistener/service/FirebaseHealthCheckService.java
@Service
@Slf4j // Lombok; hoặc khai báo: private static final Logger log = LoggerFactory.getLogger(FirebaseHealthCheckService.class);
public class FirebaseHealthCheckService {
@Scheduled(fixedDelay = 60000) // Cân nhắc externalize: "${firebase.health.check-interval:60000}"
public void checkFirebaseConnection() {
try {
FirebaseDatabase db = FirebaseDatabase.getInstance(); // Static factory, không inject
db.getReference(".info/connected").addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
Boolean connected = snapshot.getValue(Boolean.class);
if (Boolean.TRUE.equals(connected)) {
log.debug("[FIREBASE_HEALTH] Connection OK");
} else {
log.error("[FIREBASE_HEALTH] Firebase reports disconnected!");
}
}
@Override
public void onCancelled(DatabaseError error) {
log.error("[FIREBASE_HEALTH] Health check cancelled: {}", error.getMessage());
}
}
);
} catch (Exception e) {
log.error("[FIREBASE_HEALTH] Firebase connection check failed", e);
}
}
}
- [ ] Verify
@EnableSchedulingtồn tại trongfirebaselistenermodule config - [ ] Cân nhắc externalize check interval:
${firebase.health.check-interval:60000}trongapplication-common.yaml - [ ] Thêm alert integration nếu có (PagerDuty, Slack webhook) khi
disconnectedđược detect
Verification / Acceptance Criteria
- [ ]
FirebaseHealthCheckService.javađược tạo và compile thành công - [ ]
@EnableSchedulingtồn tại trong module (application khởi động không lỗi scheduler) - [ ] Health check job chạy mỗi 60s (verify qua logs
[FIREBASE_HEALTH] Connection OK) - [ ] Khi Firebase thực sự disconnect (mock) → log
[FIREBASE_HEALTH] Firebase reports disconnected!xuất hiện - [ ] Health check failure không làm crash service — exception được catch và log
Files to Modify / Create
firebaselistener/src/main/java/com/figpop/firebaselistener/service/FirebaseHealthCheckService.java(new)