Add platform and push token presence dimensions to account creation metrics
This commit is contained in:
parent
e160025cfc
commit
556eec649d
|
@ -157,7 +157,8 @@ public class RegistrationController {
|
||||||
registrationRequest.deviceActivationRequest().aciSignedPreKey(),
|
registrationRequest.deviceActivationRequest().aciSignedPreKey(),
|
||||||
registrationRequest.deviceActivationRequest().pniSignedPreKey(),
|
registrationRequest.deviceActivationRequest().pniSignedPreKey(),
|
||||||
registrationRequest.deviceActivationRequest().aciPqLastResortPreKey(),
|
registrationRequest.deviceActivationRequest().aciPqLastResortPreKey(),
|
||||||
registrationRequest.deviceActivationRequest().pniPqLastResortPreKey()));
|
registrationRequest.deviceActivationRequest().pniPqLastResortPreKey()),
|
||||||
|
userAgent);
|
||||||
|
|
||||||
Metrics.counter(ACCOUNT_CREATED_COUNTER_NAME, Tags.of(UserAgentTagUtil.getPlatformTag(userAgent),
|
Metrics.counter(ACCOUNT_CREATED_COUNTER_NAME, Tags.of(UserAgentTagUtil.getPlatformTag(userAgent),
|
||||||
Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number)),
|
Tag.of(COUNTRY_CODE_TAG_NAME, Util.getCountryCode(number)),
|
||||||
|
|
|
@ -15,6 +15,8 @@ import com.google.common.base.Preconditions;
|
||||||
import io.lettuce.core.RedisException;
|
import io.lettuce.core.RedisException;
|
||||||
import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands;
|
import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands;
|
||||||
import io.micrometer.core.instrument.Metrics;
|
import io.micrometer.core.instrument.Metrics;
|
||||||
|
import io.micrometer.core.instrument.Tag;
|
||||||
|
import io.micrometer.core.instrument.Tags;
|
||||||
import io.micrometer.core.instrument.Timer;
|
import io.micrometer.core.instrument.Timer;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UncheckedIOException;
|
import java.io.UncheckedIOException;
|
||||||
|
@ -52,6 +54,7 @@ import org.whispersystems.textsecuregcm.entities.ECSignedPreKey;
|
||||||
import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey;
|
import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey;
|
||||||
import org.whispersystems.textsecuregcm.identity.IdentityType;
|
import org.whispersystems.textsecuregcm.identity.IdentityType;
|
||||||
import org.whispersystems.textsecuregcm.identity.ServiceIdentifier;
|
import org.whispersystems.textsecuregcm.identity.ServiceIdentifier;
|
||||||
|
import org.whispersystems.textsecuregcm.metrics.UserAgentTagUtil;
|
||||||
import org.whispersystems.textsecuregcm.push.ClientPresenceManager;
|
import org.whispersystems.textsecuregcm.push.ClientPresenceManager;
|
||||||
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
||||||
import org.whispersystems.textsecuregcm.redis.RedisOperation;
|
import org.whispersystems.textsecuregcm.redis.RedisOperation;
|
||||||
|
@ -167,7 +170,8 @@ public class AccountsManager {
|
||||||
final List<AccountBadge> accountBadges,
|
final List<AccountBadge> accountBadges,
|
||||||
final IdentityKey aciIdentityKey,
|
final IdentityKey aciIdentityKey,
|
||||||
final IdentityKey pniIdentityKey,
|
final IdentityKey pniIdentityKey,
|
||||||
final DeviceSpec primaryDeviceSpec) throws InterruptedException {
|
final DeviceSpec primaryDeviceSpec,
|
||||||
|
@Nullable final String userAgent) throws InterruptedException {
|
||||||
|
|
||||||
final Account account = new Account();
|
final Account account = new Account();
|
||||||
|
|
||||||
|
@ -251,7 +255,11 @@ public class AccountsManager {
|
||||||
|
|
||||||
redisSet(account);
|
redisSet(account);
|
||||||
|
|
||||||
Metrics.counter(CREATE_COUNTER_NAME, "type", accountCreationType).increment();
|
Metrics.counter(CREATE_COUNTER_NAME, Tags.of(UserAgentTagUtil.getPlatformTag(userAgent),
|
||||||
|
Tag.of("type", accountCreationType),
|
||||||
|
Tag.of("hasPushToken", String.valueOf(
|
||||||
|
primaryDeviceSpec.apnRegistrationId().isPresent() || primaryDeviceSpec.gcmRegistrationId().isPresent()))))
|
||||||
|
.increment();
|
||||||
|
|
||||||
accountAttributes.recoveryPassword().ifPresent(registrationRecoveryPassword ->
|
accountAttributes.recoveryPassword().ifPresent(registrationRecoveryPassword ->
|
||||||
registrationRecoveryPasswordsManager.storeForCurrentNumber(account.getNumber(), registrationRecoveryPassword));
|
registrationRecoveryPasswordsManager.storeForCurrentNumber(account.getNumber(), registrationRecoveryPassword));
|
||||||
|
|
|
@ -170,7 +170,7 @@ class RegistrationControllerTest {
|
||||||
final Account account = mock(Account.class);
|
final Account account = mock(Account.class);
|
||||||
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(account);
|
.thenReturn(account);
|
||||||
|
|
||||||
final String json = requestJson("sessionId", new byte[0], true, registrationId.orElse(0), pniRegistrationId.orElse(0));
|
final String json = requestJson("sessionId", new byte[0], true, registrationId.orElse(0), pniRegistrationId.orElse(0));
|
||||||
|
@ -295,7 +295,7 @@ class RegistrationControllerTest {
|
||||||
final Account account = mock(Account.class);
|
final Account account = mock(Account.class);
|
||||||
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(account);
|
.thenReturn(account);
|
||||||
|
|
||||||
final Invocation.Builder request = resources.getJerseyTest()
|
final Invocation.Builder request = resources.getJerseyTest()
|
||||||
|
@ -331,7 +331,7 @@ class RegistrationControllerTest {
|
||||||
final Account account = mock(Account.class);
|
final Account account = mock(Account.class);
|
||||||
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(account);
|
.thenReturn(account);
|
||||||
|
|
||||||
final Invocation.Builder request = resources.getJerseyTest()
|
final Invocation.Builder request = resources.getJerseyTest()
|
||||||
|
@ -353,7 +353,7 @@ class RegistrationControllerTest {
|
||||||
final Account account = mock(Account.class);
|
final Account account = mock(Account.class);
|
||||||
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(account);
|
.thenReturn(account);
|
||||||
|
|
||||||
final Invocation.Builder request = resources.getJerseyTest()
|
final Invocation.Builder request = resources.getJerseyTest()
|
||||||
|
@ -397,7 +397,7 @@ class RegistrationControllerTest {
|
||||||
final Account createdAccount = mock(Account.class);
|
final Account createdAccount = mock(Account.class);
|
||||||
when(createdAccount.getPrimaryDevice()).thenReturn(mock(Device.class));
|
when(createdAccount.getPrimaryDevice()).thenReturn(mock(Device.class));
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(createdAccount);
|
.thenReturn(createdAccount);
|
||||||
|
|
||||||
expectedStatus = 200;
|
expectedStatus = 200;
|
||||||
|
@ -451,7 +451,7 @@ class RegistrationControllerTest {
|
||||||
final Account account = mock(Account.class);
|
final Account account = mock(Account.class);
|
||||||
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(account);
|
.thenReturn(account);
|
||||||
|
|
||||||
final Invocation.Builder request = resources.getJerseyTest()
|
final Invocation.Builder request = resources.getJerseyTest()
|
||||||
|
@ -475,7 +475,7 @@ class RegistrationControllerTest {
|
||||||
final Account account = mock(Account.class);
|
final Account account = mock(Account.class);
|
||||||
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
when(account.getPrimaryDevice()).thenReturn(mock(Device.class));
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(account);
|
.thenReturn(account);
|
||||||
|
|
||||||
final Invocation.Builder request = resources.getJerseyTest()
|
final Invocation.Builder request = resources.getJerseyTest()
|
||||||
|
@ -728,7 +728,7 @@ class RegistrationControllerTest {
|
||||||
when(a.getPrimaryDevice()).thenReturn(device);
|
when(a.getPrimaryDevice()).thenReturn(device);
|
||||||
});
|
});
|
||||||
|
|
||||||
when(accountsManager.create(any(), any(), any(), any(), any(), any()))
|
when(accountsManager.create(any(), any(), any(), any(), any(), any(), any()))
|
||||||
.thenReturn(account);
|
.thenReturn(account);
|
||||||
|
|
||||||
final Invocation.Builder request = resources.getJerseyTest()
|
final Invocation.Builder request = resources.getJerseyTest()
|
||||||
|
@ -746,7 +746,8 @@ class RegistrationControllerTest {
|
||||||
eq(Collections.emptyList()),
|
eq(Collections.emptyList()),
|
||||||
eq(expectedAciIdentityKey),
|
eq(expectedAciIdentityKey),
|
||||||
eq(expectedPniIdentityKey),
|
eq(expectedPniIdentityKey),
|
||||||
eq(expectedDeviceSpec));
|
eq(expectedDeviceSpec),
|
||||||
|
any());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean accountAttributesEqual(final AccountAttributes a, final AccountAttributes b) {
|
private static boolean accountAttributesEqual(final AccountAttributes a, final AccountAttributes b) {
|
||||||
|
|
|
@ -237,7 +237,8 @@ public class AccountCreationDeletionIntegrationTest {
|
||||||
aciSignedPreKey,
|
aciSignedPreKey,
|
||||||
pniSignedPreKey,
|
pniSignedPreKey,
|
||||||
aciPqLastResortPreKey,
|
aciPqLastResortPreKey,
|
||||||
pniPqLastResortPreKey));
|
pniPqLastResortPreKey),
|
||||||
|
null);
|
||||||
|
|
||||||
assertExpectedStoredAccount(account,
|
assertExpectedStoredAccount(account,
|
||||||
number,
|
number,
|
||||||
|
@ -315,7 +316,8 @@ public class AccountCreationDeletionIntegrationTest {
|
||||||
aciSignedPreKey,
|
aciSignedPreKey,
|
||||||
pniSignedPreKey,
|
pniSignedPreKey,
|
||||||
aciPqLastResortPreKey,
|
aciPqLastResortPreKey,
|
||||||
pniPqLastResortPreKey));
|
pniPqLastResortPreKey),
|
||||||
|
null);
|
||||||
|
|
||||||
existingAccountUuid = originalAccount.getUuid();
|
existingAccountUuid = originalAccount.getUuid();
|
||||||
}
|
}
|
||||||
|
@ -381,7 +383,8 @@ public class AccountCreationDeletionIntegrationTest {
|
||||||
aciSignedPreKey,
|
aciSignedPreKey,
|
||||||
pniSignedPreKey,
|
pniSignedPreKey,
|
||||||
aciPqLastResortPreKey,
|
aciPqLastResortPreKey,
|
||||||
pniPqLastResortPreKey));
|
pniPqLastResortPreKey),
|
||||||
|
null);
|
||||||
|
|
||||||
assertExpectedStoredAccount(reregisteredAccount,
|
assertExpectedStoredAccount(reregisteredAccount,
|
||||||
number,
|
number,
|
||||||
|
@ -464,7 +467,8 @@ public class AccountCreationDeletionIntegrationTest {
|
||||||
aciSignedPreKey,
|
aciSignedPreKey,
|
||||||
pniSignedPreKey,
|
pniSignedPreKey,
|
||||||
aciPqLastResortPreKey,
|
aciPqLastResortPreKey,
|
||||||
pniPqLastResortPreKey));
|
pniPqLastResortPreKey),
|
||||||
|
null);
|
||||||
|
|
||||||
clientPublicKeysManager.setPublicKey(account, Device.PRIMARY_ID, Curve.generateKeyPair().getPublicKey()).join();
|
clientPublicKeysManager.setPublicKey(account, Device.PRIMARY_ID, Curve.generateKeyPair().getPublicKey()).join();
|
||||||
|
|
||||||
|
|
|
@ -165,7 +165,8 @@ class AccountsManagerConcurrentModificationIntegrationTest {
|
||||||
KeysHelper.signedECPreKey(1, aciKeyPair),
|
KeysHelper.signedECPreKey(1, aciKeyPair),
|
||||||
KeysHelper.signedECPreKey(2, pniKeyPair),
|
KeysHelper.signedECPreKey(2, pniKeyPair),
|
||||||
KeysHelper.signedKEMPreKey(3, aciKeyPair),
|
KeysHelper.signedKEMPreKey(3, aciKeyPair),
|
||||||
KeysHelper.signedKEMPreKey(4, pniKeyPair))),
|
KeysHelper.signedKEMPreKey(4, pniKeyPair)),
|
||||||
|
null),
|
||||||
a -> {
|
a -> {
|
||||||
a.setUnidentifiedAccessKey(new byte[UnidentifiedAccessUtil.UNIDENTIFIED_ACCESS_KEY_LENGTH]);
|
a.setUnidentifiedAccessKey(new byte[UnidentifiedAccessUtil.UNIDENTIFIED_ACCESS_KEY_LENGTH]);
|
||||||
a.removeDevice(Device.PRIMARY_ID);
|
a.removeDevice(Device.PRIMARY_ID);
|
||||||
|
|
|
@ -1556,6 +1556,7 @@ class AccountsManagerTest {
|
||||||
KeysHelper.signedECPreKey(1, aciKeyPair),
|
KeysHelper.signedECPreKey(1, aciKeyPair),
|
||||||
KeysHelper.signedECPreKey(2, pniKeyPair),
|
KeysHelper.signedECPreKey(2, pniKeyPair),
|
||||||
KeysHelper.signedKEMPreKey(3, aciKeyPair),
|
KeysHelper.signedKEMPreKey(3, aciKeyPair),
|
||||||
KeysHelper.signedKEMPreKey(4, pniKeyPair)));
|
KeysHelper.signedKEMPreKey(4, pniKeyPair)),
|
||||||
|
null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,6 +210,7 @@ public class AccountsHelper {
|
||||||
KeysHelper.signedECPreKey(1, aciKeyPair),
|
KeysHelper.signedECPreKey(1, aciKeyPair),
|
||||||
KeysHelper.signedECPreKey(2, pniKeyPair),
|
KeysHelper.signedECPreKey(2, pniKeyPair),
|
||||||
KeysHelper.signedKEMPreKey(3, aciKeyPair),
|
KeysHelper.signedKEMPreKey(3, aciKeyPair),
|
||||||
KeysHelper.signedKEMPreKey(4, pniKeyPair)));
|
KeysHelper.signedKEMPreKey(4, pniKeyPair)),
|
||||||
|
null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue