Skip to content

Task 2-2: Login Metrics per Provider

Phase: 2 - Observability Priority: Medium Module: authentication Depends 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 dependency io.micrometer:micrometer-core (hoặc micrometer-registry-prometheus) có trong pom.xml/build.gradle của module authentication. Inject bằng @Autowired hoặc constructor injection:

@Autowired
private MeterRegistry meterRegistry;
Import: io.micrometer.core.instrument.MeterRegistry. Biến loginType phải là enum với method .name() — xác nhận kiểu dữ liệu của loginType trong context signIn(). Biến reason (trong session invalidation) cần được xác định là String trước khi dùng.

  • [ ] Inject MeterRegistry và 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.java compile thành công — MeterRegistry được inject, import io.micrometer.core.instrument.MeterRegistry tồn tại, dependency Micrometer có trong build file.
  • [ ] Login success counter: Thực hiện sign-in thành công → metric auth.login{provider=<value>,status=success} được record và có thể truy vấn qua /actuator/metrics/auth.login.
  • [ ] Banned counter: sign-in với user bị ban → metric auth.login{provider=<value>,status=banned} được increment.
  • [ ] Invalid code counter: sign-in với code sai → metric auth.login{provider=<value>,status=invalid_code} được increment.
  • [ ] Session invalidation counter: Logout hoặc new device login → metric auth.session.invalidated{reason=logout} hoặc auth.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