chore(observability): Add account type for signup observability metrics.

This commit is contained in:
dkadrikj 2023-06-27 16:36:04 +02:00 committed by Dino Kadrikj
parent fe05b534b4
commit c3fb9362d2
7 changed files with 118 additions and 26 deletions

View File

@ -77,7 +77,7 @@ class PerformLoginTest {
tested.invoke(
username = "test-username",
password = "encrypted-test-password",
loginMetricData = { SignupLoginTotal(it.toHttpApiStatus()) }
loginMetricData = { SignupLoginTotal(it.toHttpApiStatus(), SignupLoginTotal.Type.internal) }
)
// THEN

View File

@ -53,6 +53,7 @@ import me.proton.core.observability.domain.metrics.SignupLoginTotal
import me.proton.core.observability.domain.metrics.SignupUnlockUserTotalV1
import me.proton.core.observability.domain.metrics.SignupUserCheckTotalV1
import me.proton.core.observability.domain.metrics.common.toHttpApiStatus
import me.proton.core.observability.domain.metrics.toObservabilityAccountType
import me.proton.core.payment.domain.entity.ProtonPaymentToken
import me.proton.core.payment.presentation.entity.BillingResult
import me.proton.core.plan.presentation.entity.PlanInput
@ -212,7 +213,12 @@ class SignupActivity : AuthActivity<ActivitySignupBinding>(ActivitySignupBinding
state.password,
signUpViewModel.currentAccountType,
billingDetails,
loginMetricData = { SignupLoginTotal(it.toHttpApiStatus()) },
loginMetricData = {
SignupLoginTotal(
it.toHttpApiStatus(),
signUpViewModel.currentAccountType.toObservabilityAccountType()
)
},
unlockUserMetricData = { SignupUnlockUserTotalV1(it.toUnlockUserStatus()) },
userCheckMetricData = { SignupUserCheckTotalV1(it.toUserCheckStatus()) }
)

View File

@ -195,7 +195,7 @@ internal class SignupViewModel @Inject constructor(
username = username, password = encryptedPassword,
recoveryEmail = recoveryEmail, recoveryPhone = recoveryPhone,
referrer = null, type = currentAccountType.createUserType(), domain = domain,
metricData = { SignupAccountCreationTotal(it) }
metricData = { SignupAccountCreationTotal(it, SignupAccountCreationTotal.Type.proton) }
)
emit(State.CreateUserSuccess(result.id, username, encryptedPassword))
}.catchWhen(Throwable::userAlreadyExists) {
@ -208,7 +208,7 @@ internal class SignupViewModel @Inject constructor(
email = externalEmail,
password = encryptedPassword,
referrer = null,
metricData = { SignupAccountCreationTotal(it) }
metricData = { SignupAccountCreationTotal(it, SignupAccountCreationTotal.Type.external) }
)
emit(State.CreateUserSuccess(userId.id, externalEmail, encryptedPassword))
}.catchWhen(Throwable::userAlreadyExists) {

View File

@ -1904,8 +1904,8 @@ public final class me/proton/core/observability/domain/metrics/SessionRefreshTok
public final class me/proton/core/observability/domain/metrics/SignupAccountCreationTotal : me/proton/core/observability/domain/metrics/ObservabilityData {
public static final field Companion Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Companion;
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;JLkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Ljava/lang/Object;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;)V
public fun <init> (Ljava/lang/Object;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;J)V
public synthetic fun <init> (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;JILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;
@ -1954,12 +1954,14 @@ public final class me/proton/core/observability/domain/metrics/SignupAccountCrea
public final class me/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData {
public static final field Companion Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData$Companion;
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;)V
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;)V
public final fun component1 ()Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;
public final fun copy (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;)Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;
public static synthetic fun copy$default (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;ILjava/lang/Object;)Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;
public final fun component2 ()Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;
public final fun copy (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;)Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;
public static synthetic fun copy$default (Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;ILjava/lang/Object;)Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$LabelsData;
public fun equals (Ljava/lang/Object;)Z
public final fun getAccountType ()Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;
public final fun getStatus ()Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$ApiStatus;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
@ -1982,6 +1984,13 @@ public final class me/proton/core/observability/domain/metrics/SignupAccountCrea
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class me/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type : java/lang/Enum {
public static final field external Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;
public static final field proton Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;
public static fun valueOf (Ljava/lang/String;)Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;
public static fun values ()[Lme/proton/core/observability/domain/metrics/SignupAccountCreationTotal$Type;
}
public final class me/proton/core/observability/domain/metrics/SignupEmailAvailabilityTotal : me/proton/core/observability/domain/metrics/ObservabilityData {
public static final field Companion Lme/proton/core/observability/domain/metrics/SignupEmailAvailabilityTotal$Companion;
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/common/HttpStatusLabels;JLkotlinx/serialization/internal/SerializationConstructorMarker;)V
@ -2054,17 +2063,17 @@ public final class me/proton/core/observability/domain/metrics/SignupFetchDomain
public final class me/proton/core/observability/domain/metrics/SignupLoginTotal : me/proton/core/observability/domain/metrics/ObservabilityData {
public static final field Companion Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Companion;
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/common/HttpStatusLabels;JLkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/common/HttpApiStatus;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/common/HttpStatusLabels;J)V
public synthetic fun <init> (Lme/proton/core/observability/domain/metrics/common/HttpStatusLabels;JILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lme/proton/core/observability/domain/metrics/common/HttpStatusLabels;
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;JLkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;J)V
public synthetic fun <init> (Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;JILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/common/HttpApiStatus;Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;)V
public final fun component1 ()Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;
public final fun component2 ()J
public final fun copy (Lme/proton/core/observability/domain/metrics/common/HttpStatusLabels;J)Lme/proton/core/observability/domain/metrics/SignupLoginTotal;
public static synthetic fun copy$default (Lme/proton/core/observability/domain/metrics/SignupLoginTotal;Lme/proton/core/observability/domain/metrics/common/HttpStatusLabels;JILjava/lang/Object;)Lme/proton/core/observability/domain/metrics/SignupLoginTotal;
public final fun copy (Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;J)Lme/proton/core/observability/domain/metrics/SignupLoginTotal;
public static synthetic fun copy$default (Lme/proton/core/observability/domain/metrics/SignupLoginTotal;Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;JILjava/lang/Object;)Lme/proton/core/observability/domain/metrics/SignupLoginTotal;
public fun equals (Ljava/lang/Object;)Z
public synthetic fun getLabels ()Ljava/lang/Object;
public fun getLabels ()Lme/proton/core/observability/domain/metrics/common/HttpStatusLabels;
public fun getLabels ()Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;
public fun getValue ()J
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
@ -2087,6 +2096,50 @@ public final class me/proton/core/observability/domain/metrics/SignupLoginTotal$
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class me/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData {
public static final field Companion Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData$Companion;
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/common/HttpApiStatus;Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V
public fun <init> (Lme/proton/core/observability/domain/metrics/common/HttpApiStatus;Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;)V
public final fun component1 ()Lme/proton/core/observability/domain/metrics/common/HttpApiStatus;
public final fun component2 ()Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
public final fun copy (Lme/proton/core/observability/domain/metrics/common/HttpApiStatus;Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;)Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;
public static synthetic fun copy$default (Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;Lme/proton/core/observability/domain/metrics/common/HttpApiStatus;Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;ILjava/lang/Object;)Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;
public fun equals (Ljava/lang/Object;)Z
public final fun getAccountType ()Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
public final fun getStatus ()Lme/proton/core/observability/domain/metrics/common/HttpApiStatus;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
public static final fun write$Self (Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V
}
public final class me/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData$$serializer;
public static final synthetic field descriptor Lkotlinx/serialization/descriptors/SerialDescriptor;
public fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lme/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class me/proton/core/observability/domain/metrics/SignupLoginTotal$LabelsData$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class me/proton/core/observability/domain/metrics/SignupLoginTotal$Type : java/lang/Enum {
public static final field external Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
public static final field internal Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
public static final field username Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
public static fun valueOf (Ljava/lang/String;)Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
public static fun values ()[Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
}
public final class me/proton/core/observability/domain/metrics/SignupLoginTotalKt {
public static final fun toObservabilityAccountType (Lme/proton/core/account/domain/entity/AccountType;)Lme/proton/core/observability/domain/metrics/SignupLoginTotal$Type;
}
public final class me/proton/core/observability/domain/metrics/SignupScreenViewTotalV1 : me/proton/core/observability/domain/metrics/ObservabilityData {
public static final field Companion Lme/proton/core/observability/domain/metrics/SignupScreenViewTotalV1$Companion;
public synthetic fun <init> (ILme/proton/core/observability/domain/metrics/SignupScreenViewTotalV1$LabelsData;JLkotlinx/serialization/internal/SerializationConstructorMarker;)V

View File

@ -51,6 +51,7 @@ dependencies {
implementation(`serialization-json`)
implementation(project(Module.kotlinUtil))
implementation(project(Module.networkDomain))
implementation(project(Module.accountDomain))
testImplementation(`coroutines-test`)
testImplementation(junit)
testImplementation(`kotlin-test`)

View File

@ -31,21 +31,30 @@ import me.proton.core.observability.domain.metrics.common.toHttpApiStatus
@Serializable
@Schema(description = "Account creation.")
@SchemaId("https://proton.me/android_core_signup_accountCreation_total_v2.schema.json")
@SchemaId("https://proton.me/android_core_signup_accountCreation_total_v3.schema.json")
public data class SignupAccountCreationTotal(
override val Labels: LabelsData,
@Required override val Value: Long = 1,
) : ObservabilityData() {
public constructor(status: ApiStatus) : this(LabelsData(status))
public constructor(status: ApiStatus, accountType: Type) : this(LabelsData(status, accountType))
public constructor(result: Result<*>) : this(result.toApiStatus())
public constructor(result: Result<*>, accountType: Type) : this(result.toApiStatus(), accountType)
@Serializable
public data class LabelsData constructor(
@get:Schema(required = true)
val status: ApiStatus
val status: ApiStatus,
@get:Schema(required = true)
val accountType: Type
)
@Suppress("EnumEntryName", "EnumNaming")
public enum class Type {
proton,
external
}
@Suppress("EnumNaming", "EnumEntryName")
public enum class ApiStatus {
http2xx,

View File

@ -21,16 +21,39 @@ package me.proton.core.observability.domain.metrics
import io.swagger.v3.oas.annotations.media.Schema
import kotlinx.serialization.Required
import kotlinx.serialization.Serializable
import me.proton.core.account.domain.entity.AccountType
import me.proton.core.observability.domain.entity.SchemaId
import me.proton.core.observability.domain.metrics.common.HttpApiStatus
import me.proton.core.observability.domain.metrics.common.HttpStatusLabels
@Serializable
@Schema(description = "Logging in just after the signup.")
@SchemaId("https://proton.me/android_core_signup_login_total_v2.schema.json")
@SchemaId("https://proton.me/android_core_signup_login_total_v3.schema.json")
public data class SignupLoginTotal(
override val Labels: HttpStatusLabels,
override val Labels: LabelsData,
@Required override val Value: Long = 1
) : ObservabilityData() {
public constructor(status: HttpApiStatus) : this(HttpStatusLabels(status))
public constructor(status: HttpApiStatus, type: Type) : this(LabelsData(status, type))
@Serializable
public data class LabelsData constructor(
@get:Schema(required = true)
val status: HttpApiStatus,
@get:Schema(required = true)
val accountType: Type
)
@Suppress("EnumEntryName", "EnumNaming")
public enum class Type {
internal,
external,
username
}
}
public fun AccountType.toObservabilityAccountType(): SignupLoginTotal.Type = when (this) {
AccountType.Internal -> SignupLoginTotal.Type.internal
AccountType.Username -> SignupLoginTotal.Type.username
AccountType.External -> SignupLoginTotal.Type.external
}