TP-33493 | added clickstream events for PL Data Upload funnel (#6960)
* TP-33493 | added clickstream events for PL Data Upload funnel * TP-33493 | clickstream changes * TP-33493 | import fix * TP-33493 | import fixes * TP-33493 | spotlessApply * TP-33493 | moved common code to same inner class
This commit is contained in:
committed by
GitHub Enterprise
parent
3a8c66382d
commit
2712dee81d
@@ -5481,6 +5481,58 @@ class NaviAnalytics private constructor() {
|
||||
}
|
||||
}
|
||||
|
||||
inner class ZippingProcess {
|
||||
fun onZippingSuccess(type: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_zipping_success",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("type", type)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onZippingFailure(type: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_zipping_failure",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("type", type)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onZippingUploadInitiated(type: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_zipping_upload_initiated",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("type", type)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onZippingUploadSuccess(type: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_zipping_upload_success",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("type", type)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onZippingUploadFailure(type: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_zipping_upload_failure",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("type", type)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
inner class UserData {
|
||||
|
||||
fun onUserDataSent() {
|
||||
@@ -5501,6 +5553,20 @@ class NaviAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
fun deviceDetailsSuccess() {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"post_device_details_success",
|
||||
mapOf(Pair("atTimeStamp", System.currentTimeMillis().toString()))
|
||||
)
|
||||
}
|
||||
|
||||
fun deviceDetailsFailure() {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"post_device_details_failure",
|
||||
mapOf(Pair("atTimeStamp", System.currentTimeMillis().toString()))
|
||||
)
|
||||
}
|
||||
|
||||
fun postPermissionStartTime() {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"post_permission_start_time",
|
||||
@@ -5522,6 +5588,26 @@ class NaviAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
fun postGettingPreSignedUrlInitiated(retryCount: Int = 0) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"PL_GET_PRE_SIGNED_URL_CALL_INITIATED",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("retryCount", retryCount.toString())
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun postGettingPreSignedUrlSuccess(retryCount: Int) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"PL_GET_PRE_SIGNED_URL_CALL_SUCCESS",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("retryCount", retryCount.toString())
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun postErrorInGettingPreSignedUrl(error: Any?) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"PL_ERROR_IN_GETTING_PRESIGNED_URL",
|
||||
@@ -5561,6 +5647,48 @@ class NaviAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
fun numberOfUrlsReceivedAndNumberOfDataUploaded(urlsReceived: Int, uploadTypeCount: Int) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"PL_PRE_SIGNED_URLS_RECEIVED",
|
||||
mapOf(
|
||||
Pair("url_received_count", urlsReceived.toString()),
|
||||
Pair("upload_type_count", uploadTypeCount.toString())
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onDataUploadAcknowledgementInitiated(ingestionList: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_data_upload_acknowledgement_initiated",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("ingestion_list", ingestionList)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onDataUploadAcknowledgementSuccess(ingestionList: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_data_upload_acknowledgement_success",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("ingestion_list", ingestionList)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onDataUploadAcknowledgementFailure(ingestionList: String) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"on_data_upload_acknowledgement_failure",
|
||||
mapOf(
|
||||
Pair("atTimeStamp", System.currentTimeMillis().toString()),
|
||||
Pair("ingestion_list", ingestionList)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
fun onUserDataUploadToCdsStatus(
|
||||
isSmsUploadFailed: Boolean,
|
||||
isContactsUploadFailed: Boolean,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2019-2022 by Navi Technologies Limited
|
||||
* * Copyright © 2019-2023 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
@@ -171,11 +171,13 @@ class UserDataViewModel(application: Application) : AndroidViewModel(application
|
||||
val response = repository.updateFcmToken(deviceDetail)
|
||||
analyticsTracker.deviceDetailsEndTime()
|
||||
if (response.error == null && response.errors.isNullOrEmpty()) {
|
||||
analyticsTracker.deviceDetailsSuccess()
|
||||
PreferenceManager.setLongPreference(
|
||||
FCM_TOKEN_LAST_UPDATED_TIME,
|
||||
System.currentTimeMillis()
|
||||
)
|
||||
} else {
|
||||
analyticsTracker.deviceDetailsFailure()
|
||||
PreferenceManager.setLongPreference(FCM_TOKEN_LAST_UPDATED_TIME, 0L)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2019 by Navi Technologies Private Limited
|
||||
* * Copyright © 2019-2023 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
@@ -18,6 +18,7 @@ import com.navi.common.model.UserDataWrapper
|
||||
import com.navi.common.useruploaddata.model.IngestionStatus
|
||||
import com.navi.common.useruploaddata.model.IngestionStatusType
|
||||
import com.navi.common.useruploaddata.model.IngestionType
|
||||
import com.navi.common.utils.Constants.CONTACTS
|
||||
import com.navi.common.utils.Constants.UNDERSCORE
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.common.utils.gzipCompress
|
||||
@@ -37,6 +38,7 @@ import retrofit2.Response
|
||||
object ContactsUtil {
|
||||
private val analyticsTrackerContactUpload: NaviAnalytics.ContactUpload =
|
||||
NaviAnalytics.naviAnalytics.ContactUpload()
|
||||
private val zippingAnalyticsTracker: NaviAnalytics.ZippingProcess = NaviAnalytics.naviAnalytics.ZippingProcess()
|
||||
|
||||
suspend fun readContacts(applicationContext: Context) {
|
||||
try {
|
||||
@@ -93,8 +95,8 @@ object ContactsUtil {
|
||||
pageNumber: Int
|
||||
) {
|
||||
analyticsTrackerContactUpload.contactUploadStartTime(pageNumber)
|
||||
analyticsTrackerContactUpload.onContactUploadStart(totalPages, pageNumber, contacts.size)
|
||||
val request = UserDataWrapper(totalPages, pageNumber, contacts)
|
||||
analyticsTrackerContactUpload.onContactUploadStart(totalPages, pageNumber, contacts.size)
|
||||
val response = UserDataRepository().postContacts(request)
|
||||
analyticsTrackerContactUpload.contactUploadEndTime(pageNumber)
|
||||
response.error?.let {
|
||||
@@ -132,10 +134,12 @@ object ContactsUtil {
|
||||
}
|
||||
}
|
||||
val contactData = ContactData(contactList)
|
||||
zippingAnalyticsTracker.onZippingSuccess(CONTACTS)
|
||||
postZippedContacts(contactData, url, referenceId, pageNumber = pageNumber)
|
||||
|
||||
} catch (e: Exception) {
|
||||
e.log()
|
||||
zippingAnalyticsTracker.onZippingFailure(CONTACTS)
|
||||
IngestionStatus(
|
||||
referenceId = referenceId,
|
||||
ingestionType = IngestionType.CONTACTS,
|
||||
@@ -152,6 +156,7 @@ object ContactsUtil {
|
||||
): IngestionStatus {
|
||||
analyticsTrackerContactUpload.contactUploadStartTime(pageNumber)
|
||||
val gson = Gson().toJson(contactData)
|
||||
zippingAnalyticsTracker.onZippingUploadInitiated(CONTACTS)
|
||||
val response = postZippedData(gson, url)
|
||||
analyticsTrackerContactUpload.contactUploadEndTime(pageNumber)
|
||||
val ingestionStatus = IngestionStatus(
|
||||
@@ -160,9 +165,11 @@ object ContactsUtil {
|
||||
)
|
||||
if (response.isSuccessful) {
|
||||
analyticsTrackerContactUpload.onContactUploadSuccess()
|
||||
zippingAnalyticsTracker.onZippingUploadSuccess(CONTACTS)
|
||||
ingestionStatus.status = IngestionStatusType.SUCCESS
|
||||
} else {
|
||||
analyticsTrackerContactUpload.onContactUploadFailureEvent()
|
||||
zippingAnalyticsTracker.onZippingUploadFailure(CONTACTS)
|
||||
ingestionStatus.status = IngestionStatusType.FAILED
|
||||
}
|
||||
return ingestionStatus
|
||||
@@ -212,4 +219,4 @@ object ContactsUtil {
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import android.util.Base64
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.navi.base.utils.isNotNull
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.model.UploadDataAsyncResponse
|
||||
import com.navi.common.model.UserDataWrapper
|
||||
@@ -25,8 +26,10 @@ import com.navi.common.useruploaddata.model.*
|
||||
import com.navi.common.useruploaddata.utils.UploadDataPollingUtil
|
||||
import com.navi.common.useruploaddata.utils.getSmsDataProjection
|
||||
import com.navi.common.useruploaddata.utils.getUserSmsFromCursorData
|
||||
import com.navi.common.utils.Constants.SMS
|
||||
import com.navi.common.utils.Constants.UNDERSCORE
|
||||
import com.navi.common.utils.gzipCompress
|
||||
import com.navi.common.utils.isValidResponse
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.insurance.util.FirebaseRemoteConfigUtils
|
||||
import com.naviapp.BuildConfig
|
||||
@@ -51,6 +54,7 @@ object SmsUtil {
|
||||
private val analyticsTrackerSmsUpload: NaviAnalytics.SmsUpload =
|
||||
NaviAnalytics.naviAnalytics.SmsUpload()
|
||||
private val analyticsTracker: NaviAnalytics.UserData = NaviAnalytics.naviAnalytics.UserData()
|
||||
private val zippingAnalyticsTracker: NaviAnalytics.ZippingProcess = NaviAnalytics.naviAnalytics.ZippingProcess()
|
||||
private const val MAX_RETRY_PRE_SIGNED_API = 4
|
||||
private const val TIME_TO_UPLOAD_WHEN_FAILED = 0L
|
||||
private const val TIME_TO_UPLOAD_WHEN_EXCEPTION = -1L
|
||||
@@ -265,6 +269,7 @@ object SmsUtil {
|
||||
callback: (timeTakenToUpload: Long, ingestionStatusBody: IngestionStatusBody) -> Unit
|
||||
) {
|
||||
val startTimeInMillis = System.currentTimeMillis()
|
||||
analyticsTracker.postGettingPreSignedUrlInitiated()
|
||||
var response = UserDataRepository().getPreSignedUrlList(ingestionType)
|
||||
var retryCountForPreSignedUrl = 1
|
||||
while ((response.error.isNotNull() || !response.errors.isNullOrEmpty()) && retryCountForPreSignedUrl <= MAX_RETRY_PRE_SIGNED_API) {
|
||||
@@ -279,8 +284,12 @@ object SmsUtil {
|
||||
return
|
||||
}
|
||||
retryCountForPreSignedUrl++
|
||||
analyticsTracker.postGettingPreSignedUrlInitiated(retryCountForPreSignedUrl-1)
|
||||
response = UserDataRepository().getPreSignedUrlList(ingestionType)
|
||||
}
|
||||
if(response.isValidResponse()) {
|
||||
analyticsTracker.postGettingPreSignedUrlSuccess(retryCountForPreSignedUrl)
|
||||
}
|
||||
|
||||
var ingestionList: List<IngestionStatus?>? = null
|
||||
|
||||
@@ -289,12 +298,16 @@ object SmsUtil {
|
||||
ingestionList = (taskLists.awaitAll().filterNotNull())
|
||||
var uploadedResponseData: UploadDataAsyncResponse? = null
|
||||
if (ingestionList.isNotEmpty()) {
|
||||
analyticsTracker.onDataUploadAcknowledgementInitiated(ingestionList.toString())
|
||||
val uploadedResponse =
|
||||
UserDataRepository().postIngestionStatusAsync(IngestionStatusBody(ingestionList))
|
||||
if (uploadedResponse.error.isNotNull() || uploadedResponse.errors.isNotNull()) {
|
||||
analyticsTracker.onErrorUploadingSms(
|
||||
error = uploadedResponse.error ?: uploadedResponse.errors
|
||||
)
|
||||
analyticsTracker.onDataUploadAcknowledgementFailure(ingestionList.toString())
|
||||
} else {
|
||||
analyticsTracker.onDataUploadAcknowledgementSuccess(ingestionList.toString())
|
||||
}
|
||||
uploadedResponseData = uploadedResponse.data
|
||||
}
|
||||
@@ -328,10 +341,16 @@ object SmsUtil {
|
||||
analyticsTracker.onExceptionWhileUploadingData()
|
||||
ingestionList?.filterNotNull()?.let {
|
||||
if (it.isNotEmpty()) {
|
||||
analyticsTracker.onDataUploadAcknowledgementInitiated(ingestionList.toString())
|
||||
val uploadedResponse =
|
||||
UserDataRepository().postIngestionStatusAsync(
|
||||
IngestionStatusBody(it)
|
||||
)
|
||||
if(uploadedResponse.error.isNotNull() || uploadedResponse.errors.isNotNull()) {
|
||||
analyticsTracker.onDataUploadAcknowledgementFailure(ingestionList.toString())
|
||||
} else {
|
||||
analyticsTracker.onDataUploadAcknowledgementSuccess(ingestionList.toString())
|
||||
}
|
||||
val userDataUploadCallbackResponse = UserDataUploadCallbackResponse(
|
||||
IngestionStatusBody(it),
|
||||
uploadedResponse.data
|
||||
@@ -382,6 +401,7 @@ object SmsUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
analyticsTracker.numberOfUrlsReceivedAndNumberOfDataUploaded(preSignedUrlResponse?.preSignedUrlList?.size.orZero(), taskLists.size)
|
||||
return taskLists
|
||||
}
|
||||
|
||||
@@ -438,9 +458,11 @@ object SmsUtil {
|
||||
analyticsTracker.onFoundEmptySmsList()
|
||||
}
|
||||
}
|
||||
zippingAnalyticsTracker.onZippingSuccess(SMS)
|
||||
postZippedMessages(smsList, url, referenceId)
|
||||
} catch (e: Exception) {
|
||||
e.log()
|
||||
zippingAnalyticsTracker.onZippingFailure(SMS)
|
||||
IngestionStatus(
|
||||
referenceId = referenceId,
|
||||
ingestionType = IngestionType.SMS,
|
||||
@@ -475,9 +497,11 @@ object SmsUtil {
|
||||
)
|
||||
)
|
||||
}
|
||||
zippingAnalyticsTracker.onZippingSuccess(IngestionType.APPS.name)
|
||||
postZippedApps(installedApps.toMutableList(), url, referenceId)
|
||||
} catch (e: Exception) {
|
||||
e.log()
|
||||
zippingAnalyticsTracker.onZippingFailure(IngestionType.APPS.name)
|
||||
IngestionStatus(
|
||||
referenceId = referenceId,
|
||||
ingestionType = IngestionType.APPS,
|
||||
@@ -492,6 +516,7 @@ object SmsUtil {
|
||||
referenceId: String
|
||||
): IngestionStatus {
|
||||
val gson = Gson().toJson(UserSmsData(smsList.sortedBy { it.timeStamp }))
|
||||
zippingAnalyticsTracker.onZippingUploadInitiated(SMS)
|
||||
val response = postZippedData(gson, url)
|
||||
|
||||
val ingestionStatus = IngestionStatus(
|
||||
@@ -502,8 +527,10 @@ object SmsUtil {
|
||||
)
|
||||
|
||||
if (response.isSuccessful) {
|
||||
zippingAnalyticsTracker.onZippingUploadSuccess(SMS)
|
||||
ingestionStatus.status = IngestionStatusType.SUCCESS
|
||||
} else {
|
||||
zippingAnalyticsTracker.onZippingUploadFailure(SMS)
|
||||
ingestionStatus.status = IngestionStatusType.FAILED
|
||||
}
|
||||
|
||||
@@ -517,6 +544,7 @@ object SmsUtil {
|
||||
referenceId: String
|
||||
): IngestionStatus {
|
||||
val gson = Gson().toJson(UserAppData(appList))
|
||||
zippingAnalyticsTracker.onZippingUploadInitiated(IngestionType.APPS.name)
|
||||
val response = postZippedData(gson, url)
|
||||
|
||||
val ingestionStatus = IngestionStatus(
|
||||
@@ -525,8 +553,10 @@ object SmsUtil {
|
||||
)
|
||||
|
||||
if (response.isSuccessful) {
|
||||
zippingAnalyticsTracker.onZippingUploadSuccess(IngestionType.APPS.name)
|
||||
ingestionStatus.status = IngestionStatusType.SUCCESS
|
||||
} else {
|
||||
zippingAnalyticsTracker.onZippingUploadFailure(IngestionType.APPS.name)
|
||||
ingestionStatus.status = IngestionStatusType.FAILED
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user