[6.6.0]Crash埋点修改+接管记录修改补交

This commit is contained in:
xuxinchao
2024-09-04 15:08:45 +08:00
parent 7f5dadf7ae
commit b1e13814ab
4 changed files with 46 additions and 32 deletions

View File

@@ -5,7 +5,6 @@ package com.zhjt.mogo_core_function_devatools
import android.app.Activity
import android.app.Application
import android.content.Context
import android.util.Log
import android.view.View
import android.view.ViewGroup
import com.alibaba.android.arouter.facade.annotation.Route
@@ -13,7 +12,6 @@ import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.debug.DebugConfig
import com.mogo.eagle.core.data.EnvConfig
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HmiBuildConfig.isShowRouteStrategy
import com.mogo.eagle.core.data.constants.MogoServicePaths
@@ -60,10 +58,8 @@ import com.zhjt.mogo_core_function_devatools.binding.BindingCarManager
import com.zhjt.mogo_core_function_devatools.block.MoGoBlockProviderImpl
import com.zhjt.mogo_core_function_devatools.env.EnvChangeManager
import com.zhjt.mogo_core_function_devatools.exam.ExamControlManager
import com.zhjt.mogo_core_function_devatools.exam.ExamControlWindow
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl
import com.zhjt.mogo_core_function_devatools.logcat.CrashLogAnalyticsManager
import com.zhjt.mogo_core_function_devatools.logcat.MoGoLogRecordProviderImpl
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager
import com.zhjt.mogo_core_function_devatools.lookaround.MoGoLookAroundProviderImpl
@@ -91,11 +87,7 @@ import com.zhjt.service.chain.ChainLog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.io.BufferedReader
import java.io.File
import java.io.FileReader
import java.io.IOException
import java.lang.StringBuilder
import java.lang.ref.WeakReference
import java.util.concurrent.ConcurrentHashMap
@@ -250,26 +242,6 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
val crashDir = File(it.getExternalFilesDir(null), "crash")
if(crashDir.exists() && crashDir.canExecute() && crashDir.listFiles()?.isNotEmpty() == true){
it.lifeCycleScope.launch(Dispatchers.IO){
crashDir.listFiles()?.forEach {crash->
val file = File(crash.absolutePath)
try {
BufferedReader(FileReader(file)).use { reader ->
var line: String?
//读取读取文件内容并打印
while (reader.readLine().also { line = it } != null) {
line?.let { content->
if(content.contains("Crash type")){
CrashLogAnalyticsManager.crashLogAnalytics(content)
return@use
}
}
}
}
} catch (e: IOException) {
e.printStackTrace()
}
}
val startTime = crashDir.lastModified() - 60*1000
val endTime = if(System.currentTimeMillis() - crashDir.lastModified()>60*1000){
crashDir.lastModified() + 60*1000

View File

@@ -24,6 +24,8 @@ object CrashLogAnalyticsManager {
private const val crashEyeVersion = "eyeVersion" //鹰眼版本
private const val crashAppFlavor = "appFlavor" //渠道信息
private const val crashBranchHash = "branchHash" //Git Hash
private const val crashKeyMessage = "keyMessage" //崩溃核心信息
private const val crashIsDriver = "isDriver" //是否是司机屏
/**
* 崩溃统计
@@ -37,7 +39,7 @@ object CrashLogAnalyticsManager {
* @param branchHash Git Hash
*/
private fun realCrashLogAnalytics(cosPath: String,type: String,plateNumber: String,carSn: String,mapVersion: String,eyeVersion: String,
appFlavor: String,branchHash: String){
appFlavor: String,branchHash: String,keyMessage: String,isDriver: Boolean){
val crashLogParams = HashMap<String,Any>()
crashLogParams[crashCosPath] = cosPath
crashLogParams[crashType] = type
@@ -47,14 +49,17 @@ object CrashLogAnalyticsManager {
crashLogParams[crashEyeVersion] = eyeVersion
crashLogParams[crashAppFlavor] = appFlavor
crashLogParams[crashBranchHash] = branchHash
crashLogParams[crashKeyMessage] = keyMessage
crashLogParams[crashIsDriver] = isDriver
MogoAnalyticUtils.track(crashLogRecord,crashLogParams)
}
/**
* 崩溃统计
* @param crashType 崩溃类型
* @param keyMessage 崩溃关键信息
*/
fun crashLogAnalytics(crashType: String){
fun crashLogAnalytics(crashType: String,keyMessage: String){
val crashCosPath = StringBuilder()
crashCosPath.append("CarPad/")
if(DebugConfig.isDebug()){
@@ -66,10 +71,10 @@ object CrashLogAnalyticsManager {
crashCosPath.append("/")
crashCosPath.append(millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()))
crashCosPath.append("/")
realCrashLogAnalytics(crashCosPath.toString(),crashType.replace("Crash type:","").trim(), AppConfigInfo.plateNumber,
realCrashLogAnalytics(crashCosPath.toString(),crashType, AppConfigInfo.plateNumber,
SharedPrefsMgr.getInstance().sn,
CallerAutoPilotStatusListenerManager.getDockerVersion() ?: "",
AppUtils.getAppVersionName(),AppConfigInfo.flavor,AppConfigInfo.workingBranchHash)
AppUtils.getAppVersionName(),AppConfigInfo.flavor,AppConfigInfo.workingBranchHash,keyMessage,AppConfigInfo.isDriver)
}
}

View File

@@ -14,7 +14,12 @@ import com.mogo.aicloud.services.socket.MogoAiCloudSocketManager
import com.mogo.commons.AbsMogoApplication
import com.mogo.core.log.record.*
import com.mogo.core.log.record.config.*
import com.mogo.core.log.record.config.crash.ANRCrash
import com.mogo.core.log.record.config.crash.CrashConfig
import com.mogo.core.log.record.config.crash.CrashType
import com.mogo.core.log.record.config.crash.JavaCrash
import com.mogo.core.log.record.config.crash.NativeCrash
import com.mogo.core.log.record.config.crash.upload.ICrashFileUploader
import com.mogo.core.log.record.config.extra.IExtraFileToUpload
import com.mogo.core.log.record.config.extra.ToUploadFile
import com.mogo.core.log.record.config.state.IStateProvider
@@ -137,6 +142,7 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
builder.crashConfig(
CrashConfig.Builder()
.enabled(true)
.uploader(CrashLogUploader(context))
.crashDir(File(context.getExternalFilesDir(null), "crash"))
.expireDuration(TimeUnit.DAYS.toMillis(3))
.javaCrash(true)
@@ -156,6 +162,7 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
}
})
LogcatManager.init(builder)
LogcatManager.uploadForCrashIfNeed()
}
override fun target(): Class<RemoteLogPushContent> {
@@ -235,4 +242,33 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
override fun testAnrCrash() {
SystemClock.sleep(15000)
}
private class CrashLogUploader(private val mContext: Context): ICrashFileUploader {
override suspend fun upload(
type: CrashType,
crashTime: String,
file: File,
extra: Map<String, String>?
): Boolean {
try {
val keyMessage = when(type) {
JavaCrash -> extra?.get("java stacktrace") ?: extra?.get("backtrace") ?: "#"
NativeCrash -> extra?.get("backtrace") ?: "#"
ANRCrash -> extra?.get("backtrace") ?: "#"
}
val typeStr = when(type){
JavaCrash -> "JavaCrash"
NativeCrash -> "NativeCrash"
ANRCrash -> "ANRCrash"
}
CrashLogAnalyticsManager.crashLogAnalytics(typeStr,keyMessage)
return true
} catch (t: Throwable) {
return false
}
}
}
}

View File

@@ -2,6 +2,7 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/dp_960"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_72"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/bg_take_over_record">