[6.11.0] ADAS LIB中进行的异常捕获,包括解析异常和数据使用异常(UI层)添加到链路日志以及log堆栈打印

This commit is contained in:
xinfengkun
2025-03-06 10:55:53 +08:00
parent 9cbb70ca3d
commit d9b47b3326
4 changed files with 54 additions and 14 deletions

View File

@@ -14,6 +14,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_AD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_CONFIG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_LOC
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_COLD_START_STATE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ALL_ERROR
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FM_MSG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FSM_MSG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN
@@ -119,6 +120,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import com.zhjt.mogo.adas.utils.ByteUtil
import com.zhjt.service.chain.ChainLog
import fault_management.FmInfo
import fsm.Fsm2024
@@ -138,6 +140,8 @@ import prediction.Prediction
import record_cache.RecordPanelOuterClass
import system_master.SsmInfo
import system_master.SystemStatusInfo
import java.io.PrintWriter
import java.io.StringWriter
import kotlin.math.roundToInt
/**
@@ -1534,11 +1538,43 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
/**
* 数据解析失败、数据异常回调
* @param status 错误原因
* @param bytes 原始数据
* ADAS LIB中进行的异常捕获包括解析异常和数据使用异常UI层
*
* @param status 错误原因
* @param bytes 原始数据
* @param exception 异常堆栈 status==ProtocolStatus.BUSINESS_DATA_PARSE_FAILED 或 ProtocolStatus.HEADER_DECODE_FAILED 时才存在异常信息
*/
override fun onError(status: ProtocolStatus, bytes: ByteArray) {
CallerLogger.e("$M_D_C$TAG", "status===$status")
override fun onError(
status: ProtocolStatus,
bytes: ByteArray?,
exception: java.lang.Exception?
) {
val s = status.desc
val b = try {
if (bytes == null || bytes.isEmpty()) "NULL" else ByteUtil.byteArrToHex(bytes, false)
} catch (ex: Exception) {
"转换异常:" + ex.message
}
val e =
if ((status == ProtocolStatus.BUSINESS_DATA_PARSE_FAILED || status == ProtocolStatus.HEADER_DECODE_FAILED) && exception != null) {
val sw = StringWriter()
val pw = PrintWriter(sw)
exception.printStackTrace(pw)
sw.toString().trim()
} else {
"NULL"
}
adasError(s, b, e)
CallerLogger.e("$M_D_C$TAG", "数据错误 协议状态:$s 异常堆栈:$e")
}
@ChainLog(
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_ALL_ERROR,
paramIndexes = [0, 1, 2]
)
private fun adasError(status: String, bytes: String, error: String) {
}
}

View File

@@ -78,6 +78,7 @@ class ChainConstant {
const val CHAIN_CODE_ADAS_AUTOPILOT_INFO = "CHAIN_CODE_ADAS_AUTOPILOT_INFO"
const val CHAIN_CODE_ADAS_COLD_START_STATE = "CHAIN_CODE_ADAS_COLD_START_STATE"
const val CHAIN_CODE_ADAS_LOST_FRAME = "CHAIN_CODE_ADAS_LOST_FRAME"
const val CHAIN_CODE_ADAS_ALL_ERROR = "CHAIN_CODE_ADAS_ALL_ERROR"//ADAS LIB中进行的异常捕获包括解析异常和数据使用异常UI层
const val CHAIN_CODE_RECORD_NATIVE_LEAK = "CHAIN_CODE_RECORD_NATIVE_LEAK"

View File

@@ -533,8 +533,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
}
}
} catch (Exception e) {
callError(ProtocolStatus.HEADER_DECODE_FAILED, byteString.toByteArray());
CupidLogUtils.e(TAG, "原始数据:" + ByteUtil.byteArrToHex(byteString.toByteArray()), e);
callError(ProtocolStatus.HEADER_DECODE_FAILED, byteString.toByteArray(), e);
}
}
@@ -664,14 +663,17 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
callError(raw.getProtocolStatus(), raw.originalData.toByteArray());
}
} catch (Exception e) {
callError(ProtocolStatus.BUSINESS_DATA_PARSE_FAILED, raw.originalData.toByteArray());
CupidLogUtils.e(TAG, "原始数据:" + ByteUtil.byteArrToHex(raw.originalData.toByteArray()), e);
callError(ProtocolStatus.BUSINESS_DATA_PARSE_FAILED, raw.originalData.toByteArray(), e);
}
}
private void callError(ProtocolStatus status, byte[] bytes) {
callError(status, bytes, null);
}
private void callError(ProtocolStatus status, byte[] bytes, Exception exception) {
if (mAdasListener != null) {
mAdasListener.onError(status, bytes);
mAdasListener.onError(status, bytes, exception);
}
}

View File

@@ -706,10 +706,11 @@ public interface OnAdasListener {
void onAutopilotStatistics(AutopilotStatistics statistics);
/**
* 数据错误
* ADAS LIB中进行的异常捕获包括解析异常和数据使用异常UI层
*
* @param status 错误原因
* @param bytes 原始数据
* @param status 错误原因
* @param bytes 原始数据
* @param exception 异常堆栈 status==ProtocolStatus.BUSINESS_DATA_PARSE_FAILED 或 ProtocolStatus.HEADER_DECODE_FAILED 时才存在异常信息
*/
void onError(ProtocolStatus status, byte[] bytes);
void onError(@NonNull ProtocolStatus status, @Nullable byte[] bytes, @Nullable Exception exception);
}