From c85f060f6e5f48a5bc57f2ea49ed2e388da7b65e Mon Sep 17 00:00:00 2001 From: Siddiboina Susai Date: Thu, 16 Jan 2025 19:04:11 +0530 Subject: [PATCH] NTP-21454: Integrate Traceflow in super app (#14558) Co-authored-by: Shivam Goyal --- android/app/build.gradle | 1 + .../java/com/naviapp/app/NaviApplication.kt | 8 +++++ .../home/compose/activity/HomePageActivity.kt | 5 +++ .../java/com/naviapp/traceflow/Constants.kt | 14 ++++++++ .../naviapp/traceflow/TraceCallbackImpl.kt | 33 +++++++++++++++++++ android/gradle/libs.versions.toml | 2 ++ 6 files changed, 63 insertions(+) create mode 100644 android/app/src/main/java/com/naviapp/traceflow/Constants.kt create mode 100644 android/app/src/main/java/com/naviapp/traceflow/TraceCallbackImpl.kt diff --git a/android/app/build.gradle b/android/app/build.gradle index 5dfa6ee528..7020b778d9 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -292,6 +292,7 @@ dependencies { implementation libs.coil.svg implementation libs.dagger.hiltAndroid implementation libs.facebook.applinks + implementation libs.navi.traceflow implementation libs.otaliastudios.cameraview implementation libs.raamcosta.composeDestinations.animation.core implementation libs.truecaller diff --git a/android/app/src/main/java/com/naviapp/app/NaviApplication.kt b/android/app/src/main/java/com/naviapp/app/NaviApplication.kt index 0a9d71f628..36b3b32350 100644 --- a/android/app/src/main/java/com/naviapp/app/NaviApplication.kt +++ b/android/app/src/main/java/com/naviapp/app/NaviApplication.kt @@ -13,10 +13,14 @@ import coil.ImageLoaderFactory import com.navi.base.cache.repository.NaviCacheRepository import com.navi.moneymanager.common.manager.MMLibManager import com.navi.pay.common.setup.NaviPayManager +import com.navi.traceflow.Config +import com.navi.traceflow.TraceManager import com.naviapp.app.facades.ImageLoaderProvider import com.naviapp.app.initializers.ComponentInitializer import com.naviapp.common.transformer.AppLoadTimerMapper import com.naviapp.home.common.setup.NotificationManager +import com.naviapp.traceflow.Constants as TC +import com.naviapp.traceflow.TraceCallbackImpl import com.naviapp.utils.isDifferentPackage import dagger.Lazy import dagger.hilt.android.HiltAndroidApp @@ -49,12 +53,16 @@ open class NaviApplication : BaseApplication(), ImageLoaderFactory { private var appForegroundCounter: Int = 0 override fun onCreate() { + TraceManager.init(Config(traceCallback = TraceCallbackImpl())) + TraceManager.startTrace(TC.TRACE_APP_STARTUP) System.setProperty("gson.allowCapturingTypeVariables", "true") AppLoadTimerMapper.onAppLoadingStart() super.onCreate() AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) instance = this + TraceManager.startChildTrace(TC.TRACE_APP_STARTUP, TC.TRACE_INIT_COMPONENTS) initializeComponents() + TraceManager.endTrace(TC.TRACE_INIT_COMPONENTS) AppLoadTimerMapper.applicationOnCreateTime() } diff --git a/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt b/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt index 0de7c48da4..29369f81ce 100644 --- a/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt +++ b/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt @@ -120,6 +120,7 @@ import com.navi.payment.utils.Constants.PAYMENT_STATUS import com.navi.payment.utils.PaymentSource import com.navi.paymentclients.model.InitiatePaymentRequest as PMSInitiatePaymentRequest import com.navi.paymentclients.viewmodel.base.PaymentManager +import com.navi.traceflow.TraceManager import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics import com.naviapp.appsettings.utils.hasNotificationPermission @@ -174,6 +175,7 @@ import com.naviapp.screenOverlay.nudge.model.NudgeEvent import com.naviapp.screenOverlay.popup.model.PopupEffect import com.naviapp.screenOverlay.popup.model.PopupEvent import com.naviapp.screenOverlay.viewModel.ScreenOverlayVM +import com.naviapp.traceflow.Constants as TC import com.naviapp.utils.Constants import com.naviapp.utils.Constants.NAVI_PAY_REQUEST_CODE import com.naviapp.utils.IntentConstants @@ -284,6 +286,7 @@ class HomePageActivity : get() = ModuleNameV2.App override fun onCreate(savedInstanceState: Bundle?) { + TraceManager.startChildTrace(TC.TRACE_APP_STARTUP, TC.TRACE_HP_ON_CREATE) AppLoadTimerMapper.initActivityStartTime() installSplashScreen() super.onCreate(savedInstanceState) @@ -325,6 +328,8 @@ class HomePageActivity : navigateToHomeTab(isResetCall = true) redirectToTab() initResourceManager() + TraceManager.endTrace(TC.TRACE_HP_ON_CREATE) + TraceManager.endAllTraces() } private fun checkForAppLaunchEvent() { diff --git a/android/app/src/main/java/com/naviapp/traceflow/Constants.kt b/android/app/src/main/java/com/naviapp/traceflow/Constants.kt new file mode 100644 index 0000000000..4a749e0d5c --- /dev/null +++ b/android/app/src/main/java/com/naviapp/traceflow/Constants.kt @@ -0,0 +1,14 @@ +/* + * + * * Copyright © 2025 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.naviapp.traceflow + +object Constants { + const val TRACE_APP_STARTUP = "app_startup" + const val TRACE_INIT_COMPONENTS = "init_components" + const val TRACE_HP_ON_CREATE = "hp_on_create" +} diff --git a/android/app/src/main/java/com/naviapp/traceflow/TraceCallbackImpl.kt b/android/app/src/main/java/com/naviapp/traceflow/TraceCallbackImpl.kt new file mode 100644 index 0000000000..fbb7a183dc --- /dev/null +++ b/android/app/src/main/java/com/naviapp/traceflow/TraceCallbackImpl.kt @@ -0,0 +1,33 @@ +/* + * + * * Copyright © 2025 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.naviapp.traceflow + +import com.navi.analytics.utils.NaviTrackEvent +import com.navi.base.utils.orZero +import com.navi.traceflow.Trace +import com.navi.traceflow.TraceCallback +import timber.log.Timber + +class TraceCallbackImpl : TraceCallback { + override fun onTraceEnded(trace: Trace) { + val props = mutableMapOf() + props["NAME"] = trace.name + props["START_TIME"] = trace.startTime.toString() + props["END_TIME"] = trace.endTime.orZero().toString() + props["TRACE_ID"] = trace.traceId.toString() + trace.parentTrace?.traceId?.let { parentTraceId -> + props["PARENT_UUID"] = parentTraceId.toString() + } + try { // surrounding this try catch, because, some times pulse may not be initialised at + // this point + NaviTrackEvent.trackEvent("TRACE_FLOW", props) + } catch (e: Exception) { + Timber.e(e) + } + } +} diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index 27eebbf5fd..abf55e2cd1 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -96,6 +96,7 @@ navi-alfred = "2.1.0" navi-elex = "1.11.0" navi-guarddog = "3.13.0" navi-pulse = "1.14.0" +navi-traceflow = "1.0.0" navi-uitron = "3.0.0" navigation = "2.8.5" okhttp-bom = "4.12.0" @@ -342,6 +343,7 @@ navi-alfred = { module = "com.navi.android:alfred", version.ref = "navi-alfred" navi-elex = { module = "com.navi.android:elex", version.ref = "navi-elex" } navi-guarddog = { module = "com.navi.android:guarddog", version.ref = "navi-guarddog" } navi-pulse = { module = "com.navi.android:pulse", version.ref = "navi-pulse" } +navi-traceflow = { module = "com.navi.android:traceflow", version.ref = "navi-traceflow" } navi-uitron = { module = "com.navi.android:uitron", version.ref = "navi-uitron" } okhttp-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp-bom" }