From ae325c4f3a7c21eee9d52d102ce9d3b4caf7f6a4 Mon Sep 17 00:00:00 2001 From: A Shrihari Raju Date: Fri, 28 Mar 2025 12:43:48 +0530 Subject: [PATCH] NTP-48917 | Crash & ANR vertical attribution and nap_metric inclusion (#15456) --- .../naviapp/analytics/utils/NaviAnalytics.kt | 1 + .../AnrErrorHandlerInitializer.kt | 8 ++++++- .../initializers/CrashHandlerInitializer.kt | 9 ++++++-- .../com/naviapp/react_native/ReactActivity.kt | 2 +- .../common/checkmate/core/CheckMateManager.kt | 23 +++++++++++++++++++ .../ui/lending/LEPaymentHandlerActivity.kt | 2 +- 6 files changed, 40 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt index 491efa40d9..a0f4333e03 100644 --- a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt +++ b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt @@ -1406,5 +1406,6 @@ class NaviAnalytics private constructor() { const val ENGAGEMENT_SIGNALS_NOT_SUPPORTED = "engagement_signals_not_supported" const val CHROME_TAB_SERVICE_DISCONNECTION_EXCEPTION = "chrome_tab_service_disconnection_exception" + const val NAP_METRIC = "nap_metric" } } diff --git a/android/app/src/main/java/com/naviapp/app/initializers/AnrErrorHandlerInitializer.kt b/android/app/src/main/java/com/naviapp/app/initializers/AnrErrorHandlerInitializer.kt index 8b9abcb388..1da615e90c 100644 --- a/android/app/src/main/java/com/naviapp/app/initializers/AnrErrorHandlerInitializer.kt +++ b/android/app/src/main/java/com/naviapp/app/initializers/AnrErrorHandlerInitializer.kt @@ -32,6 +32,7 @@ import com.naviapp.analytics.utils.NaviAnalytics.Companion.GLOBAL_ANR import com.naviapp.analytics.utils.NaviAnalytics.Companion.GLOBAL_ANR_THIRD_PARTY import com.naviapp.analytics.utils.NaviAnalytics.Companion.LINE_NUMBER import com.naviapp.analytics.utils.NaviAnalytics.Companion.METHOD_NAME +import com.naviapp.analytics.utils.NaviAnalytics.Companion.NAP_METRIC import com.naviapp.analytics.utils.NaviAnalytics.Companion.NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED import com.naviapp.analytics.utils.NaviAnalytics.Companion.SCREEN_NAME import com.naviapp.analytics.utils.NaviAnalytics.Companion.STACK_TRACE @@ -130,7 +131,12 @@ class AnrErrorHandlerInitializer @Inject constructor() : ComponentInitializer { private fun trackEvent(className: String, anrEventProperties: MutableMap) { val eventName = if (className.contains(Constants.ANR_NAVI_REGEX)) GLOBAL_ANR else GLOBAL_ANR_THIRD_PARTY - CheckMateManager.logAppCrashOrAnrEvent(eventName, anrEventProperties) + CheckMateManager.logVerticalWiseAppCrashOrAnrEvent( + eventName = NAP_METRIC, + eventValues = anrEventProperties, + isAppCrash = false, + isAppAnr = true, + ) } private fun handleAnrEventIfNeeded(anrEventProperties: MutableMap) { diff --git a/android/app/src/main/java/com/naviapp/app/initializers/CrashHandlerInitializer.kt b/android/app/src/main/java/com/naviapp/app/initializers/CrashHandlerInitializer.kt index caa2babf2e..3dca740c8d 100644 --- a/android/app/src/main/java/com/naviapp/app/initializers/CrashHandlerInitializer.kt +++ b/android/app/src/main/java/com/naviapp/app/initializers/CrashHandlerInitializer.kt @@ -19,9 +19,9 @@ import com.naviapp.analytics.utils.NaviAnalytics.Companion.APP_IN_FOREGROUND import com.naviapp.analytics.utils.NaviAnalytics.Companion.CUSTOM_DNS_ENABLED import com.naviapp.analytics.utils.NaviAnalytics.Companion.FOREGROUND_SCREEN import com.naviapp.analytics.utils.NaviAnalytics.Companion.FOREGROUND_VERTICAL -import com.naviapp.analytics.utils.NaviAnalytics.Companion.GLOBAL_APP_CRASH import com.naviapp.analytics.utils.NaviAnalytics.Companion.LINE_NUMBER import com.naviapp.analytics.utils.NaviAnalytics.Companion.METHOD_NAME +import com.naviapp.analytics.utils.NaviAnalytics.Companion.NAP_METRIC import com.naviapp.analytics.utils.NaviAnalytics.Companion.NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED import com.naviapp.analytics.utils.NaviAnalytics.Companion.SCREEN_NAME import com.naviapp.analytics.utils.NaviAnalytics.Companion.STACK_TRACE @@ -57,7 +57,12 @@ class CrashHandlerInitializer @Inject constructor() : ComponentInitializer { if (!application.isDifferentPackage()) { AlfredManager.handleCrashEvent(crashEventProperties) } - CheckMateManager.logAppCrashOrAnrEvent(GLOBAL_APP_CRASH, crashEventProperties) + CheckMateManager.logVerticalWiseAppCrashOrAnrEvent( + eventName = NAP_METRIC, + eventValues = crashEventProperties, + isAppCrash = true, + isAppAnr = false, + ) } finally { defaultHandler?.uncaughtException(thread, exception) } diff --git a/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt b/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt index 78b61a8297..9befe7e4d5 100644 --- a/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt +++ b/android/app/src/main/java/com/naviapp/react_native/ReactActivity.kt @@ -176,7 +176,7 @@ class ReactActivity : BaseActivity(), DefaultHardwareBackBtnHandler, RequestToCa get() = NaviAnalytics.REACT_NATIVE_SCREEN override val moduleName: ModuleNameV2 - get() = ModuleNameV2.COMMON + get() = ModuleNameV2.Insurance @SuppressLint("VisibleForTests") override fun onCallbackRaised() { diff --git a/android/navi-common/src/main/java/com/navi/common/checkmate/core/CheckMateManager.kt b/android/navi-common/src/main/java/com/navi/common/checkmate/core/CheckMateManager.kt index 7fec422020..9d6b16988c 100644 --- a/android/navi-common/src/main/java/com/navi/common/checkmate/core/CheckMateManager.kt +++ b/android/navi-common/src/main/java/com/navi/common/checkmate/core/CheckMateManager.kt @@ -11,6 +11,7 @@ import com.navi.alfred.AlfredManager import com.navi.analytics.utils.NaviTrackEvent import com.navi.base.AppServiceManager import com.navi.base.bandwidthbuddy.BandwidthAccessor +import com.navi.base.utils.orFalse import com.navi.base.utils.orZero import com.navi.common.checkmate.model.EventType import com.navi.common.checkmate.model.MetricInfo @@ -178,6 +179,28 @@ object CheckMateManager { NaviTrackEvent.trackEventOnClickStream(eventName = eventName, eventValues = eventValues) } + /** This method will only be used for vertical wise app crash and anr event logging. */ + fun logVerticalWiseAppCrashOrAnrEvent( + eventName: String, + eventValues: Map, + isAppCrash: Boolean? = null, + isAppAnr: Boolean? = null, + ) { + NaviTrackEvent.trackEventOnClickStream( + eventName = + getEventNameWithVerticalPrefix( + eventName = eventName, + vertical = eventValues["vertical"].orEmpty(), + ), + eventValues = + eventValues + + mapOf( + "isAppCrash" to isAppCrash.orFalse().toString(), + "isAppAnr" to isAppAnr.orFalse().toString(), + ), + ) + } + /** This method is only used for api response error tracking. */ fun recordNetworkEvent( apiResponse: Response>, diff --git a/android/navi-payment/src/main/java/com/navi/paymentclients/ui/lending/LEPaymentHandlerActivity.kt b/android/navi-payment/src/main/java/com/navi/paymentclients/ui/lending/LEPaymentHandlerActivity.kt index 4bf353f722..eea8ce6158 100644 --- a/android/navi-payment/src/main/java/com/navi/paymentclients/ui/lending/LEPaymentHandlerActivity.kt +++ b/android/navi-payment/src/main/java/com/navi/paymentclients/ui/lending/LEPaymentHandlerActivity.kt @@ -579,7 +579,7 @@ class LEPaymentHandlerActivity : get() = CommonNaviAnalytics.PAYMENT_HANDLER_ACTIVITY override val moduleName: ModuleNameV2 - get() = ModuleNameV2.COMMON + get() = ModuleNameV2.PL companion object { const val LOAN_ACCOUNT_NUMBER = "loanAccountNumber"