From e524ff965dea279bee1d11cbdfa8c7f301d34e80 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Thu, 10 Dec 2020 16:26:38 -0500 Subject: [PATCH] Add a utility method for getting client platform tags from UA strings for metrics. --- .../metrics/UserAgentTagUtil.java | 12 +++++++++ .../metrics/UserAgentTagUtilTest.java | 25 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtil.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtil.java index 62369185f..a0cf321b1 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtil.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtil.java @@ -64,6 +64,18 @@ public class UserAgentTagUtil { } } + public static Tag getPlatformTag(final String userAgentString) { + String platform; + + try { + platform = UserAgentUtil.parseUserAgentString(userAgentString).getPlatform().name().toLowerCase(); + } catch (final UnrecognizedUserAgentException e) { + platform = "unrecognized"; + } + + return Tag.of(PLATFORM_TAG, platform); + } + private static boolean allowVersion(final ClientPlatform platform, final Semver version) { final Pair platformAndVersion = new Pair<>(platform, version); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtilTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtilTest.java index 490e1b4b6..8a90a5880 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtilTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/metrics/UserAgentTagUtilTest.java @@ -66,4 +66,29 @@ public class UserAgentTagUtilTest { assertTrue(tags.contains(Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android"))); assertTrue(tags.contains(Tag.of(UserAgentTagUtil.VERSION_TAG, "4.0.0"))); } + + @Test + @Parameters(method = "argumentsForTestGetPlatformTag") + public void testGetPlatformTag(final String userAgent, final Tag expectedTag) { + assertEquals(expectedTag, UserAgentTagUtil.getPlatformTag(userAgent)); + } + + private Object argumentsForTestGetPlatformTag() { + return new Object[] { + new Object[] { "This is obviously not a reasonable User-Agent string.", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "unrecognized") }, + new Object[] { null, Tag.of(UserAgentTagUtil.PLATFORM_TAG, "unrecognized") }, + new Object[] { "Signal-Android 4.53.7 (Android 8.1)", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android") }, + new Object[] { "Signal Desktop 1.2.3", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "desktop") }, + new Object[] { "Signal/3.9.0 (iPhone; iOS 12.2; Scale/3.00)", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "ios") }, + new Object[] { "Signal-Android 1.2.3 (Android 8.1)", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android") }, + new Object[] { "Signal Desktop 3.9.0", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "desktop") }, + new Object[] { "Signal/4.53.7 (iPhone; iOS 12.2; Scale/3.00)", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "ios") }, + new Object[] { "Signal-Android 4.68.3 (Android 9)", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android") }, + new Object[] { "Signal-Android 1.2.3 (Android 4.3)", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android") }, + new Object[] { "Signal-Android 4.68.3.0-bobsbootlegclient", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "android") }, + new Object[] { "Signal Desktop 1.22.45-foo-0", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "desktop") }, + new Object[] { "Signal Desktop 1.34.5-beta.1-fakeclientemporium", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "desktop") }, + new Object[] { "Signal Desktop 1.32.0-beta.3", Tag.of(UserAgentTagUtil.PLATFORM_TAG, "desktop") }, + }; + } }