NTP-64514 | Trim ANR and Crash StackTrace (#16174)
This commit is contained in:
@@ -1320,9 +1320,6 @@ class NaviAnalytics private constructor() {
|
||||
const val HL_PPP_BACK_BTN_CLICK = "HL_ppp_FAQ_back_click"
|
||||
const val PL_PPP_BACK_BTN_CLICK = "PL_ppp_FAQ_back_click"
|
||||
const val PL_GLOBAL_THIRD_PARTY_INIT = "pl_global_3rd_party_init"
|
||||
const val GLOBAL_APP_CRASH = "global_app_crash"
|
||||
const val GLOBAL_ANR = "global_screen_freeze"
|
||||
const val GLOBAL_ANR_THIRD_PARTY = "global_screen_freeze_3rd_party"
|
||||
const val NAVIAPP_BACKGROUND_PUSH = "NaviApp_background_push"
|
||||
const val SCREEN_NAME = "screen_name"
|
||||
const val METHOD_NAME = "method_name"
|
||||
@@ -1338,6 +1335,8 @@ class NaviAnalytics private constructor() {
|
||||
const val EXTERNAL = "EXTERNAL"
|
||||
const val TRACE_SIZE = "trace_size"
|
||||
const val APP_IN_FOREGROUND = "app_in_foreground"
|
||||
const val IS_APP_CRASH = "isAppCrash"
|
||||
const val IS_APP_ANR = "isAppAnr"
|
||||
const val UPDATE_DEVICE_DETAILS_ERROR = "update_device_details_error"
|
||||
const val STACK_TRACE = "stack_trace"
|
||||
const val IP_ADDRESS_DATA = "ip_address_data"
|
||||
|
||||
@@ -17,23 +17,17 @@ import com.navi.base.utils.orZero
|
||||
import com.navi.common.checkmate.core.CheckMateManager
|
||||
import com.navi.common.checkmate.utils.getVerticalFromStackTrace
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.network.isNetworkConnectivityInterceptorEnabled
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.insurance.util.FALSE
|
||||
import com.navi.insurance.util.TRUE
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.ALFRED_SESSION_ID
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.ANR_MESSAGE
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.ANR_STACK_TRACE
|
||||
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_ANR
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.GLOBAL_ANR_THIRD_PARTY
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.IS_APP_ANR
|
||||
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
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.TRACE_SIZE
|
||||
@@ -42,7 +36,6 @@ import com.naviapp.anr_monitor.AnrError
|
||||
import com.naviapp.anr_monitor.AnrMonitor
|
||||
import com.naviapp.anr_monitor.AnrMonitor.AnrListener
|
||||
import com.naviapp.app.NaviApplication
|
||||
import com.naviapp.utils.Constants
|
||||
import com.naviapp.utils.Constants.ANR_MONITOR
|
||||
import com.naviapp.utils.Constants.ANR_SOURCE
|
||||
import com.naviapp.utils.Constants.DEV_ANR_LISTENER
|
||||
@@ -84,7 +77,7 @@ class AnrErrorHandlerInitializer @Inject constructor() : ComponentInitializer {
|
||||
val className = stackTraceElement.className
|
||||
val anrEventProperties = buildAnrEventProperties(error, stackTraceElement, className)
|
||||
anrEventProperties[ANR_SOURCE] = ANR_MONITOR
|
||||
trackEvent(className, anrEventProperties)
|
||||
trackEvent(anrEventProperties)
|
||||
handleAnrEventIfNeeded(anrEventProperties)
|
||||
}
|
||||
}
|
||||
@@ -98,7 +91,7 @@ class AnrErrorHandlerInitializer @Inject constructor() : ComponentInitializer {
|
||||
val stackTraceElement = error.cause?.stackTrace?.firstOrNull() ?: return@ANRListener
|
||||
val className = stackTraceElement.className
|
||||
val anrEventProperties = buildAnrEventProperties(error, stackTraceElement, className)
|
||||
trackEvent(className, anrEventProperties)
|
||||
trackEvent(anrEventProperties)
|
||||
handleAnrEventIfNeeded(anrEventProperties)
|
||||
}
|
||||
}
|
||||
@@ -108,34 +101,33 @@ class AnrErrorHandlerInitializer @Inject constructor() : ComponentInitializer {
|
||||
stackTraceElement: StackTraceElement,
|
||||
className: String,
|
||||
): MutableMap<String, String> {
|
||||
val stackTraceSize =
|
||||
FirebaseRemoteConfigHelper.getLong(
|
||||
FirebaseRemoteConfigHelper.STACE_TRACE_SIZE_LIMIT,
|
||||
1000,
|
||||
)
|
||||
.toInt()
|
||||
return mutableMapOf(
|
||||
SCREEN_NAME to (NaviTrackEvent.currentScreenName ?: className),
|
||||
METHOD_NAME to stackTraceElement.methodName,
|
||||
LINE_NUMBER to stackTraceElement.lineNumber.toString(),
|
||||
APP_IN_FOREGROUND to (application.getAppInForegroundCounter() >= 1).toString(),
|
||||
ANR_MESSAGE to error.message.orEmpty(),
|
||||
ANR_STACK_TRACE to error.stackTraceToString(),
|
||||
TRACE_SIZE to
|
||||
(error.stackTrace.size + error.cause?.stackTrace?.size.orZero()).toString(),
|
||||
VERTICAL to getVerticalFromStackTrace(error),
|
||||
FOREGROUND_SCREEN to NaviTrackEvent.foregroundScreen.orEmpty(),
|
||||
FOREGROUND_VERTICAL to NaviTrackEvent.foregroundVertical.orEmpty(),
|
||||
STACK_TRACE to error.stackTraceToString(),
|
||||
ALFRED_SESSION_ID to AlfredManager.getAlfredSessionId(),
|
||||
CUSTOM_DNS_ENABLED to TemporaryStorageHelper.isOkHttpCustomDnsV2Enabled.toString(),
|
||||
NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED to
|
||||
isNetworkConnectivityInterceptorEnabled().toString(),
|
||||
STACK_TRACE to error.stackTraceToString().take(stackTraceSize),
|
||||
IS_APP_ANR to true.toString(),
|
||||
)
|
||||
}
|
||||
|
||||
private fun trackEvent(className: String, anrEventProperties: MutableMap<String, String>) {
|
||||
val eventName =
|
||||
if (className.contains(Constants.ANR_NAVI_REGEX)) GLOBAL_ANR else GLOBAL_ANR_THIRD_PARTY
|
||||
private fun trackEvent(anrEventProperties: MutableMap<String, String>) {
|
||||
CheckMateManager.logVerticalWiseAppCrashOrAnrEvent(
|
||||
eventName = NAP_METRIC,
|
||||
eventValues = anrEventProperties,
|
||||
isAppCrash = false,
|
||||
isAppAnr = true,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -12,17 +12,15 @@ import com.navi.analytics.utils.NaviTrackEvent
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.common.checkmate.core.CheckMateManager
|
||||
import com.navi.common.checkmate.utils.getVerticalFromStackTrace
|
||||
import com.navi.common.network.isNetworkConnectivityInterceptorEnabled
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.ALFRED_SESSION_ID
|
||||
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.IS_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
|
||||
import com.naviapp.analytics.utils.NaviAnalytics.Companion.TRACE_SIZE
|
||||
@@ -60,8 +58,6 @@ class CrashHandlerInitializer @Inject constructor() : ComponentInitializer {
|
||||
CheckMateManager.logVerticalWiseAppCrashOrAnrEvent(
|
||||
eventName = NAP_METRIC,
|
||||
eventValues = crashEventProperties,
|
||||
isAppCrash = true,
|
||||
isAppAnr = false,
|
||||
)
|
||||
} finally {
|
||||
defaultHandler?.uncaughtException(thread, exception)
|
||||
@@ -69,6 +65,12 @@ class CrashHandlerInitializer @Inject constructor() : ComponentInitializer {
|
||||
}
|
||||
|
||||
private fun buildCrashEventProperties(exception: Throwable): MutableMap<String, String> {
|
||||
val stackTraceSize =
|
||||
FirebaseRemoteConfigHelper.getLong(
|
||||
FirebaseRemoteConfigHelper.STACE_TRACE_SIZE_LIMIT,
|
||||
1000,
|
||||
)
|
||||
.toInt()
|
||||
return mutableMapOf(
|
||||
SCREEN_NAME to
|
||||
(NaviTrackEvent.currentScreenName
|
||||
@@ -81,11 +83,9 @@ class CrashHandlerInitializer @Inject constructor() : ComponentInitializer {
|
||||
VERTICAL to getVerticalFromStackTrace(exception),
|
||||
FOREGROUND_SCREEN to NaviTrackEvent.foregroundScreen.orEmpty(),
|
||||
FOREGROUND_VERTICAL to NaviTrackEvent.foregroundVertical.orEmpty(),
|
||||
STACK_TRACE to exception.stackTraceToString(),
|
||||
ALFRED_SESSION_ID to AlfredManager.getAlfredSessionId(),
|
||||
CUSTOM_DNS_ENABLED to TemporaryStorageHelper.isOkHttpCustomDnsV2Enabled.toString(),
|
||||
NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED to
|
||||
isNetworkConnectivityInterceptorEnabled().toString(),
|
||||
STACK_TRACE to exception.stackTraceToString().take(stackTraceSize),
|
||||
IS_APP_CRASH to true.toString(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ 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
|
||||
@@ -21,6 +20,7 @@ import com.navi.common.checkmate.utils.getErrorDescription
|
||||
import com.navi.common.checkmate.utils.getErrorTitle
|
||||
import com.navi.common.checkmate.utils.getEventNameWithVerticalPrefix
|
||||
import com.navi.common.checkmate.utils.getIsNae
|
||||
import com.navi.common.constants.VERTICAL
|
||||
import com.navi.common.network.models.GenericResponse
|
||||
import com.navi.common.network.models.RepoResult
|
||||
import com.navi.common.utils.NetworkStats
|
||||
@@ -180,24 +180,14 @@ object CheckMateManager {
|
||||
}
|
||||
|
||||
/** This method will only be used for vertical wise app crash and anr event logging. */
|
||||
fun logVerticalWiseAppCrashOrAnrEvent(
|
||||
eventName: String,
|
||||
eventValues: Map<String, String>,
|
||||
isAppCrash: Boolean? = null,
|
||||
isAppAnr: Boolean? = null,
|
||||
) {
|
||||
fun logVerticalWiseAppCrashOrAnrEvent(eventName: String, eventValues: Map<String, String>) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
eventName =
|
||||
getEventNameWithVerticalPrefix(
|
||||
eventName = eventName,
|
||||
vertical = eventValues["vertical"].orEmpty(),
|
||||
vertical = eventValues[VERTICAL].orEmpty(),
|
||||
),
|
||||
eventValues =
|
||||
eventValues +
|
||||
mapOf(
|
||||
"isAppCrash" to isAppCrash.orFalse().toString(),
|
||||
"isAppAnr" to isAppAnr.orFalse().toString(),
|
||||
),
|
||||
eventValues = eventValues,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -157,6 +157,7 @@ object FirebaseRemoteConfigHelper {
|
||||
const val LOW_NETWORK_SIGNAL_ERROR_CODE_ENABLED = "LOW_NETWORK_SIGNAL_ERROR_CODE_ENABLED"
|
||||
const val LOW_NETWORK_SIGNAL_QUALITY_LIST = "LOW_NETWORK_SIGNAL_QUALITY_LIST"
|
||||
const val ENABLE_GEO_NETWORK_SIGNATURE_USECASE = "ENABLE_GEO_NETWORK_SIGNATURE_USECASE"
|
||||
const val STACE_TRACE_SIZE_LIMIT = "STACE_TRACE_SIZE_LIMIT"
|
||||
|
||||
// GI
|
||||
const val NAVI_GI_RETRY_POLICY_ENABLED = "NAVI_GI_RETRY_POLICY_ENABLED"
|
||||
|
||||
Reference in New Issue
Block a user