[6.6.0]Crash埋点修改+接管记录修改补交
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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">
|
||||
|
||||
|
||||
Reference in New Issue
Block a user