From b1e6d79b9f1616ce2f0764e32eb9e56e88444ed3 Mon Sep 17 00:00:00 2001 From: renwj Date: Mon, 28 Aug 2023 19:47:08 +0800 Subject: [PATCH] =?UTF-8?q?[6.0.0][=E5=85=A8=E9=87=8F=E6=97=A5=E5=BF=97]?= =?UTF-8?q?=20=E5=85=A8=E9=87=8F=E6=97=A5=E5=BF=97=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E8=AE=B0=E5=BD=95=EF=BC=8C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E7=94=B1=E3=80=90=E5=AF=BC=E5=87=BA=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E6=97=A5=E5=BF=97=E3=80=91=E6=94=B9=E4=B8=BA=E3=80=90?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=85=A8=E9=87=8F=E6=97=A5=E5=BF=97=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- .../logcat/MoGoLogRecordProviderImpl.kt | 67 +++++++++++++++++++ .../logcat/uploader/LogRecordUploader.kt | 24 ++++--- .../hmi/ui/setting/DebugSettingView.kt | 30 +++------ .../main/res/layout/view_debug_setting.xml | 4 +- .../logcat/IMoGoLogRecordProvider.kt | 2 + 6 files changed, 98 insertions(+), 31 deletions(-) diff --git a/config.gradle b/config.gradle index 031da09377..ee98fd6a33 100644 --- a/config.gradle +++ b/config.gradle @@ -215,7 +215,7 @@ ext { btrace : "com.bytedance.btrace:rhea-core:2.0.0", mofang_runtime : "com.mogo.eagle.core.mofang:runtime:2.0.6", - log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.8", + log_runtime : "com.mogo.eagle.core.log.record:runtime:1.0.9", // 安全证书 passport_secret : "com.zhidaoauto:sdk-java:1.0.5-SNAPSHOT", diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt index 2b52095da7..fd87bac403 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/MoGoLogRecordProviderImpl.kt @@ -1,6 +1,7 @@ package com.zhjt.mogo_core_function_devatools.logcat import android.content.* +import android.os.Build import android.os.Process import android.os.SystemClock import android.util.Log @@ -10,6 +11,9 @@ 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.* +import com.mogo.core.log.record.config.state.IStateProvider +import com.mogo.core.log.record.model.UploadError +import com.mogo.eagle.core.data.app.AppConfigInfo import com.mogo.eagle.core.function.api.devatools.logcat.* import com.zhidao.loglib.bean.RemoteLogPushContent import com.zhjt.mogo_core_function_devatools.logcat.config.LogRecordConfig @@ -43,6 +47,62 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, .recordDir(File(context.getExternalFilesDir(null), "logcat")) .pid(Process.myPid()) .generateZipDir(zipDir.absolutePath) + .stateProvider(object : IStateProvider { + override fun provide(divider:String?): Map { + return mutableMapOf().also { itx -> + itx["build_sdk_version"] = Build.VERSION.SDK_INT + itx["build_device"] = Build.DEVICE + itx["build_host"] = Build.HOST + itx["build_id"] = Build.ID + itx["build_host"] = Build.HOST + itx["build_brand"] = Build.BRAND + itx["build_model"] = Build.MODEL + itx["build_product"] = Build.PRODUCT + itx["build_board"] = Build.BOARD + itx["build_bootloader"] = Build.BOOTLOADER + itx["${divider}-1"] = divider + itx["应用名称"] = AppConfigInfo.appName + itx["应用版本名称"] = AppConfigInfo.appVersionName + itx["应用版本号"] = AppConfigInfo.appVersionCode + itx["渠道"] = AppConfigInfo.flavor + itx["GIT分支"] = AppConfigInfo.workingBranchName + itx["GIT分支HASH"] = AppConfigInfo.workingBranchHash + itx["${divider}-2"] = divider + itx["MAP-SDK版本"] = AppConfigInfo.mapSdkVersion + itx["MAP-OPT-SDK版本"] = AppConfigInfo.mapSdkOptVersion + itx["ADAS-SDK版本"] = AppConfigInfo.adasSdkVersion + itx["${divider}-3"] = divider + itx["OBU-SDk版本"] = AppConfigInfo.obuSdkVersion + itx["OBU-INFO"] = AppConfigInfo.obuInfo + itx["${divider}-4"] = divider + itx["数字版权ID"] = AppConfigInfo.widevineIDMd5 + itx["设备唯一标识"] = AppConfigInfo.uniqueDeviceId + itx["中台分配的SN"] = AppConfigInfo.mogoSN + itx["中台分配的令牌"] = AppConfigInfo.mogoToken + itx["当前网络连接模式"] = AppConfigInfo.netMode + itx["网络是否正常"] = AppConfigInfo.isConnectNet + itx["Socket是否正常"] = AppConfigInfo.isConnectSocket + itx["ADAS连接是否正常"] = AppConfigInfo.isConnectAutopilot + itx["OBU连接是否正常"] = AppConfigInfo.isConnectObu + itx["连接工控机状态描述"] = AppConfigInfo.connectStatusDescribe + itx["${divider}-5"] = divider + itx["是否司机端"] = AppConfigInfo.isDriver + itx["是否是乘客端"] = !AppConfigInfo.isDriver + if (!AppConfigInfo.isDriver) { + itx["当前车机是乘客屏,对应的司机屏SN"] = AppConfigInfo.serverSn + } + itx["司乘屏连接状态"] = AppConfigInfo.isConnectedNetty + itx["${divider}-6"] = divider + itx["车牌号"] = AppConfigInfo.plateNumber + itx["mac"] = AppConfigInfo.iPCMacAddress + itx["docker版本"] = AppConfigInfo.dockerVersion + itx["协议版本号"] = AppConfigInfo.protocolVersionNumber + itx["${divider}-7"] = divider + itx["角色"] = AppConfigInfo.role + + } + } + }) .crashConfig(CrashConfig.Builder() .enabled(true) .crashDir(File(context.getExternalFilesDir(null), "logcat/crash")) @@ -119,6 +179,13 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider, return LogcatManager.export() } + override fun upload(): Unit = runBlocking { + val state = LogcatManager.upload(0, System.currentTimeMillis()) + if (state is UploadError) { + throw AssertionError(state.toString()) + } + } + override fun testJavaCrash(runOnNewThread: Boolean) { LogcatManager.testJavaCrash(runOnNewThread) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt index 03f1145b63..5600de0d8d 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/logcat/uploader/LogRecordUploader.kt @@ -8,10 +8,11 @@ import com.zhidao.cosupload.callback.CosStatusCallback import com.zhidao.cosupload.callback.CosStatusCallbackManager import com.zhidao.cosupload.model.CallbackData import com.zhidao.loglib.upload.UploadManager -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.asCoroutineDispatcher -import kotlinx.coroutines.flow.channelFlow -import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn internal class LogRecordUploader : ILogcatUploader { @@ -20,10 +21,10 @@ internal class LogRecordUploader : ILogcatUploader { private const val TAG = "LogRecordUploader" } - @OptIn(ExperimentalCoroutinesApi::class) override suspend fun upload(startTime: Long, endTime: Long, generatedZipPath: String): UploadState = - channelFlow { + flow { Log.d(TAG, "---- 开始上传 --- 1 ---") + val channel = Channel() CosStatusCallbackManager.getInstance().register(object : CosStatusCallback { override fun onStartUpload(data: CallbackData?) { @@ -35,7 +36,7 @@ internal class LogRecordUploader : ILogcatUploader { override fun uploadCosCompleted(data: CallbackData?) { if (data?.localPath == generatedZipPath) { Log.d(TAG, "---- uploadCosCompleted ---: $data") - trySend(UploadSuccess) + channel.trySend(UploadSuccess) CosStatusCallbackManager.getInstance().unregister(this) } } @@ -43,7 +44,7 @@ internal class LogRecordUploader : ILogcatUploader { override fun uploadCosFailed(data: CallbackData?) { if (data?.localPath == generatedZipPath) { Log.d(TAG, "---- uploadCosFailed ---: $data") - trySend(UploadError(Reason(data.exception))) + channel.trySend(UploadError(Reason(data.exception))) CosStatusCallbackManager.getInstance().unregister(this) } } @@ -58,8 +59,13 @@ internal class LogRecordUploader : ILogcatUploader { UploadManager.getInstance().uploadSingleFile(generatedZipPath) } catch (t: Throwable) { Log.d(TAG, "---- 上传失败 ---: ${t.message}") - trySend(UploadError(Reason(t.message ?: ""))) + channel.send(UploadError(Reason(t.message ?: ""))) } - }.flowOn(ThreadUtils.getIoPool().asCoroutineDispatcher()).firstOrNull() ?: UploadError(Reason("UnKnown reason")) + val iterator = channel.iterator() + while (iterator.hasNext()) { + val next = iterator.next() + emit(next) + } + }.flowOn(ThreadUtils.getIoPool().asCoroutineDispatcher()).filter { it is UploadError || it == UploadSuccess }.first() } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 0122f7417c..9afcb519c2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -1381,27 +1381,19 @@ internal class DebugSettingView @JvmOverloads constructor( v.visibility = View.INVISIBLE logLoadingView?.visibility = View.VISIBLE v.scope.launch(Dispatchers.IO) { - val file = CallerDevaToolsManager.logcat()?.export() - if (file != null && file.exists()) { - withContext(Dispatchers.Main) { - var activity = AppStateManager.currentActivity() - while (activity == null) { - delay(2000) - activity = AppStateManager.currentActivity() - if (activity != null) { - break - } - } - activity?.startActivity(Intent.createChooser(Intent().also { - it.action = Intent.ACTION_SEND - it.type = "application/zip" - it.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(activity, "${activity.packageName}.fileProvider", file)) - }, "分享全量日志压缩包到")) - } - } else { - ToastUtils.showShort("全量日志压缩文件生成失败") + var isUploadSuccess = false + try { + CallerDevaToolsManager.logcat()?.upload() + isUploadSuccess = true + } catch (t: Throwable) { + t.printStackTrace() } withContext(Dispatchers.Main) { + if (isUploadSuccess) { + ToastUtils.showShort("上传成功") + } else { + ToastUtils.showShort("上传失败") + } logLoadingView?.visibility = View.INVISIBLE exportAllLogs?.visibility = View.VISIBLE } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index c377837ecb..52650e45ff 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -2246,7 +2246,7 @@ android:layout_gravity="center"> diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt index 7d3a906462..8b1956a9fd 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/devatools/logcat/IMoGoLogRecordProvider.kt @@ -13,6 +13,8 @@ interface IMoGoLogRecordProvider { fun export(): File? + fun upload() + fun testJavaCrash(runOnNewThread: Boolean) fun testNativeCrash(runOnNewThread: Boolean)