Task 2-2: Login Metrics per Provider
Phase: 2 - Observability Priority: Medium Module:
authenticationDepends on: Không có Reference:docs/BountyHunter-Backend/details/feature-authentication/SPEC.md
Background
Không có metrics về login rate theo từng provider, failed login count, session invalidation rate. Rất khó phát hiện anomaly (ví dụ: spike failed logins từ 1 provider).
Tasks
File: authentication/controllers/auth/AuthService.java
DI / Import note:
MeterRegistryđến từ Micrometer. Cần đảm bảo dependencyio.micrometer:micrometer-core(hoặcmicrometer-registry-prometheus) có trongpom.xml/build.gradlecủa moduleauthentication. Inject bằng@Autowiredhoặc constructor injection:Import:@Autowired private MeterRegistry meterRegistry;io.micrometer.core.instrument.MeterRegistry. BiếnloginTypephải là enum với method.name()— xác nhận kiểu dữ liệu củaloginTypetrong contextsignIn(). Biếnreason(trong session invalidation) cần được xác định làStringtrước khi dùng.
-
[ ] Inject
MeterRegistryvà record counter:@Autowired private MeterRegistry meterRegistry; // Trong signIn(): meterRegistry.counter("auth.login", "provider", loginType.name(), "status", "success" ).increment(); // Khi bị ban: meterRegistry.counter("auth.login", "provider", loginType.name(), "status", "banned" ).increment(); // Khi sai code: meterRegistry.counter("auth.login", "provider", loginType.name(), "status", "invalid_code" ).increment(); -
[ ] Record session invalidation count:
// Khi logout hoặc new device login: meterRegistry.counter("auth.session.invalidated", "reason", reason // "logout", "new_device" ).increment();
Verification / Acceptance Criteria
- [ ] Compile check:
AuthService.javacompile thành công —MeterRegistryđược inject, importio.micrometer.core.instrument.MeterRegistrytồn tại, dependency Micrometer có trong build file. - [ ] Login success counter: Thực hiện
sign-inthành công → metricauth.login{provider=<value>,status=success}được record và có thể truy vấn qua/actuator/metrics/auth.login. - [ ] Banned counter:
sign-invới user bị ban → metricauth.login{provider=<value>,status=banned}được increment. - [ ] Invalid code counter:
sign-invới code sai → metricauth.login{provider=<value>,status=invalid_code}được increment. - [ ] Session invalidation counter: Logout hoặc new device login → metric
auth.session.invalidated{reason=logout}hoặcauth.session.invalidated{reason=new_device}được increment. - [ ] No regression: Các flow auth khác không bị ảnh hưởng bởi việc inject
MeterRegistry.
Files to Modify
authentication/src/main/java/com/figpop/authentication/controllers/auth/AuthService.java