From 3bb4709563f9ca3493f5edb36847fd71a4634dc8 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Fri, 26 Aug 2022 11:18:41 -0400 Subject: [PATCH] Add CLDR region as a dimension --- .../controllers/AccountController.java | 56 +++++++++---------- .../textsecuregcm/util/Util.java | 5 +- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java index 6a68016cf..b0b714e30 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -128,6 +128,7 @@ public class AccountController { private static final String CHALLENGE_PRESENT_TAG_NAME = "present"; private static final String CHALLENGE_MATCH_TAG_NAME = "matches"; private static final String COUNTRY_CODE_TAG_NAME = "countryCode"; + private static final String REGION_TAG_NAME = "region"; private static final String VERIFICATION_TRANSPORT_TAG_NAME = "transport"; private static final String VERIFY_EXPERIMENT_TAG_NAME = "twilioVerify"; @@ -232,11 +233,11 @@ public class AccountController { if (requirement.isCaptchaRequired()) { captchaRequiredMeter.mark(); - final Tags tags = Tags.of( - UserAgentTagUtil.getPlatformTag(userAgent), - Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number))); - - Metrics.counter(CHALLENGE_ISSUED_COUNTER_NAME, tags).increment(); + Metrics.counter(CHALLENGE_ISSUED_COUNTER_NAME, Tags.of( + UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number)), + Tag.of(REGION_TAG_NAME, Util.getRegion(number)))) + .increment(); if (requirement.isAutoBlock() && shouldAutoBlock(sourceHost)) { logger.info("Auto-block: {}", sourceHost); @@ -323,15 +324,13 @@ public class AccountController { // TODO Remove this meter when external dependencies have been resolved metricRegistry.meter(name(AccountController.class, "create", Util.getCountryCode(number))).mark(); - { - final List tags = new ArrayList<>(); - tags.add(Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number))); - tags.add(Tag.of(VERIFICATION_TRANSPORT_TAG_NAME, transport)); - tags.add(UserAgentTagUtil.getPlatformTag(userAgent)); - tags.add(Tag.of(VERIFY_EXPERIMENT_TAG_NAME, String.valueOf(enrolledInVerifyExperiment))); - - Metrics.counter(ACCOUNT_CREATE_COUNTER_NAME, tags).increment(); - } + Metrics.counter(ACCOUNT_CREATE_COUNTER_NAME, Tags.of( + UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number)), + Tag.of(REGION_TAG_NAME, Util.getRegion(number)), + Tag.of(VERIFICATION_TRANSPORT_TAG_NAME, transport), + Tag.of(VERIFY_EXPERIMENT_TAG_NAME, String.valueOf(enrolledInVerifyExperiment)))) + .increment(); return Response.ok().build(); } @@ -382,16 +381,13 @@ public class AccountController { Account account = accounts.create(number, password, signalAgent, accountAttributes, existingAccount.map(Account::getBadges).orElseGet(ArrayList::new)); - { - metricRegistry.meter(name(AccountController.class, "verify", Util.getCountryCode(number))).mark(); + metricRegistry.meter(name(AccountController.class, "verify", Util.getCountryCode(number))).mark(); - final List tags = new ArrayList<>(); - tags.add(Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number))); - tags.add(UserAgentTagUtil.getPlatformTag(userAgent)); - tags.add(Tag.of(VERIFY_EXPERIMENT_TAG_NAME, String.valueOf(storedVerificationCode.get().getTwilioVerificationSid().isPresent()))); - - Metrics.counter(ACCOUNT_VERIFY_COUNTER_NAME, tags).increment(); - } + Metrics.counter(ACCOUNT_VERIFY_COUNTER_NAME, Tags.of(UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number)), + Tag.of(REGION_TAG_NAME, Util.getRegion(number)), + Tag.of(VERIFY_EXPERIMENT_TAG_NAME, String.valueOf(storedVerificationCode.get().getTwilioVerificationSid().isPresent())))) + .increment(); return new AccountIdentityResponse(account.getUuid(), account.getNumber(), @@ -781,13 +777,12 @@ public class AccountController { if (captchaToken.isPresent()) { boolean validToken = recaptchaClient.verify(captchaToken.get(), sourceHost); - { - final List tags = new ArrayList<>(); - tags.add(Tag.of("success", String.valueOf(validToken))); - tags.add(UserAgentTagUtil.getPlatformTag(userAgent)); - tags.add(Tag.of(COUNTRY_CODE_TAG_NAME, countryCode)); - Metrics.counter(CAPTCHA_ATTEMPT_COUNTER_NAME, tags).increment(); - } + Metrics.counter(CAPTCHA_ATTEMPT_COUNTER_NAME, Tags.of( + Tag.of("success", String.valueOf(validToken)), + UserAgentTagUtil.getPlatformTag(userAgent), + Tag.of(COUNTRY_CODE_TAG_NAME, countryCode), + Tag.of(REGION_TAG_NAME, region))) + .increment(); if (validToken) { return new CaptchaRequirement(false, false); @@ -799,6 +794,7 @@ public class AccountController { { final List tags = new ArrayList<>(); tags.add(Tag.of(COUNTRY_CODE_TAG_NAME, countryCode)); + tags.add(Tag.of(REGION_TAG_NAME, region)); try { if (pushChallenge.isPresent()) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/util/Util.java b/service/src/main/java/org/whispersystems/textsecuregcm/util/Util.java index 684aac88a..be3663e50 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/util/Util.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/util/Util.java @@ -8,6 +8,7 @@ import com.google.i18n.phonenumbers.NumberParseException; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; +import org.apache.commons.lang3.StringUtils; import java.time.Clock; import java.time.Duration; import java.time.temporal.ChronoField; @@ -21,6 +22,7 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Nonnull; +import javax.annotation.Nullable; public class Util { @@ -79,10 +81,11 @@ public class Util { else return "0"; } + @Nullable public static String getRegion(final String number) { try { final PhoneNumber phoneNumber = PHONE_NUMBER_UTIL.parse(number, null); - return PHONE_NUMBER_UTIL.getRegionCodeForNumber(phoneNumber); + return StringUtils.defaultIfBlank(PHONE_NUMBER_UTIL.getRegionCodeForNumber(phoneNumber), "ZZ"); } catch (final NumberParseException e) { return "ZZ"; }