Task 2-3: Metrics - Match Success Rate & Average Wait Time
Phase: 2 - Performance Priority: Medium Depends on: task-2-1 Reference: docs/BountyHunter-Backend/details/feature-matching-matchmaking/SPEC.md
Background
Không có visibility về tỷ lệ match thành công, thời gian chờ trung bình, hay số user đang trong queue. Cần để đánh giá UX và tune matchmaking algorithm.
Tasks
DI Note: -
MatchMakingForAllGameModeConfigcần injectMeterRegistry(Micrometer) — thêmprivate final MeterRegistry meterRegistry;và inject qua constructor (dùng@RequiredArgsConstructor). - Đảm bảospring-boot-starter-actuatorvàmicrometer-registry-prometheus(hoặc tương đương) có trongbatch/pom.xml. -UserMatchingServicetrongapplication-corecần expose methodgetQueueSize(String settingId, String prizeId)— kiểm tra nếu chưa có thì thêm.
File: batch/job/matchmaking/MatchMakingForAllGameModeConfig.java
-
[ ] Record số user trong queue mỗi scheduler tick:
// Inject: private final MeterRegistry meterRegistry; // Inject: private final UserMatchingService matchingService; (nếu chưa có) int queueSize = matchingService.getQueueSize(settingId, prizeId); meterRegistry.gauge("matching.queue.size", Tags.of("settingId", settingId, "prizeId", String.valueOf(prizeId)), queueSize); -
[ ] Record khi match thành công:
meterRegistry.counter("matching.success", "settingId", settingId ).increment(); -
[ ] Record wait time (thời gian từ
JOIN_QUEUEtới khi match):// matchingRecord.getJoinTime() phải là Instant hoặc có thể convert sang Instant long waitMs = Duration.between(matchingRecord.getJoinTime(), Instant.now()).toMillis(); meterRegistry.timer("matching.wait_time", "settingId", settingId ).record(waitMs, TimeUnit.MILLISECONDS); -
[ ] Kiểm tra
getJoinTime()tồn tại trênMatchingRecordentity — nếu chưa, thêm field và migration
Verification / Acceptance Criteria
- [ ] Metric
matching.queue.sizevới tagssettingIdvàprizeIdxuất hiện trong/actuator/metrics - [ ] Metric
matching.successtăng mỗi khi match được tạo thành công - [ ] Metric
matching.wait_timecó P50, P95, P99 histogram entries - [ ] Prometheus scrape
/actuator/prometheus→ metrics xuất hiện - [ ] Không gây performance regression: gauge/counter/timer overhead < 1ms per call
Files to Modify
batch/job/matchmaking/MatchMakingForAllGameModeConfig.javaapplication-core/service/matching/UserMatchingService.java