Add metrics for recaptcha reasons
This commit is contained in:
parent
c14621a09f
commit
a4a666bb80
|
@ -14,6 +14,7 @@ import com.google.cloud.recaptchaenterprise.v1.RecaptchaEnterpriseServiceSetting
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.recaptchaenterprise.v1.Assessment;
|
import com.google.recaptchaenterprise.v1.Assessment;
|
||||||
import com.google.recaptchaenterprise.v1.Event;
|
import com.google.recaptchaenterprise.v1.Event;
|
||||||
|
import com.google.recaptchaenterprise.v1.RiskAnalysis;
|
||||||
import io.micrometer.core.instrument.Metrics;
|
import io.micrometer.core.instrument.Metrics;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -33,6 +34,9 @@ public class RecaptchaClient {
|
||||||
static final String V2_PREFIX = "signal-recaptcha-v2" + RecaptchaClient.SEPARATOR;
|
static final String V2_PREFIX = "signal-recaptcha-v2" + RecaptchaClient.SEPARATOR;
|
||||||
private static final String ASSESSMENTS_COUNTER_NAME = name(RecaptchaClient.class, "assessments");
|
private static final String ASSESSMENTS_COUNTER_NAME = name(RecaptchaClient.class, "assessments");
|
||||||
|
|
||||||
|
private static final String INVALID_REASON_COUNTER_NAME = name(RecaptchaClient.class, "invalidReason");
|
||||||
|
private static final String ASSESSMENT_REASON_COUNTER_NAME = name(RecaptchaClient.class, "assessmentReason");
|
||||||
|
|
||||||
private final String projectPath;
|
private final String projectPath;
|
||||||
private final RecaptchaEnterpriseServiceClient client;
|
private final RecaptchaEnterpriseServiceClient client;
|
||||||
private final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager;
|
private final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager;
|
||||||
|
@ -89,6 +93,14 @@ public class RecaptchaClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* recaptcha enterprise scores are from [0.0, 1.0] in increments of .1
|
||||||
|
* map to [0, 100] for easier interpretation
|
||||||
|
*/
|
||||||
|
private static String scoreString(final float score) {
|
||||||
|
return Integer.toString((int) score * 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public AssessmentResult verify(final String input, final String ip) {
|
public AssessmentResult verify(final String input, final String ip) {
|
||||||
final String[] parts = parseInputToken(input);
|
final String[] parts = parseInputToken(input);
|
||||||
|
@ -114,13 +126,23 @@ public class RecaptchaClient {
|
||||||
"valid", String.valueOf(assessment.getTokenProperties().getValid()))
|
"valid", String.valueOf(assessment.getTokenProperties().getValid()))
|
||||||
.increment();
|
.increment();
|
||||||
|
|
||||||
|
|
||||||
if (assessment.getTokenProperties().getValid()) {
|
if (assessment.getTokenProperties().getValid()) {
|
||||||
|
for (RiskAnalysis.ClassificationReason reason : assessment.getRiskAnalysis().getReasonsList()) {
|
||||||
|
Metrics.counter(ASSESSMENT_REASON_COUNTER_NAME,
|
||||||
|
"action", String.valueOf(expectedAction),
|
||||||
|
"score", scoreString(assessment.getRiskAnalysis().getScore()),
|
||||||
|
"reason", reason.name());
|
||||||
|
}
|
||||||
final float score = assessment.getRiskAnalysis().getScore();
|
final float score = assessment.getRiskAnalysis().getScore();
|
||||||
return new AssessmentResult(
|
return new AssessmentResult(
|
||||||
score >=
|
score >=
|
||||||
dynamicConfigurationManager.getConfiguration().getCaptchaConfiguration().getScoreFloor().floatValue(),
|
dynamicConfigurationManager.getConfiguration().getCaptchaConfiguration().getScoreFloor().floatValue(),
|
||||||
Integer.toString((int) score));
|
scoreString(score));
|
||||||
} else {
|
} else {
|
||||||
|
Metrics.counter(INVALID_REASON_COUNTER_NAME,
|
||||||
|
"action", String.valueOf(expectedAction),
|
||||||
|
"reason", assessment.getTokenProperties().getInvalidReason().name());
|
||||||
return AssessmentResult.invalid();
|
return AssessmentResult.invalid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue