Skip to content

Commit e3b6a55

Browse files
committed
Add tag to track request counts by same source address
1 parent 088a845 commit e3b6a55

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

captchaservice-backend/src/main/java/de/muenchen/captchaservice/service/captcha/CaptchaService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public CaptchaService(final CaptchaProperties captchaProperties, final Difficult
3838
public Altcha.Challenge createChallenge(final String siteKey, final SourceAddress sourceAddress) {
3939
final long difficulty = difficultyService.getDifficultyForSourceAddress(siteKey, sourceAddress);
4040
difficultyService.registerRequest(siteKey, sourceAddress);
41-
metricsService.recordChallengeRequest(siteKey, difficulty);
41+
metricsService.recordChallengeRequest(siteKey, difficulty, sourceAddress);
4242
final Altcha.ChallengeOptions options = new Altcha.ChallengeOptions();
4343
options.algorithm = Altcha.Algorithm.SHA256;
4444
options.hmacKey = captchaProperties.hmacKey();

captchaservice-backend/src/main/java/de/muenchen/captchaservice/service/captcha/MetricsService.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package de.muenchen.captchaservice.service.captcha;
22

33
import de.muenchen.captchaservice.data.SourceAddress;
4+
import de.muenchen.captchaservice.repository.CaptchaRequestRepository;
45
import de.muenchen.captchaservice.repository.InvalidatedPayloadRepository;
56
import de.muenchen.captchaservice.service.difficulty.DifficultyService;
67
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -20,30 +21,37 @@ public class MetricsService {
2021
private final MeterRegistry meterRegistry;
2122
private final DifficultyService difficultyService;
2223
private final InvalidatedPayloadRepository invalidatedPayloadRepository;
24+
private final CaptchaRequestRepository captchaRequestRepository;
2325

2426
@SuppressFBWarnings(value = { "EI_EXPOSE_REP2" }, justification = "Dependency Injection")
2527
public MetricsService(MeterRegistry meterRegistry, DifficultyService difficultyService,
26-
InvalidatedPayloadRepository invalidatedPayloadRepository) {
28+
InvalidatedPayloadRepository invalidatedPayloadRepository, CaptchaRequestRepository captchaRequestRepository) {
2729
this.meterRegistry = meterRegistry;
2830
this.difficultyService = difficultyService;
2931
this.invalidatedPayloadRepository = invalidatedPayloadRepository;
32+
this.captchaRequestRepository = captchaRequestRepository;
3033
}
3134

32-
public void recordChallengeRequest(String siteKey, long difficulty) {
35+
public void recordChallengeRequest(String siteKey, long difficulty, SourceAddress sourceAddress) {
36+
long sameSourceAddressRequestCount = getSameSourceAddressRequestCount(sourceAddress);
37+
3338
Counter.builder("captcha.challenge.requests")
3439
.tag("site_key", siteKey)
3540
.tag("difficulty", String.valueOf(difficulty))
41+
.tag("same_source_address_request_count", String.valueOf(sameSourceAddressRequestCount))
3642
.description("Counter for captcha challenge requests")
3743
.register(meterRegistry)
3844
.increment();
3945
}
4046

4147
public void recordVerifySuccess(String siteKey, SourceAddress sourceAddress) {
4248
final long difficulty = difficultyService.getDifficultyForSourceAddress(siteKey, sourceAddress);
49+
long sameSourceAddressRequestCount = getSameSourceAddressRequestCount(sourceAddress);
4350

4451
Counter.builder("captcha.verify.success")
4552
.tag("site_key", siteKey)
4653
.tag("difficulty", String.valueOf(difficulty))
54+
.tag("same_source_address_request_count", String.valueOf(sameSourceAddressRequestCount))
4755
.description("Counter for captcha verify success requests")
4856
.register(meterRegistry)
4957
.increment();
@@ -56,16 +64,22 @@ public void recordClientSolveTime(String siteKey, SourceAddress sourceAddress, l
5664
}
5765

5866
final long difficulty = difficultyService.getDifficultyForSourceAddress(siteKey, sourceAddress);
67+
long sameSourceAddressRequestCount = getSameSourceAddressRequestCount(sourceAddress);
5968

6069
DistributionSummary.builder("captcha.client.solve.time")
6170
.tag("site_key", siteKey)
6271
.tag("difficulty", String.valueOf(difficulty))
72+
.tag("same_source_address_request_count", String.valueOf(sameSourceAddressRequestCount))
6373
.description("Summary of the time taken by clients to solve captcha challenges")
6474
.baseUnit("milliseconds")
6575
.register(meterRegistry)
6676
.record(solveTime);
6777
}
6878

79+
private long getSameSourceAddressRequestCount(SourceAddress sourceAddress) {
80+
return captchaRequestRepository.countBySourceAddressHashIgnoreCaseAndExpiresAtGreaterThanEqual(sourceAddress.getHash(), Instant.now());
81+
}
82+
6983
public void initializeInvalidatedPayloadsGauge() {
7084
Gauge.builder("captcha.invalidated.payloads",
7185
() -> invalidatedPayloadRepository.countByExpiresAtGreaterThan(Instant.now()))

0 commit comments

Comments
 (0)