SecurityMetersService.java

package jasper.management;

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class SecurityMetersService {

    public static final String INVALID_TOKENS_METER_NAME = "security.authentication.invalid-tokens";
    public static final String INVALID_TOKENS_METER_DESCRIPTION =
        "Indicates validation error count of the tokens presented by the clients.";
    public static final String INVALID_TOKENS_METER_BASE_UNIT = "errors";
    public static final String INVALID_TOKENS_METER_CAUSE_DIMENSION = "cause";

    private final Counter tokenInvalidAudienceCounter;
    private final Counter tokenInvalidSignatureCounter;
    private final Counter tokenExpiredCounter;
    private final Counter tokenUnsupportedCounter;
    private final Counter tokenMalformedCounter;
    private final Counter unverifiedEmailCounter;

    public SecurityMetersService(MeterRegistry registry) {
        tokenInvalidAudienceCounter = invalidTokensCounterForCauseBuilder("invalid-audience").register(registry);
        tokenInvalidSignatureCounter = invalidTokensCounterForCauseBuilder("invalid-signature").register(registry);
        tokenExpiredCounter = invalidTokensCounterForCauseBuilder("expired").register(registry);
        tokenUnsupportedCounter = invalidTokensCounterForCauseBuilder("unsupported").register(registry);
        tokenMalformedCounter = invalidTokensCounterForCauseBuilder("malformed").register(registry);
        unverifiedEmailCounter = invalidTokensCounterForCauseBuilder("email-not-verified").register(registry);
    }

    private Counter.Builder invalidTokensCounterForCauseBuilder(String cause) {
        return Counter
            .builder(INVALID_TOKENS_METER_NAME)
            .baseUnit(INVALID_TOKENS_METER_BASE_UNIT)
            .description(INVALID_TOKENS_METER_DESCRIPTION)
            .tag(INVALID_TOKENS_METER_CAUSE_DIMENSION, cause);
    }

    public void trackTokenInvalidAudience() {
        tokenInvalidAudienceCounter.increment();
    }

    public void trackTokenInvalidSignature() {
        tokenInvalidSignatureCounter.increment();
    }

    public void trackTokenExpired() {
        tokenExpiredCounter.increment();
    }

    public void trackTokenUnsupported() {
        tokenUnsupportedCounter.increment();
    }

    public void trackTokenMalformed() {
        tokenMalformedCounter.increment();
    }

    public void trackUnverifiedEmail() {
        unverifiedEmailCounter.increment();
    }
}