From aaf523992fd15441719f9c286442b423baa0a153 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 22 Jul 2024 19:17:25 +0800 Subject: [PATCH] =?UTF-8?q?[6.5.0]=E5=A2=9E=E5=8A=A0=E5=B4=A9=E6=BA=83?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DevaToolsProvider.kt | 67 ++++++++++++----- .../logcat/CrashLogAnalyticsManager.kt | 75 +++++++++++++++++++ 2 files changed, 122 insertions(+), 20 deletions(-) create mode 100644 core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt index 7c4684d8b6..cf72166d49 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/DevaToolsProvider.kt @@ -1,8 +1,11 @@ package com.zhjt.mogo_core_function_devatools +//import com.mogo.eagle.core.function.api.devatools.apm.* +//import com.zhjt.mogo_core_function_devatools.apm.* 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 @@ -10,6 +13,7 @@ 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.constants.MogoServicePaths import com.mogo.eagle.core.data.deva.bindingcar.ModifyBindingcarInfo import com.mogo.eagle.core.data.deva.chain.ChainConstant @@ -19,17 +23,22 @@ import com.mogo.eagle.core.data.deva.scene.SceneModule import com.mogo.eagle.core.data.deva.scene.SceneTAG import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.function.api.devatools.IDevaToolsProvider -//import com.mogo.eagle.core.function.api.devatools.apm.* -import com.mogo.eagle.core.function.api.devatools.block.* -import com.mogo.eagle.core.function.api.devatools.strict.* -import com.mogo.eagle.core.function.api.devatools.download.* -import com.mogo.eagle.core.function.api.devatools.logcat.* -import com.mogo.eagle.core.function.api.devatools.mofang.* +import com.mogo.eagle.core.function.api.devatools.block.IMoGoBlockProvider +import com.mogo.eagle.core.function.api.devatools.download.DownloadType +import com.mogo.eagle.core.function.api.devatools.logcat.IMoGoLogRecordProvider +import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider import com.mogo.eagle.core.function.api.devatools.perf.IMoGoCpuUsageProvider -import com.mogo.eagle.core.function.api.lookaround.* +import com.mogo.eagle.core.function.api.devatools.strict.IStrictModeProvider +import com.mogo.eagle.core.function.api.lookaround.IMoGoLookAroundProvider import com.mogo.eagle.core.function.api.map.route.IMapRouteProvider +import com.mogo.eagle.core.function.api.upgrade.IMoGoUpgradeProvider +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.w +import com.mogo.eagle.core.utilcode.util.AppStateManager +import com.mogo.eagle.core.utilcode.util.IAppStateListener +import com.mogo.weak.network.SdtManager import com.tencent.matrix.Matrix import com.tencent.matrix.iocanary.IOCanaryPlugin import com.tencent.matrix.iocanary.config.IOConfig @@ -39,26 +48,20 @@ import com.tencent.matrix.report.Issue import com.tencent.matrix.trace.TracePlugin import com.tencent.matrix.trace.config.SharePluginInfo import com.tencent.matrix.trace.config.TraceConfig -//import com.zhjt.mogo_core_function_devatools.apm.* -import com.mogo.eagle.core.function.api.upgrade.* -import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager -import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope -import com.mogo.eagle.core.utilcode.util.AppStateManager -import com.mogo.eagle.core.utilcode.util.IAppStateListener -import com.mogo.weak.network.SdtManager import com.zhjt.mogo_core_function_devatools.adas.PowerOffManager import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig -import com.zhjt.mogo_core_function_devatools.binding.* -import com.zhjt.mogo_core_function_devatools.block.* +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.funcconfig.FuncConfigCenter.Companion.bizConfigCenter import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl -import com.zhjt.mogo_core_function_devatools.logcat.* +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.* +import com.zhjt.mogo_core_function_devatools.lookaround.MoGoLookAroundProviderImpl import com.zhjt.mogo_core_function_devatools.matrix.DynamicConfigImpl -import com.zhjt.mogo_core_function_devatools.mofang.* +import com.zhjt.mogo_core_function_devatools.mofang.MoGoMoFangProviderImpl import com.zhjt.mogo_core_function_devatools.monitor.MonitorManager import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb import com.zhjt.mogo_core_function_devatools.monitor.db.MonitorDb.Companion.getDb @@ -69,7 +72,7 @@ import com.zhjt.mogo_core_function_devatools.status.StatusManager import com.zhjt.mogo_core_function_devatools.status.entity.RouteDownloadStatus import com.zhjt.mogo_core_function_devatools.status.entity.Status import com.zhjt.mogo_core_function_devatools.status.ui.AutoPilotLaunchBeforeView -import com.zhjt.mogo_core_function_devatools.strict.* +import com.zhjt.mogo_core_function_devatools.strict.StrictModeProviderImpl import com.zhjt.mogo_core_function_devatools.trace.TraceManager.Companion.traceManager import com.zhjt.mogo_core_function_devatools.tts.TtsManager.Companion.ttsManager import com.zhjt.mogo_core_function_devatools.upgrade.UpgradeManager.Companion.upgradeManager @@ -79,7 +82,11 @@ 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 @@ -234,6 +241,26 @@ 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 diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt new file mode 100644 index 0000000000..8126279d6f --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/CrashLogAnalyticsManager.kt @@ -0,0 +1,75 @@ +package com.zhjt.mogo_core_function_devatools.logcat + +import com.mogo.commons.debug.DebugConfig +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.commons.utils.MogoAnalyticUtils +import com.mogo.eagle.core.data.app.AppConfigInfo +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager +import com.mogo.eagle.core.utilcode.util.AppUtils +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String + +/** + * 崩溃埋点统计管理 + */ +object CrashLogAnalyticsManager { + + private const val crashLogRecord = "crash_log_record" + + private const val crashCosPath = "crashCosPath" //崩溃日志所在文件COS桶地址 + private const val crashType = "crashType" //崩溃类型Java、Native、ANR + private const val crashPlateNumber = "plateNumber" //车牌号 + private const val crashCarSn = "carSn" //鹰眼SN + private const val crashMapVersion = "mapVersion" //工控机版本 + private const val crashEyeVersion = "eyeVersion" //鹰眼版本 + private const val crashAppFlavor = "appFlavor" //渠道信息 + private const val crashBranchHash = "branchHash" //Git Hash + + /** + * 崩溃统计 + * @param cosPath 崩溃上传到COS桶的地址 + * @param type 崩溃类型 + * @param plateNumber 车牌号 + * @param carSn SN + * @param mapVersion 域控版本 + * @param eyeVersion 鹰眼版本 + * @param appFlavor 鹰眼渠道信息 + * @param branchHash Git Hash + */ + private fun realCrashLogAnalytics(cosPath: String,type: String,plateNumber: String,carSn: String,mapVersion: String,eyeVersion: String, + appFlavor: String,branchHash: String){ + val crashLogParams = HashMap() + crashLogParams[crashCosPath] = cosPath + crashLogParams[crashType] = type + crashLogParams[crashPlateNumber] = plateNumber + crashLogParams[crashCarSn] = carSn + crashLogParams[crashMapVersion] = mapVersion + crashLogParams[crashEyeVersion] = eyeVersion + crashLogParams[crashAppFlavor] = appFlavor + crashLogParams[crashBranchHash] = branchHash + MogoAnalyticUtils.track(crashLogRecord,crashLogParams) + } + + /** + * 崩溃统计 + * @param crashType 崩溃类型 + */ + fun crashLogAnalytics(crashType: String){ + val crashCosPath = StringBuilder() + crashCosPath.append("CarPad/") + if(DebugConfig.isDebug()){ + crashCosPath.append("debuglog/") + }else{ + crashCosPath.append("eaglelog/") + } + crashCosPath.append(SharedPrefsMgr.getInstance().sn) + crashCosPath.append("/") + crashCosPath.append(millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat())) + crashCosPath.append("/") + realCrashLogAnalytics(crashCosPath.toString(),crashType.replace("Crash type:","").trim(), AppConfigInfo.plateNumber, + SharedPrefsMgr.getInstance().sn, + CallerAutoPilotStatusListenerManager.getDockerVersion() ?: "", + AppUtils.getAppVersionName(),AppConfigInfo.flavor,AppConfigInfo.workingBranchHash) + } + +} \ No newline at end of file