Merge branch 'dev_robotaxi-d_230809_6.0.0' into 6.0.0merge2master
# Conflicts: # OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java # libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java # libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java
This commit is contained in:
@@ -18,6 +18,7 @@ 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.*
|
||||
@@ -40,10 +41,10 @@ import com.mogo.weak.network.SdtManager
|
||||
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.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.koom.KoomInitTask
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.*
|
||||
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager
|
||||
import com.zhjt.mogo_core_function_devatools.lookaround.*
|
||||
@@ -83,6 +84,8 @@ class DevaToolsProvider : IDevaToolsProvider {
|
||||
|
||||
private val logRecordProvider by lazy { MoGoLogRecordProviderImpl() }
|
||||
|
||||
private val block by lazy { MoGoBlockProviderImpl() }
|
||||
|
||||
@Volatile
|
||||
private var mDockerVersion: String? = null
|
||||
|
||||
@@ -94,7 +97,6 @@ class DevaToolsProvider : IDevaToolsProvider {
|
||||
//链路相关
|
||||
traceManager.init(mContext!!)
|
||||
if (DebugConfig.isDebug()) {
|
||||
KoomInitTask.init(AbsMogoApplication.getApp())
|
||||
initMatrix()
|
||||
}
|
||||
ttsManager.initTts(mContext!!) //todo 扶风 优化
|
||||
@@ -122,6 +124,11 @@ class DevaToolsProvider : IDevaToolsProvider {
|
||||
logRecordProvider.init(it)
|
||||
logRecordProvider.start()
|
||||
}
|
||||
|
||||
mContext?.also {
|
||||
block.init(it)
|
||||
block.start()
|
||||
}
|
||||
}
|
||||
|
||||
override fun checkMonitorDb() {
|
||||
@@ -285,6 +292,10 @@ class DevaToolsProvider : IDevaToolsProvider {
|
||||
iPCReportManager.showReportListWindow(context, isShow)
|
||||
}
|
||||
|
||||
override fun getReportWindowStatus(): Boolean {
|
||||
return iPCReportManager.getReportWindowStatus()
|
||||
}
|
||||
|
||||
override fun downLoadPackage(type: DownloadType, downloadKey: String, downloadUrl: String) {
|
||||
upgradeManager.downLoadPackage(mContext!!,type, downloadKey, downloadUrl)
|
||||
}
|
||||
@@ -377,4 +388,6 @@ class DevaToolsProvider : IDevaToolsProvider {
|
||||
override fun mofang(): IMoGoMoFangProvider = mofangProvider
|
||||
|
||||
override fun logRecord(): IMoGoLogRecordProvider = logRecordProvider
|
||||
|
||||
override fun block(): IMoGoBlockProvider? = null
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Handler
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
@@ -19,6 +18,8 @@ import com.mogo.eagle.core.data.deva.badcase.SubBagEntity
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
|
||||
import com.zhidao.loglib.download.DownloadManager
|
||||
@@ -116,7 +117,7 @@ class BadCaseManagerView @JvmOverloads constructor(
|
||||
if(bagManagerList.size>0){
|
||||
bagManagerEntity.reqType = 3
|
||||
bagManagerEntity.keyReq = bagManagerList[0].key
|
||||
Log.i("sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq)
|
||||
CallerLogger.i(M_DEVA+"sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq)
|
||||
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
|
||||
|
||||
bagUploadDialog = BagUploadDialog(context)
|
||||
@@ -237,24 +238,24 @@ class BadCaseManagerView @JvmOverloads constructor(
|
||||
override fun onBagManagerResult(bagManager: BagManagerOuterClass.BagManager) {
|
||||
super.onBagManagerResult(bagManager)
|
||||
UiThreadHandler.post {
|
||||
Log.i(TAG,"onBagManagerResult Start")
|
||||
Log.i(TAG,"keyReq="+bagManager.keyReq)
|
||||
Log.i(TAG,"reqType="+bagManager.reqType)
|
||||
Log.i(TAG,"uploadCosResp stat="+bagManager.uploadCosResp.stat)
|
||||
Log.i(TAG,"descReq description="+bagManager.descReq.description
|
||||
CallerLogger.i(M_DEVA + TAG,"onBagManagerResult Start")
|
||||
CallerLogger.i(M_DEVA + TAG,"keyReq="+bagManager.keyReq)
|
||||
CallerLogger.i(M_DEVA + TAG,"reqType="+bagManager.reqType)
|
||||
CallerLogger.i(M_DEVA + TAG,"uploadCosResp stat="+bagManager.uploadCosResp.stat)
|
||||
CallerLogger.i(M_DEVA + TAG,"descReq description="+bagManager.descReq.description
|
||||
+" audioUrl="+bagManager.descReq.audioUrl
|
||||
+" reportBI="+bagManager.descReq.reportBI
|
||||
+" hasAudio="+bagManager.descReq.hasAudio)
|
||||
for(logBag in bagManager.bagsInfoRespList){
|
||||
Log.i(TAG,"bagPath="+logBag.bagPath)
|
||||
Log.i(TAG,"timestamp="+logBag.timestamp)
|
||||
Log.i(TAG,"description="+logBag.description)
|
||||
Log.i(TAG,"key="+logBag.key)
|
||||
Log.i(TAG,"mergeStat="+logBag.mergeStat)
|
||||
Log.i(TAG,"totalSize="+logBag.totalSize)
|
||||
Log.i(TAG,"uploadStat="+logBag.uploadStat)
|
||||
CallerLogger.i(M_DEVA + TAG,"bagPath="+logBag.bagPath)
|
||||
CallerLogger.i(M_DEVA + TAG,"timestamp="+logBag.timestamp)
|
||||
CallerLogger.i(M_DEVA + TAG,"description="+logBag.description)
|
||||
CallerLogger.i(M_DEVA + TAG,"key="+logBag.key)
|
||||
CallerLogger.i(M_DEVA + TAG,"mergeStat="+logBag.mergeStat)
|
||||
CallerLogger.i(M_DEVA + TAG,"totalSize="+logBag.totalSize)
|
||||
CallerLogger.i(M_DEVA + TAG,"uploadStat="+logBag.uploadStat)
|
||||
}
|
||||
Log.i(TAG,"onBagManagerResult End")
|
||||
CallerLogger.i(M_DEVA + TAG,"onBagManagerResult End")
|
||||
|
||||
//获取空间使用信息
|
||||
if(bagManager.reqType == 1){
|
||||
@@ -367,7 +368,7 @@ class BadCaseManagerView @JvmOverloads constructor(
|
||||
//执行下一个上传Bag命令
|
||||
bagManagerEntity.reqType = 3
|
||||
bagManagerEntity.keyReq = bagManagerList[0].key
|
||||
Log.i("sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq)
|
||||
CallerLogger.i("sendBagManagerCmd","bagManagerEntity.keyReq="+bagManagerEntity.keyReq)
|
||||
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.mogo.eagle.core.utilcode.util.TimeUtils.millis2String
|
||||
import com.zhidao.loglib.call.LogInfoManagerFactory
|
||||
import com.zhidao.loglib.upload.OnUploadListener
|
||||
import com.zhidao.loglib.upload.UploadManager
|
||||
import com.zhidao.loglib.util.FileUtil
|
||||
import com.zhjt.mogo_core_function_devatools.R
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager
|
||||
@@ -249,14 +250,18 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
val singlePath = "/mnt/sdcard/mogo/DataCollection/${audioFileName}.wav"
|
||||
val file = File(singlePath)
|
||||
if(file.exists()){
|
||||
LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext,"Audio",singlePath,
|
||||
LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext,
|
||||
TAG, MoGoAiCloudClientConfig.getInstance().sn,singlePath,
|
||||
object : OnUploadListener {
|
||||
override fun onUploadSuccess(filePath: String, downloadUrl: String) {
|
||||
override fun onUploadSuccess(key: String, filePath: String, downloadUrl: String) {
|
||||
CallerLogger.d("$M_DEVA$TAG", "语音文件上传成功:downloadUrl=$downloadUrl")
|
||||
//将语音文件上传Cos监听移除
|
||||
removeUploadListener(singlePath)
|
||||
//上传到服务器
|
||||
upload(downloadUrl)
|
||||
if(key == TAG){
|
||||
FileUtil.deleteFile(File(filePath))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onUploadFail(filePath: String) {
|
||||
|
||||
@@ -40,6 +40,7 @@ import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import com.zhidao.loglib.upload.UploadManager
|
||||
import com.zhidao.loglib.util.FileUtil
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
@@ -211,14 +212,18 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
val singlePath = "/mnt/sdcard/mogo/DataCollection/${audioFileName}.wav"
|
||||
val file = File(singlePath)
|
||||
if(file.exists()){
|
||||
LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext,"Audio",singlePath,
|
||||
LogInfoManagerFactory.createAudioUpload(mActivity.applicationContext,
|
||||
TAG, MoGoAiCloudClientConfig.getInstance().sn,singlePath,
|
||||
object : OnUploadListener {
|
||||
override fun onUploadSuccess(filePath: String, downloadUrl: String) {
|
||||
override fun onUploadSuccess(key: String, filePath: String, downloadUrl: String) {
|
||||
CallerLogger.d("$M_DEVA$TAG", "语音文件上传成功:downloadUrl=$downloadUrl")
|
||||
//将语音文件上传Cos监听移除
|
||||
removeUploadListener(singlePath)
|
||||
//上传到服务器
|
||||
upload(downloadUrl)
|
||||
if(key == TAG){
|
||||
FileUtil.deleteFile(File(filePath))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onUploadFail(filePath: String) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.zhjt.mogo_core_function_devatools.badcase.record;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_DEVA;
|
||||
|
||||
import android.media.AudioRecord;
|
||||
import android.media.MediaRecorder;
|
||||
import android.os.Environment;
|
||||
@@ -164,8 +166,7 @@ public class RecordHelper {
|
||||
mp3EncodeThread = new Mp3EncodeThread(resultFile, bufferSize, currentConfig);
|
||||
mp3EncodeThread.start();
|
||||
} catch (Exception e) {
|
||||
// Log.e(e, TAG, e.getMessage());
|
||||
CallerLogger.INSTANCE.d("$M_DEVA$TAG", e.getMessage());
|
||||
CallerLogger.d(M_DEVA+TAG, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,14 +177,14 @@ public class RecordHelper {
|
||||
AudioRecordThread() {
|
||||
bufferSize = AudioRecord.getMinBufferSize(currentConfig.getSampleRate(),
|
||||
currentConfig.getChannelConfig(), currentConfig.getEncodingConfig()) * RECORD_AUDIO_BUFFER_TIMES;
|
||||
CallerLogger.INSTANCE.d("$M_DEVA$TAG", "record buffer size = %s", bufferSize);
|
||||
CallerLogger.d("$M_DEVA$TAG", "record buffer size = %s", bufferSize);
|
||||
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, currentConfig.getSampleRate(),
|
||||
currentConfig.getChannelConfig(), currentConfig.getEncodingConfig(), bufferSize);
|
||||
if (currentConfig.getFormat() == RecordConfig.RecordFormat.MP3) {
|
||||
if (mp3EncodeThread == null) {
|
||||
initMp3EncoderThread(bufferSize);
|
||||
} else {
|
||||
CallerLogger.INSTANCE.e("$M_DEVA$TAG", "mp3EncodeThread != null, 请检查代码");
|
||||
CallerLogger.e("$M_DEVA$TAG", "mp3EncodeThread != null, 请检查代码");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -205,7 +206,7 @@ public class RecordHelper {
|
||||
private void startPcmRecorder() {
|
||||
state = RecordState.RECORDING;
|
||||
notifyState();
|
||||
CallerLogger.INSTANCE.d("$M_DEVA$TAG", "开始录制 Pcm");
|
||||
CallerLogger.d("$M_DEVA$TAG", "开始录制 Pcm");
|
||||
FileOutputStream fos = null;
|
||||
try {
|
||||
fos = new FileOutputStream(tmpFile);
|
||||
@@ -223,7 +224,7 @@ public class RecordHelper {
|
||||
if (state == RecordState.STOP) {
|
||||
makeFile();
|
||||
} else {
|
||||
CallerLogger.INSTANCE.i("$M_DEVA$TAG", "暂停!");
|
||||
CallerLogger.i("$M_DEVA$TAG", "暂停!");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
notifyError("录音失败");
|
||||
@@ -239,7 +240,7 @@ public class RecordHelper {
|
||||
if (state != RecordState.PAUSE) {
|
||||
state = RecordState.IDLE;
|
||||
notifyState();
|
||||
CallerLogger.INSTANCE.d("$M_DEVA$TAG", "录音结束");
|
||||
CallerLogger.d("$M_DEVA$TAG", "录音结束");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +268,7 @@ public class RecordHelper {
|
||||
notifyState();
|
||||
stopMp3Encoded();
|
||||
} else {
|
||||
CallerLogger.INSTANCE.d("$M_DEVA$TAG", "暂停");
|
||||
CallerLogger.d("$M_DEVA$TAG", "暂停");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -282,7 +283,7 @@ public class RecordHelper {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
CallerLogger.INSTANCE.e("$M_DEVA$TAG", "mp3EncodeThread is null, 代码业务流程有误,请检查!! ");
|
||||
CallerLogger.e("$M_DEVA$TAG", "mp3EncodeThread is null, 代码业务流程有误,请检查!! ");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,7 +302,7 @@ public class RecordHelper {
|
||||
break;
|
||||
}
|
||||
notifyFinish();
|
||||
CallerLogger.INSTANCE.i("$M_DEVA$TAG", "录音完成! path: %s ; 大小:%s", resultFile.getAbsoluteFile(), resultFile.length());
|
||||
CallerLogger.i("$M_DEVA$TAG", "录音完成! path: %s ; 大小:%s", resultFile.getAbsoluteFile(), resultFile.length());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -353,7 +354,7 @@ public class RecordHelper {
|
||||
inputStream.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
CallerLogger.e(M_DEVA + TAG, e.getMessage());
|
||||
return false;
|
||||
} finally {
|
||||
try {
|
||||
@@ -376,7 +377,7 @@ public class RecordHelper {
|
||||
|
||||
private String getFilePath(String fileName) {
|
||||
if (!FileUtils.createOrExistsDir(ROOT_PATH)) {
|
||||
CallerLogger.INSTANCE.w("$M_DEVA$TAG", "文件夹创建失败:%s", ROOT_PATH);
|
||||
CallerLogger.w("$M_DEVA$TAG", "文件夹创建失败:%s", ROOT_PATH);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -387,7 +388,7 @@ public class RecordHelper {
|
||||
|
||||
private String getTempFilePath() {
|
||||
if (!FileUtils.createOrExistsDir(TEMP_PATH)) {
|
||||
CallerLogger.INSTANCE.e("$M_DEVA$TAG", "文件夹创建失败:%s", TEMP_PATH);
|
||||
CallerLogger.e("$M_DEVA$TAG", "文件夹创建失败:%s", TEMP_PATH);
|
||||
}
|
||||
String fileName = String.format(Locale.getDefault(), "tmp_%s", FileUtils.getNowString(new SimpleDateFormat("yyyyMMddHHmmssSSS", Locale.SIMPLIFIED_CHINESE)));
|
||||
return String.format(Locale.getDefault(), "%s%s.pcm", TEMP_PATH, fileName);
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.zhjt.mogo_core_function_devatools.badcase.record.mp3;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_DEVA;
|
||||
|
||||
import android.media.MediaExtractor;
|
||||
import android.media.MediaFormat;
|
||||
import android.util.Log;
|
||||
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.util.FileUtils;
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordConfig;
|
||||
|
||||
@@ -34,7 +36,7 @@ public class Mp3Utils {
|
||||
long duration = mf.getLong(MediaFormat.KEY_DURATION) / 1000L;
|
||||
return duration;
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
CallerLogger.e(M_DEVA +TAG, e.getMessage());
|
||||
} finally {
|
||||
if (mex != null) {
|
||||
mex.release();
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.zhjt.mogo_core_function_devatools.binding
|
||||
import android.annotation.*
|
||||
import android.content.Context
|
||||
import android.text.TextUtils
|
||||
import android.util.*
|
||||
import com.elegant.utils.UiThreadHandler
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.commons.constants.SharedPrefsConstants
|
||||
@@ -18,7 +17,7 @@ import com.mogo.eagle.core.function.call.obu.CallerObuApiManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isDriver
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils.isPassenger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
|
||||
import com.zhjt.mogo_core_function_devatools.upgrade.IPCUpgradeManager.Companion.ipcUpgradeManager
|
||||
import com.zhjt.mogo_core_function_devatools.upgrade.ObuUpgradeAppNetWorkManager
|
||||
@@ -61,9 +60,9 @@ object BindingCarManager : IMoGoAutopilotCarConfigListener {
|
||||
}
|
||||
|
||||
override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) {
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${TAG}", "onAutopilotCarConfig ----------> ")
|
||||
CallerLogger.d("${M_DEVA}${TAG}", "onAutopilotCarConfig ----------> ")
|
||||
if (!TextUtils.isEmpty(carConfigResp.macAddress)) {
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${TAG}",
|
||||
CallerLogger.d("${M_DEVA}${TAG}",
|
||||
"onAutopilotCarConfig carConfigResp.macAddress = ${carConfigResp.macAddress} ")
|
||||
getBindingCarInfo(carConfigResp.macAddress, MoGoAiCloudClientConfig.getInstance().sn)
|
||||
}
|
||||
@@ -89,7 +88,7 @@ object BindingCarManager : IMoGoAutopilotCarConfigListener {
|
||||
queryObuUpgrade(obuVersion)
|
||||
}
|
||||
}
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${TAG}",
|
||||
CallerLogger.d("${M_DEVA}${TAG}",
|
||||
"getBindingcarInfo macAddress = $macAddress--widevineIDWithMd5 = $widevineIDWithMd5 ---screenType = $screenType"
|
||||
)
|
||||
SharedPrefsMgr.getInstance(mContext!!).putString(SharedPrefsConstants.APP_MAC, macAddress)
|
||||
@@ -179,10 +178,10 @@ object BindingCarManager : IMoGoAutopilotCarConfigListener {
|
||||
* 查询app是否需要升级
|
||||
*/
|
||||
fun queryAppUpgrade() {
|
||||
Log.d("UPGRADE", "---- 1 ----")
|
||||
CallerLogger.d(M_DEVA+"UPGRADE", "---- 1 ----")
|
||||
var macAddress = mAddress
|
||||
if (TextUtils.isEmpty(macAddress)) {
|
||||
Log.d("UPGRADE", "---- 2 ----")
|
||||
CallerLogger.d(M_DEVA+"UPGRADE", "---- 2 ----")
|
||||
macAddress = SharedPrefsMgr.getInstance(mContext!!)
|
||||
.getString(SharedPrefsConstants.APP_MAC)
|
||||
}
|
||||
@@ -190,7 +189,7 @@ object BindingCarManager : IMoGoAutopilotCarConfigListener {
|
||||
if (!TextUtils.equals(macAddress, mAddress)) {
|
||||
mAddress = macAddress
|
||||
}
|
||||
Log.d("UPGRADE", "---- 3 ----[mac: $macAddress]")
|
||||
CallerLogger.d(M_DEVA+"UPGRADE", "---- 3 ----[mac: $macAddress]")
|
||||
UpgradeAppNetWorkManager.instance
|
||||
?.getAppUpgradeInfo(mContext, macAddress, role.toString() + "")
|
||||
}
|
||||
@@ -202,9 +201,9 @@ object BindingCarManager : IMoGoAutopilotCarConfigListener {
|
||||
*/
|
||||
fun queryObuUpgrade(obuVersionName: String) {
|
||||
mObuVersion = obuVersionName
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${MogoObuConst.TAG_UPGRADE_OBU}", "screenType = $screenType ----role = $role")
|
||||
CallerLogger.d("${M_DEVA}${MogoObuConst.TAG_UPGRADE_OBU}", "screenType = $screenType ----role = $role")
|
||||
if (screenType == 1) {
|
||||
CallerLogger.d("${SceneConstant.M_DEVA}${MogoObuConst.TAG_UPGRADE_OBU}","queryObuUpgrade isConnected = ${CallerObuApiManager.isConnected()} --- mAddress = $mAddress")
|
||||
CallerLogger.d("${M_DEVA}${MogoObuConst.TAG_UPGRADE_OBU}","queryObuUpgrade isConnected = ${CallerObuApiManager.isConnected()} --- mAddress = $mAddress")
|
||||
ObuUpgradeAppNetWorkManager.instance?.getObuUpgradeInfo(if(!mAddress.isNullOrEmpty()) mAddress else SharedPrefsMgr.getInstance(mContext!!).getString(SharedPrefsConstants.APP_MAC), obuVersionName)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.zhjt.mogo_core_function_devatools.block
|
||||
|
||||
import com.mogo.eagle.core.data.deva.chain.*
|
||||
import com.zhjt.service.chain.*
|
||||
|
||||
internal class MainBlockLinkedLog {
|
||||
|
||||
fun record(extra: Map<String, List<String>>) {
|
||||
try {
|
||||
recordInternal(extra)
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
linkChainLog = ChainConstant.CHAIN_TYPE_HMI,
|
||||
linkCode = ChainConstant.CHAIN_SOURCE_HMI,
|
||||
nodeAliasCode = ChainConstant.CHAIN_CODE_MAIN_BLOCK,
|
||||
paramIndexes = [0]
|
||||
)
|
||||
private fun recordInternal(extra: Map<String, List<String>>) {}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.zhjt.mogo_core_function_devatools.block
|
||||
|
||||
import android.content.*
|
||||
import android.util.*
|
||||
import android.view.*
|
||||
import androidx.metrics.performance.*
|
||||
import com.mogo.eagle.core.block.runtime.*
|
||||
import com.mogo.eagle.core.block.runtime.config.*
|
||||
import com.mogo.eagle.core.block.runtime.config.recorder.*
|
||||
import com.mogo.eagle.core.block.runtime.config.recorder.IMessageRecorder.OnDumpListener
|
||||
import com.mogo.eagle.core.block.runtime.listener.*
|
||||
import com.mogo.eagle.core.block.runtime.report.*
|
||||
import com.mogo.eagle.core.function.api.devatools.block.*
|
||||
import java.util.concurrent.TimeUnit.SECONDS
|
||||
|
||||
internal class MoGoBlockProviderImpl: IMoGoBlockProvider, IBlockListener {
|
||||
|
||||
@Volatile
|
||||
private var hasInit = false
|
||||
|
||||
private val linkedLog by lazy { MainBlockLinkedLog() }
|
||||
|
||||
override fun init(ctx: Context) {
|
||||
BlockDetector.init(BlockMetrics.Builder()
|
||||
.context(ctx)
|
||||
.multiplier(2.0f)
|
||||
.isDebug(false)
|
||||
.period(5, SECONDS)
|
||||
.junkRateThreshold(0.8f)
|
||||
.recorder(null, 1000, 512)
|
||||
.build())
|
||||
hasInit = true
|
||||
}
|
||||
|
||||
override fun hasInit(): Boolean {
|
||||
return hasInit
|
||||
}
|
||||
|
||||
override fun start() {
|
||||
BlockDetector.start()
|
||||
BlockDetector.addListener(this)
|
||||
}
|
||||
|
||||
override fun onBlockReport(info: ReportInfo) {
|
||||
Log.d("BLOCK", "--- onBlockReport ---: ${info.frames.size}")
|
||||
val map = mutableMapOf<String, List<String>>()
|
||||
map["frames"] = info.frames.map { "$it" }
|
||||
BlockDetector.recorder().dump(object: OnDumpListener {
|
||||
override fun OnDumped(data: Map<Int, List<String>>) {
|
||||
map["history"] = data[0] ?: emptyList()
|
||||
map["pending"] = data[1] ?: emptyList()
|
||||
linkedLog.record(map)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun monitor(window: Window) {
|
||||
BlockDetector.monitor(window)
|
||||
}
|
||||
|
||||
override fun pause(window: Window) {
|
||||
BlockDetector.pause(window)
|
||||
}
|
||||
|
||||
override fun addState(window: Window, key: String, status: String) {
|
||||
val holder = PerformanceMetricsState.getHolderForHierarchy(window.decorView)
|
||||
holder.state?.putState(key, status)
|
||||
}
|
||||
|
||||
override fun resume(window: Window) {
|
||||
BlockDetector.resume(window)
|
||||
}
|
||||
|
||||
override fun pop(window: Window) {
|
||||
BlockDetector.pop(window)
|
||||
}
|
||||
|
||||
override fun stop() {
|
||||
BlockDetector.removeListener(this)
|
||||
BlockDetector.stop()
|
||||
}
|
||||
|
||||
override fun recorder(): IMessageRecorder {
|
||||
|
||||
return BlockDetector.recorder()
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.zhjt.mogo_core_function_devatools.koom
|
||||
|
||||
import android.app.Application
|
||||
import android.os.Build
|
||||
import com.kwai.koom.base.CommonConfig
|
||||
import com.kwai.koom.base.InitTask
|
||||
import com.kwai.koom.base.MonitorManager
|
||||
|
||||
object KoomInitTask : InitTask {
|
||||
override fun init(application: Application) {
|
||||
val config = CommonConfig.Builder()
|
||||
.setApplication(application) // Set application
|
||||
.setDebugMode(false)
|
||||
.setVersionNameInvoker { "1.0.0" } // Set version name, java leak feature use it
|
||||
.setSdkVersionMatch(
|
||||
Build.VERSION.SDK_INT <= 31 && Build.VERSION.SDK_INT
|
||||
>= Build.VERSION_CODES.LOLLIPOP
|
||||
) // Set if current sdk version is supported
|
||||
.build()
|
||||
|
||||
MonitorManager.initCommonConfig(config)
|
||||
.apply { onApplicationCreate() }
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,44 @@
|
||||
package com.zhjt.mogo_core_function_devatools.logcat
|
||||
|
||||
import android.content.*
|
||||
import android.os.Build
|
||||
import android.os.Process
|
||||
import android.util.*
|
||||
import android.os.SystemClock
|
||||
import android.util.Log
|
||||
import com.mogo.aicloud.services.socket.IMogoOnMessageListener
|
||||
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.*
|
||||
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.mogo.eagle.core.utilcode.util.*
|
||||
import com.zhidao.loglib.bean.RemoteLogPushContent
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.config.LogRecordConfig
|
||||
import com.zhjt.mogo_core_function_devatools.logcat.uploader.*
|
||||
import kotlinx.coroutines.*
|
||||
import java.io.*
|
||||
import java.util.concurrent.TimeUnit.MINUTES
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import java.util.concurrent.atomic.AtomicLong
|
||||
|
||||
internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider {
|
||||
internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider,
|
||||
IMogoOnMessageListener<RemoteLogPushContent> {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "MoGoLogRecordProviderImpl"
|
||||
}
|
||||
|
||||
private val flag by lazy { AtomicBoolean(false) }
|
||||
|
||||
private val scope by lazy { CoroutineScope(Dispatchers.IO + SupervisorJob()) }
|
||||
|
||||
private val uploadThreshold by lazy { MINUTES.toMillis(1) } //全量日志的上传的安全时间,在此时间内,上传任务只会触发一次
|
||||
|
||||
private val lastUploadTime by lazy { AtomicLong(0) }
|
||||
|
||||
override fun init(context: Context) {
|
||||
val zipDir = File(context.getExternalFilesDir(null), "logcat/zip")
|
||||
LogcatManager.init(LogcatConfig.Builder().context(context)
|
||||
@@ -28,32 +47,121 @@ 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<String, Any?> {
|
||||
return mutableMapOf<String, Any?>().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"))
|
||||
.javaCrash(true)
|
||||
.anr(true)
|
||||
.nativeCrash(true)
|
||||
.build())
|
||||
.uploader(LogRecordUploader()))
|
||||
scope.launch {
|
||||
try {
|
||||
if (zipDir.exists()) {
|
||||
zipDir.listFiles()?.forEach {
|
||||
it.delete()
|
||||
}
|
||||
}
|
||||
zipDir.takeIf { it.exists() }?.deleteRecursively()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun target(): Class<RemoteLogPushContent> {
|
||||
return RemoteLogPushContent::class.java
|
||||
}
|
||||
|
||||
override fun onMsgReceived(obj: RemoteLogPushContent?) {
|
||||
Log.d(TAG, "--- onMsgReceived --: $obj")
|
||||
if (obj == null) return
|
||||
val endTime = System.currentTimeMillis()
|
||||
val startTime = when(obj.type) {
|
||||
LogRecordConfig.ALL_LOG_15_MINUTES -> endTime - MINUTES.toMillis(15)
|
||||
LogRecordConfig.ALL_LOG_30_MINUTES -> endTime - MINUTES.toMillis(30)
|
||||
LogRecordConfig.ALL_LOG_45_MINUTES -> endTime - MINUTES.toMillis(45)
|
||||
LogRecordConfig.ALL_LOG_60_MINUTES -> endTime - MINUTES.toMillis(60)
|
||||
LogRecordConfig.ALL_LOG_120_MINUTES -> endTime - MINUTES.toMillis(120)
|
||||
LogRecordConfig.ALL_LOG_SAME_DAY -> endTime - (endTime % 86400000)
|
||||
LogRecordConfig.ALL_LOG -> 0
|
||||
else -> endTime
|
||||
}
|
||||
Log.d(TAG, "--- onMsgReceived -- 1: $startTime, $endTime")
|
||||
if (startTime < endTime) {
|
||||
val now = System.currentTimeMillis()
|
||||
val last = lastUploadTime.get()
|
||||
if (last <= 0) {
|
||||
lastUploadTime.set(System.currentTimeMillis())
|
||||
}
|
||||
if (last > 0 && (now - last) <= uploadThreshold) {
|
||||
return
|
||||
}
|
||||
lastUploadTime.set(System.currentTimeMillis())
|
||||
scope.launch {
|
||||
LogcatManager.upload(startTime, endTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun start() {
|
||||
if (flag.get()) {
|
||||
return
|
||||
}
|
||||
flag.set(true)
|
||||
MogoAiCloudSocketManager.getInstance(AbsMogoApplication.getApp().applicationContext)
|
||||
.registerOnMessageListener(LogRecordConfig.LOG_RECORD_TYPE, this)
|
||||
LogcatManager.start()
|
||||
}
|
||||
|
||||
@@ -61,18 +169,32 @@ internal class MoGoLogRecordProviderImpl: IMoGoLogRecordProvider {
|
||||
if (!flag.get()) {
|
||||
return
|
||||
}
|
||||
MogoAiCloudSocketManager.getInstance(AbsMogoApplication.getApp().applicationContext)
|
||||
.unregisterOnMessageListener(LogRecordConfig.LOG_RECORD_TYPE, this)
|
||||
flag.set(false)
|
||||
LogcatManager.stop()
|
||||
}
|
||||
|
||||
override fun upload(startTime: Long, endTime: Long) {
|
||||
scope.launch {
|
||||
val result = LogcatManager.upload(startTime, endTime)
|
||||
Log.d(TAG, "上传日志:[startTime:$startTime, endTime: $endTime], 结果: $result")
|
||||
}
|
||||
}
|
||||
|
||||
override fun export(): File? {
|
||||
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)
|
||||
}
|
||||
|
||||
override fun testNativeCrash(runOnNewThread: Boolean) {
|
||||
LogcatManager.testNativeCrash(runOnNewThread)
|
||||
}
|
||||
|
||||
override fun testAnrCrash() {
|
||||
SystemClock.sleep(15000)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.zhjt.mogo_core_function_devatools.logcat.config
|
||||
|
||||
internal class LogRecordConfig {
|
||||
|
||||
companion object{
|
||||
|
||||
/**
|
||||
* 长链下行数据的消息类型
|
||||
*/
|
||||
const val LOG_RECORD_TYPE = 500002
|
||||
|
||||
|
||||
/**
|
||||
* 全量日志抓取: 上传从收到抓取指令往前15分钟的日志
|
||||
*/
|
||||
const val ALL_LOG_15_MINUTES = 1
|
||||
|
||||
/**
|
||||
* 全量日志抓取: 上传从收到抓取指令往前30分钟的日志
|
||||
*/
|
||||
const val ALL_LOG_30_MINUTES = 2
|
||||
|
||||
/**
|
||||
* 全量日志抓取: 上传从收到抓取指令往前45分钟的日志
|
||||
*/
|
||||
const val ALL_LOG_45_MINUTES = 3
|
||||
|
||||
/**
|
||||
* 全量日志抓取: 上传从收到抓取指令往前60分钟的日志
|
||||
*/
|
||||
const val ALL_LOG_60_MINUTES = 4
|
||||
|
||||
/**
|
||||
* 全量日志抓取: 上传从收到抓取指令往前120分钟的日志
|
||||
*/
|
||||
const val ALL_LOG_120_MINUTES = 5
|
||||
|
||||
/**
|
||||
* 全量日志抓取: 上传从收到抓取指令往前当天的日志
|
||||
*/
|
||||
const val ALL_LOG_SAME_DAY = 6
|
||||
|
||||
/**
|
||||
* 全量日志抓取: 上传从收到抓取指令之前所有的日志
|
||||
*/
|
||||
const val ALL_LOG = 7
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,71 @@
|
||||
package com.zhjt.mogo_core_function_devatools.logcat.uploader
|
||||
|
||||
import android.util.Log
|
||||
import com.mogo.core.log.record.config.uploader.*
|
||||
import com.mogo.core.log.record.model.*
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||
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.asCoroutineDispatcher
|
||||
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 {
|
||||
internal class LogRecordUploader : ILogcatUploader {
|
||||
|
||||
override suspend fun upload(startTime: Long, endTime: Long, generatedZipPath: String): UploadState {
|
||||
throw AssertionError("Not Implementation")
|
||||
companion object {
|
||||
private const val TAG = "LogRecordUploader"
|
||||
}
|
||||
|
||||
override suspend fun upload(startTime: Long, endTime: Long, generatedZipPath: String): UploadState =
|
||||
flow {
|
||||
Log.d(TAG, "---- 开始上传 --- 1 ---")
|
||||
val channel = Channel<UploadState>()
|
||||
CosStatusCallbackManager.getInstance().register(object : CosStatusCallback {
|
||||
|
||||
override fun onStartUpload(data: CallbackData?) {
|
||||
if (data?.localPath == generatedZipPath) {
|
||||
Log.d(TAG, "---- onStartUpload ---: $data")
|
||||
}
|
||||
}
|
||||
|
||||
override fun uploadCosCompleted(data: CallbackData?) {
|
||||
if (data?.localPath == generatedZipPath) {
|
||||
Log.d(TAG, "---- uploadCosCompleted ---: $data")
|
||||
channel.trySend(UploadSuccess)
|
||||
CosStatusCallbackManager.getInstance().unregister(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun uploadCosFailed(data: CallbackData?) {
|
||||
if (data?.localPath == generatedZipPath) {
|
||||
Log.d(TAG, "---- uploadCosFailed ---: $data")
|
||||
channel.trySend(UploadError(Reason(data.exception)))
|
||||
CosStatusCallbackManager.getInstance().unregister(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onProgress(data: CallbackData?) {
|
||||
if (data?.localPath == generatedZipPath) {
|
||||
Log.d(TAG, "---- onProgress ---: $data")
|
||||
}
|
||||
}
|
||||
})
|
||||
try {
|
||||
UploadManager.getInstance().uploadSingleFile(generatedZipPath)
|
||||
} catch (t: Throwable) {
|
||||
Log.d(TAG, "---- 上传失败 ---: ${t.message}")
|
||||
channel.send(UploadError(Reason(t.message ?: "")))
|
||||
}
|
||||
val iterator = channel.iterator()
|
||||
while (iterator.hasNext()) {
|
||||
val next = iterator.next()
|
||||
emit(next)
|
||||
}
|
||||
}.flowOn(ThreadUtils.getIoPool().asCoroutineDispatcher()).filter { it is UploadError || it == UploadSuccess }.first()
|
||||
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import com.mogo.eagle.core.function.api.map.deva.IMoGoMapDevaProvider
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapDevaListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.LogLevel
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
|
||||
@@ -223,6 +224,7 @@ object MogoLogCatchManager : IMogoOnMessageListener<RemoteLogPushContent>, Handl
|
||||
config.isShowDebugLog = true
|
||||
config.isShowNetDebugLog = true
|
||||
}
|
||||
CallerMapUIServiceManager.getMapUIController()?.setDebugMode(true)
|
||||
CallerAutoPilotControlManager.setEnableLog(true)
|
||||
}
|
||||
|
||||
@@ -236,6 +238,7 @@ object MogoLogCatchManager : IMogoOnMessageListener<RemoteLogPushContent>, Handl
|
||||
config.isShowDebugLog = false
|
||||
config.isShowNetDebugLog = false
|
||||
}
|
||||
CallerMapUIServiceManager.getMapUIController()?.setDebugMode(false)
|
||||
CallerAutoPilotControlManager.setEnableLog(false)
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import kotlinx.coroutines.flow.*
|
||||
import mogo.telematics.pad.MessagePad.Header
|
||||
import mogo.telematics.pad.MessagePad.SetParamReq
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import kotlin.concurrent.*
|
||||
|
||||
internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoBackCameraVideoListener, IMoGoRoboBusJinlvM1StitchedVideoListener, IMoGoGetParamResponseListener {
|
||||
|
||||
@@ -69,7 +68,9 @@ internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoBackCam
|
||||
private fun sendReqForParamPeriod() {
|
||||
scope.launch {
|
||||
while (targetX.get() == 0 || targetY.get() == 0) {
|
||||
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.M1_STITCHED_VIDEO_SELF_VEHICLE_PARAM)
|
||||
if(CallerAutoPilotStatusListenerManager.isConnect()){
|
||||
CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.M1_STITCHED_VIDEO_SELF_VEHICLE_PARAM)
|
||||
}
|
||||
delay(2000)
|
||||
}
|
||||
}.also {
|
||||
|
||||
@@ -15,6 +15,12 @@ internal class MoFangAnalyticUtils {
|
||||
const val EVENT_SUB_CONNECT_SUCCESS = "event_sub_connect_success"
|
||||
const val EVENT_SUB_START_DISCONNECT = "event_sub_start_disconnect"
|
||||
const val EVENT_SUB_DISCONNECT_SUCCESS = "event_sub_disconnect_success"
|
||||
const val EVENT_SUB_DISCONNECT_SLEEP = "event_sub_disconnect_sleep"
|
||||
const val EVENT_SUB_BLUETOOTH_SETTING_REQ = "event_sub_ble_set_req"
|
||||
const val EVENT_SUB_BLUETOOTH_OPEN_DENY = "event_sub_ble_open_deny"
|
||||
const val EVENT_SUB_BLUETOOTH_OPEN_AGREE = "event_sub_ble_open_agree"
|
||||
const val EVENT_SUB_IS_VALID = "event_sub_is_ipt_valid"
|
||||
const val EVENT_SUB_IS_INVALID = "event_sub_is_ipt_invalid"
|
||||
|
||||
// 魔方电量
|
||||
const val EVENT_BATTERY = "event_mofang_battery"
|
||||
|
||||
@@ -200,7 +200,7 @@ internal class MoFangCommandExecutor {
|
||||
handler.removeMessages(MSG_WHAT_KEY_CODE_AL)
|
||||
handler.sendMessage(Message.obtain().also {
|
||||
it.what = MSG_WHAT_KEY_CODE_A
|
||||
it.obj = -1.0
|
||||
it.obj = -1.2
|
||||
})
|
||||
linkedLog?.record(mapOf("发送[A]:${System.currentTimeMillis()}" to "${whatToString(MSG_WHAT_KEY_CODE_A)}"))
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ import com.mogo.core.mofang.connect.listener.*
|
||||
import com.mogo.eagle.core.function.api.devatools.mofang.*
|
||||
import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider.OnMoFangStatusListener
|
||||
import com.mogo.eagle.core.utilcode.floating.*
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_BATTERY
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_BATTERY_VALUE
|
||||
@@ -26,16 +28,20 @@ import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companio
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_INPUT_SUB_KEYCODE
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_INPUT_SUB_TYPE
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_MOFANG_CONNECT
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_BLUETOOTH_OPEN_AGREE
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_BLUETOOTH_OPEN_DENY
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_BLUETOOTH_SETTING_REQ
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_CONNECT_SUCCESS
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_DISCONNECT_SLEEP
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_DISCONNECT_SUCCESS
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_IS_INVALID
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_IS_VALID
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_START_CONNECT
|
||||
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_START_DISCONNECT
|
||||
import kotlinx.coroutines.*
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListener {
|
||||
|
||||
@@ -177,7 +183,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
|
||||
override fun onBluetoothKeyBoardCombineClicked(vararg keyCodes: Int) {
|
||||
val keycodesText = keyCodes.joinToString(",") { KeyEvent.keyCodeToString(it).replace("KEYCODE_", "", true) }
|
||||
if (isTest.get()) {
|
||||
showToast("组合键[$keycodesText]触发了")
|
||||
showToast("[$keycodesText]")
|
||||
}
|
||||
try {
|
||||
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keycodesText, EVENT_INPUT_SUB_TYPE to "3"))
|
||||
@@ -192,7 +198,8 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
|
||||
|
||||
override fun onBluetoothKeyBoardLongClicked(keyCode: Int) {
|
||||
if (isTest.get()) {
|
||||
showToast("长按键[${KeyEvent.keyCodeToString(keyCode).replace("KEYCODE_", "", true)}]触发了")
|
||||
val key = KeyEvent.keyCodeToString(keyCode).replace("KEYCODE_", "", true)
|
||||
showToast("[$key$key]")
|
||||
}
|
||||
try {
|
||||
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keyCode.toString(), EVENT_INPUT_SUB_TYPE to "2"))
|
||||
@@ -210,7 +217,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
|
||||
override fun onBluetoothKeyboardClicked(keyCode: Int) {
|
||||
val keycodeText = KeyEvent.keyCodeToString(keyCode)
|
||||
if (isTest.get()) {
|
||||
showToast("单击键[${keycodeText.replace("KEYCODE_", "", true)}]触发了")
|
||||
showToast("[${keycodeText.replace("KEYCODE_", "", true)}]")
|
||||
}
|
||||
try {
|
||||
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keyCode.toString(), EVENT_INPUT_SUB_TYPE to "1"))
|
||||
@@ -261,7 +268,8 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
|
||||
override fun onBluetoothKeyboardEvent(event: KeyEvent) { }
|
||||
|
||||
override fun onBluetoothKeyboardInputInvalid() {
|
||||
Log.d(TAG, "--- onBluetoothKeyboardInputInvalid ---")
|
||||
CallerLogger.d(M_DEVA+TAG, "--- onBluetoothKeyboardInputInvalid ---")
|
||||
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_IS_INVALID to "${System.currentTimeMillis()}"))
|
||||
linkedLog.record(mapOf("callback" to "onBluetoothKeyboardInputInvalid"))
|
||||
UiThreadHandler.post {
|
||||
listeners.values.forEach {
|
||||
@@ -271,22 +279,26 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
|
||||
}
|
||||
|
||||
override fun onBluetoothKeyboardInputValid() {
|
||||
Log.d(TAG, "--- onBluetoothKeyboardInputValid ---")
|
||||
CallerLogger.d(M_DEVA+TAG, "--- onBluetoothKeyboardInputValid ---")
|
||||
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_IS_VALID to "${System.currentTimeMillis()}"))
|
||||
linkedLog.record(mapOf("callback" to "onBluetoothKeyboardInputValid"))
|
||||
}
|
||||
|
||||
override fun onBluetoothOpenAgreed() {
|
||||
Log.d(TAG, "--- onBluetoothOpenAgreed ---")
|
||||
CallerLogger.d(M_DEVA+TAG, "--- onBluetoothOpenAgreed ---")
|
||||
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_BLUETOOTH_OPEN_AGREE to "${System.currentTimeMillis()}"))
|
||||
linkedLog.record(mapOf("callback" to "onBluetoothOpenAgreed"))
|
||||
}
|
||||
|
||||
override fun onBluetoothOpenDenied() {
|
||||
Log.d(TAG, "--- onBluetoothOpenDenied ---")
|
||||
CallerLogger.d(M_DEVA+TAG, "--- onBluetoothOpenDenied ---")
|
||||
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_BLUETOOTH_OPEN_DENY to "${System.currentTimeMillis()}"))
|
||||
linkedLog.record(mapOf("callback" to "onBluetoothOpenDenied"))
|
||||
}
|
||||
|
||||
override fun onBluetoothSettingRequest() {
|
||||
Log.d(TAG, "--- onBluetoothSettingRequest ---")
|
||||
CallerLogger.d(M_DEVA+TAG, "--- onBluetoothSettingRequest ---")
|
||||
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_BLUETOOTH_SETTING_REQ to "${System.currentTimeMillis()}"))
|
||||
linkedLog.record(mapOf("callback" to "onBluetoothSettingRequest"))
|
||||
UiThreadHandler.post {
|
||||
Toast.makeText(Utils.getApp(), "检测到魔方未正确连接,请在系统蓝牙设置页面,找到魔方并配对连接...", Toast.LENGTH_SHORT).show()
|
||||
@@ -294,7 +306,8 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
|
||||
}
|
||||
|
||||
override fun onBluetoothKeyboardAbnormalDisconnected(status: Int) {
|
||||
Log.d(TAG, "--- onBluetoothKeyboardAbnormalDisconnected(status: $status) ---")
|
||||
CallerLogger.d(M_DEVA+TAG, "--- onBluetoothKeyboardAbnormalDisconnected(status: $status) ---")
|
||||
MoFangAnalyticUtils.track(EVENT_MOFANG_CONNECT, mutableMapOf(EVENT_SUB_DISCONNECT_SLEEP to "${System.currentTimeMillis()}"))
|
||||
linkedLog.record(mapOf("callback" to "onBluetoothKeyboardAbnormalDisconnected:$status"))
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,8 @@ class IPCReportManager : IMoGoAutopilotStatusListener {
|
||||
private var ipcErrorReportList = arrayListOf<ReportEntity>() //错误上报列表
|
||||
private var ipcWarningReportList = arrayListOf<ReportEntity>() //警告上报列表
|
||||
|
||||
private var ipcReportWindowIsShow = false //IPC上报窗口是否处于展示状态
|
||||
|
||||
companion object{
|
||||
const val TAG ="IPCReportManager"
|
||||
val iPCReportManager: IPCReportManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
|
||||
@@ -55,16 +57,31 @@ class IPCReportManager : IMoGoAutopilotStatusListener {
|
||||
fun showReportListWindow(context: Context, isShow: Boolean){
|
||||
if(isShow){
|
||||
//打开工控机上报列表
|
||||
reportListFloatWindow =
|
||||
ReportListFloatWindow(context as Activity)
|
||||
reportListFloatWindow?.showFloatWindow()
|
||||
reportListFloatWindow?.refreshData(reportList)
|
||||
if(reportListFloatWindow == null){
|
||||
reportListFloatWindow =
|
||||
ReportListFloatWindow(context as Activity)
|
||||
}
|
||||
reportListFloatWindow?.let {
|
||||
it.showFloatWindow()
|
||||
it.refreshData(reportList)
|
||||
ipcReportWindowIsShow = true
|
||||
}
|
||||
}else {
|
||||
//关闭工控机上报列表
|
||||
reportListFloatWindow?.hideFloatWindow()
|
||||
reportListFloatWindow?.let {
|
||||
it.hideFloatWindow()
|
||||
ipcReportWindowIsShow = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取窗口展示状态
|
||||
*/
|
||||
fun getReportWindowStatus(): Boolean{
|
||||
return ipcReportWindowIsShow
|
||||
}
|
||||
|
||||
/**
|
||||
*工控机监控节点上报
|
||||
*/
|
||||
|
||||
@@ -69,22 +69,20 @@ class ReportListFloatWindow constructor(activity: Activity) : View.OnTouchListen
|
||||
mInViewY = motionEvent.y
|
||||
// 获取相对屏幕的坐标,即以屏幕左上角为原点
|
||||
mDownInScreenX = motionEvent.rawX
|
||||
mDownInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight()
|
||||
mDownInScreenY = motionEvent.rawY
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight()
|
||||
mInScreenY = motionEvent.rawY
|
||||
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
// 更新浮动窗口位置参数
|
||||
mInScreenX = motionEvent.rawX
|
||||
mInScreenY = motionEvent.rawY - BarUtils.getStatusBarHeight()
|
||||
mInScreenY = motionEvent.rawY
|
||||
mWindowParams!!.x = (mInScreenX - mInViewX).toInt()
|
||||
mWindowParams!!.y = (mInScreenY - mInViewY).toInt()
|
||||
// 手指移动的时候更新小悬浮窗的位置
|
||||
mWindowManager!!.updateViewLayout(mFloatLayout, mWindowParams)
|
||||
}
|
||||
// MotionEvent.ACTION_UP -> // 如果手指离开屏幕时,xDownInScreen和xInScreen相等,且yDownInScreen和yInScreen相等,则视为触发了单击事件。
|
||||
// if (mDownInScreenX === mInScreenX && mDownInScreenY === mInScreenY) {
|
||||
// }
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ class SceneManager {
|
||||
init {
|
||||
//过滤所需条件
|
||||
sceneModuleTAG.map[ADAS] = SceneModule(true, M_D_C)
|
||||
sceneModuleTAG.map[DEVA] = SceneModule(false, M_DEVA)
|
||||
sceneModuleTAG.map[DEVA] = SceneModule(true, M_DEVA)
|
||||
sceneModuleTAG.map[HMI] = SceneModule(false, M_HMI)
|
||||
sceneModuleTAG.map[OBU] = SceneModule(true, M_OBU)
|
||||
sceneModuleTAG.map[V2X] = SceneModule(true, M_V2X)
|
||||
|
||||
@@ -128,13 +128,13 @@ internal class OverViewImpl(ctx: Context) : IFlow<OverViewStatus>(ctx),
|
||||
override fun onGranted() {
|
||||
Log.d(TAG,"权限: ${Manifest.permission.ACCESS_FINE_LOCATION} 被授予了....")
|
||||
if (isLocationEnabled()) {
|
||||
isGpsException = true
|
||||
send(OverViewStatus(true))
|
||||
CallerDevaToolsListenerManager.invokeGpsStatus(false)
|
||||
} else {
|
||||
isGpsException = false
|
||||
checkIfNotException()
|
||||
CallerDevaToolsListenerManager.invokeGpsStatus(true)
|
||||
} else {
|
||||
isGpsException = true
|
||||
send(OverViewStatus(true))
|
||||
CallerDevaToolsListenerManager.invokeGpsStatus(false)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.zhjt.mogo_core_function_devatools.status.flow.IFlow
|
||||
import kotlinx.coroutines.Job
|
||||
import mogo_msg.MogoReportMsg.MogoReportMessage
|
||||
import planning.RoboSweeperTaskIndexOuterClass
|
||||
import system_master.SsmInfo
|
||||
import system_master.SystemStatusInfo.StatusInfo
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
@@ -39,7 +40,7 @@ internal class CanImpl(ctx: Context) :
|
||||
private val state: AtomicInteger by lazy { AtomicInteger(Int.MIN_VALUE) }
|
||||
|
||||
override fun onCreate() {
|
||||
send(CanStatus(CallerAutoPilotControlManager.isConnected()))
|
||||
send(CanStatus(CallerAutoPilotStatusListenerManager.isConnect()))
|
||||
|
||||
CallerChassisAccStateListenerManager.addListener(TAG, this)
|
||||
CallerChassisBrakeStateListenerManager.addListener(TAG, this)
|
||||
@@ -57,7 +58,7 @@ internal class CanImpl(ctx: Context) :
|
||||
|
||||
private fun isCanEnabled(): Boolean {
|
||||
val code = CallerAutoPilotStatusListenerManager.getAutoPilotReportMessageCode()
|
||||
return CallerAutoPilotControlManager.isConnected() && code != "EHW_CAN" && (state.get() == Int.MIN_VALUE || state.get() == 0)
|
||||
return CallerAutoPilotStatusListenerManager.isConnect() && code != "EHW_CAN" && (state.get() == Int.MIN_VALUE || state.get() == 0)
|
||||
}
|
||||
|
||||
|
||||
@@ -115,6 +116,14 @@ internal class CanImpl(ctx: Context) :
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {
|
||||
val state = statusInf.healthInfoList?.find { "can_adapter".equals(it.name, true) }?.state?.ordinal
|
||||
Log.d(TAG, "state: $state")
|
||||
if (state != null) {
|
||||
this.state.set(state)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
job?.safeCancel()
|
||||
|
||||
@@ -28,7 +28,7 @@ internal class IpcImpl(ctx: Context): IFlow<IpcStatus>(ctx), IMoGoAutopilotStatu
|
||||
}
|
||||
|
||||
private fun checkAndSend() {
|
||||
send(IpcStatus(CallerAutoPilotControlManager.isConnected()))
|
||||
send(IpcStatus(CallerAutoPilotStatusListenerManager.isConnect()))
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
||||
@@ -16,7 +16,8 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import system_master.SystemStatusInfo.HealthInfo
|
||||
import system_master.SsmInfo
|
||||
import system_master.SsmBase.HealthInfo
|
||||
import system_master.SystemStatusInfo.StatusInfo
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
@@ -42,7 +43,7 @@ internal class RTKImpl(ctx: Context): IFlow<RTKStatus>(ctx), IMoGoAutopilotStatu
|
||||
CallerLogger.d("$M_DEVA$TAG", "-- onCreate --")
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
|
||||
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
|
||||
if (CallerAutoPilotControlManager.isConnected()) {
|
||||
if (CallerAutoPilotStatusListenerManager.isConnect()) {
|
||||
check()
|
||||
}
|
||||
}
|
||||
@@ -52,7 +53,7 @@ internal class RTKImpl(ctx: Context): IFlow<RTKStatus>(ctx), IMoGoAutopilotStatu
|
||||
return
|
||||
}
|
||||
check?.takeIf { it.isActive }?.cancel()
|
||||
launch(Dispatchers.Unconfined) {
|
||||
launch(Dispatchers.Default) {
|
||||
CallerAutoPilotControlManager.sendStatusQueryReq()
|
||||
delay(5000)
|
||||
isOldVersion.set(true)
|
||||
@@ -72,25 +73,35 @@ internal class RTKImpl(ctx: Context): IFlow<RTKStatus>(ctx), IMoGoAutopilotStatu
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {
|
||||
check?.takeIf { it.isActive }?.cancel()
|
||||
isOldVersion.set(false)
|
||||
val info = statusInf.healthInfoList?.find { "localization".equals(it.name, true) }
|
||||
Log.d(TAG, "info: $info")
|
||||
if (info != null) {
|
||||
healthInfo.set(info)
|
||||
send(RTKStatus(getDesc(), getCode()))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) {
|
||||
super.onAutopilotIpcConnectStatusChanged(status, reason)
|
||||
if (!CallerAutoPilotControlManager.isConnected()) {
|
||||
if (!CallerAutoPilotStatusListenerManager.isConnect()) {
|
||||
CallerLogger.d("$M_DEVA$TAG", "工控机断开了....")
|
||||
healthInfo.set(null)
|
||||
send(RTKStatus("", -1))
|
||||
}
|
||||
|
||||
if (CallerAutoPilotControlManager.isConnected() && check == null && !isOldVersion.get()) {
|
||||
if (CallerAutoPilotStatusListenerManager.isConnect() && check == null && !isOldVersion.get()) {
|
||||
check()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
|
||||
if (isOldVersion.get()) {
|
||||
if (isRTKEnabled()) {
|
||||
if ((timeOutCheck == null || timeOutCheck?.isCompleted == true) && isRTKEnabled()) {
|
||||
send(RTKStatus("RTK", 0))
|
||||
timeOutCheck?.takeIf { it.isActive }?.cancel()
|
||||
launch(Dispatchers.Unconfined) {
|
||||
launch(Dispatchers.Default) {
|
||||
delay(4000)
|
||||
send(RTKStatus("", -1))
|
||||
}.also {
|
||||
@@ -103,7 +114,7 @@ internal class RTKImpl(ctx: Context): IFlow<RTKStatus>(ctx), IMoGoAutopilotStatu
|
||||
private fun isRTKEnabled(): Boolean {
|
||||
val code = CallerAutoPilotStatusListenerManager.getAutoPilotReportMessageCode()
|
||||
val gnssInfo = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
|
||||
return CallerAutoPilotControlManager.isConnected() && (
|
||||
return CallerAutoPilotStatusListenerManager.isConnect() && (
|
||||
code != "EHW_RTK" &&
|
||||
code != "EHW_GNSS" &&
|
||||
code != "ESYS_RTK_STATUS_FAULT" &&
|
||||
|
||||
@@ -58,7 +58,7 @@ internal class TracingImpl(ctx: Context): IFlow<TracingStatus>(ctx), IMoGoAutopi
|
||||
super.onAutopilotIpcConnectStatusChanged(status, reason)
|
||||
try {
|
||||
if (ipcConnectStatus.get() != status) {
|
||||
if (!CallerAutoPilotControlManager.isConnected()) {
|
||||
if (!CallerAutoPilotStatusListenerManager.isConnect()) {
|
||||
old = UNKNOWN
|
||||
send(TracingStatus(UNKNOWN))
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ internal class StatusModel : ViewModel() {
|
||||
const val TAG = "StatusModel"
|
||||
val DEFAULTS = Pair(null, ArrayList<Status>().also {
|
||||
it += OverViewStatus()
|
||||
it += IpcStatus(CallerAutoPilotControlManager.isConnected())
|
||||
it += IpcStatus(CallerAutoPilotStatusListenerManager.isConnect())
|
||||
it += CanStatus(false)
|
||||
// it += TracingStatus(UNKNOWN)
|
||||
it += RTKStatus("", -1)
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.zhjt.mogo_core_function_devatools.status.entity.IpcStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.Status
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.TracingStatus.Tracing.*
|
||||
import com.zhjt.mogo_core_function_devatools.status.ui.adapter.StatusAdapter.StatusViewHolder
|
||||
import me.jessyan.autosize.AutoSizeCompat
|
||||
|
||||
internal class StatusAdapter(val ctx: Context, var data: ArrayList<Status>): RecyclerView.Adapter<StatusViewHolder>() {
|
||||
|
||||
@@ -27,6 +28,7 @@ internal class StatusAdapter(val ctx: Context, var data: ArrayList<Status>): Rec
|
||||
StatusViewHolder(LayoutInflater.from(ctx).inflate(R.layout.layout_status_bar_item, parent, false))
|
||||
|
||||
override fun onBindViewHolder(holder: StatusViewHolder, position: Int) {
|
||||
AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources)
|
||||
holder.bind(data[position])
|
||||
}
|
||||
|
||||
@@ -100,6 +102,10 @@ internal class StatusAdapter(val ctx: Context, var data: ArrayList<Status>): Rec
|
||||
}
|
||||
"SLAM" ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_slam_good)
|
||||
"VSLAM" ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_vslam_good)
|
||||
"VAL" ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_val_good)
|
||||
else ->
|
||||
iv.background = ContextCompat.getDrawable(itemView.context, drawable.icon_dev_status_rtk_unknow)
|
||||
}
|
||||
|
||||
@@ -85,19 +85,19 @@ class TraceManager : IMoGoCloudListener, IMoGoAutopilotCarConfigListener {
|
||||
|
||||
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_INIT_STATUS] =
|
||||
ChainLogParam(true, "ADAS连接状态")
|
||||
ChainLogParam(true, "INIT状态")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_GNSS] =
|
||||
ChainLogParam(true, "ADAS自车定位")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_SOCKET_AUTOPILOT] =
|
||||
ChainLogParam(true, "ADAS自动驾驶链路(包含: 自动驾驶状态交互,全局路径,到站提醒,节点状态,异常上报,PNC)")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_SOCKET_DATA_TRACKED] =
|
||||
ChainLogParam(true, "ADAS感知物体")
|
||||
ChainLogParam(true, "云感知物体")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_SOCKET_TRAJECTORY] =
|
||||
ChainLogParam(false, "ADAS车前引导线")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_SOCKET_VEHICLE] =
|
||||
ChainLogParam(false, "ADAS车辆底盘数据")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_SOCKET_TRAFFIC_LIGHT] =
|
||||
ChainLogParam(true, "ADAS红绿灯数据")
|
||||
ChainLogParam(true, "红绿灯Union数据")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_HMI] =
|
||||
ChainLogParam(true, "人机交互行为")
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_ANR_LEAK] =
|
||||
@@ -109,8 +109,6 @@ class TraceManager : IMoGoCloudListener, IMoGoAutopilotCarConfigListener {
|
||||
traceInfoCache[ChainConstant.CHAIN_TYPE_WEAK_NETWORK] =
|
||||
ChainLogParam(true, "WeakNetWork Record")
|
||||
|
||||
MoGoAiCloudClientConfig.getInstance()
|
||||
|
||||
FileWriteManager.getInstance()
|
||||
.init(context, "", pkgName, fwBuildMap)
|
||||
FileWriteManager.getInstance().registerListener { type ->
|
||||
|
||||
@@ -20,6 +20,7 @@ class StartUpTraceNetWorkModel {
|
||||
private var retryTime = 0
|
||||
private var success: ((String) -> Unit)? = null
|
||||
private var error: ((String) -> Unit)? = null
|
||||
@Volatile
|
||||
private var traceId: String = ""
|
||||
|
||||
fun report(
|
||||
@@ -39,14 +40,14 @@ class StartUpTraceNetWorkModel {
|
||||
if (id != null) {
|
||||
traceId = id
|
||||
}
|
||||
val configUpload = AppConfigInfo.toConfigUpload()
|
||||
val data = GsonUtils.toJson(configUpload)
|
||||
map =
|
||||
GsonUtils.fromJson(data, object : TypeToken<MutableMap<String, Any>>() {}.type)
|
||||
map["id"] = traceId
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val configUpload = AppConfigInfo.toConfigUpload()
|
||||
val data = GsonUtils.toJson(configUpload)
|
||||
map =
|
||||
GsonUtils.fromJson(data, object : TypeToken<MutableMap<String, Any>>() {}.type)
|
||||
map["id"] = traceId
|
||||
getNetWorkApi().report(map)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = Record(AppUtils.getAppVersionName(), sn, mac, type, isSupportPatch, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_start" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_start" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -38,7 +38,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = CheckRecord(AppUtils.getAppVersionName(), START, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertCheckRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_request_start" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_request_start" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -48,7 +48,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = CheckRecord(AppUtils.getAppVersionName(), SUCCESS, response, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertCheckRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_request_success" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_request_success" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -67,7 +67,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = UpgradeRecord(fromVersionName = AppUtils.getAppVersionName(), toVersionName = newVersionName, fromMd5 = AppUtils.getAppApkMd5(), toMD5 = newMd5, type = getType(type), time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertUpgradeRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_record" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_record" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -77,7 +77,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadStart, downloadUrl = downloadUrl, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertDownloadRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_start" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_start" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -87,7 +87,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadPause, downloadUrl = downloadUrl, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertDownloadRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_pause" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_pause" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -97,7 +97,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadFailed, failReason = error, downloadUrl = downloadUrl, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertDownloadRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_failed" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_failed" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -107,7 +107,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = DownloadRecord(versionName = AppUtils.getAppVersionName(), status = DownloadComplete, downloadUrl = downloadUrl, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertDownloadRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_success" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_download_success" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -117,7 +117,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = InstallStart, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_install_start" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_install_start" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -127,7 +127,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckStart, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_start" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_start" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -137,7 +137,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckFailed, failReason = error, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_failed" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_failed" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -147,7 +147,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = SourceMd5CheckSuccess, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_success" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_source_md5_success" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -157,7 +157,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchStart, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_start" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_start" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -167,7 +167,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchFailed, failReason = error, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_failed" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_failed" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -177,7 +177,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = ApplyPatchSuccess, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_success" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_apply_patch_success" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -187,7 +187,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckStart, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_start" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_start" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -197,7 +197,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckFailed, failReason = error, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_failed" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_failed" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -207,7 +207,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = TargetMd5CheckSuccess, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_success" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_check_target_md5_success" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -217,7 +217,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
val record = InstallRecord(version = AppUtils.getAppVersionName(), status = InstallFailed, code = code, failReason = error, time = System.currentTimeMillis())
|
||||
UpgradeDbHelper.insertInstallRecord(record)
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_install_failed" to GsonUtils.toJson(record)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_install_failed" to record))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -249,7 +249,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
itx["step_3"] = all.downloads?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
|
||||
itx["step_4"] = all.installs?.let { ArrayList<InstallRecord>(it) + InstallRecord(success.versionName, InstallSuccess, 0) }?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_success" to GsonUtils.toJson(all)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_success" to all))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -265,7 +265,7 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
itx["step_3"] = all.downloads?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
|
||||
itx["step_4"] = all.installs?.sortedBy { it.status.ordinal }?.mapIndexed { index, r -> "$index" to GsonUtils.toJson(r) } ?: emptyList()
|
||||
try {
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_failed" to GsonUtils.toJson(all)))
|
||||
onUpgradeRecordLinkLog(mapOf("upgrade_failed" to all))
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
}
|
||||
@@ -301,5 +301,5 @@ class MoGoUpgradeProviderImpl: IMoGoUpgradeProvider {
|
||||
nodeAliasCode = ChainConstant.CHAIN_CODE_UPGRADE_APP,
|
||||
paramIndexes = [0]
|
||||
)
|
||||
private fun onUpgradeRecordLinkLog(extra: Map<String, String>) {}
|
||||
private fun onUpgradeRecordLinkLog(extra: Map<String, Any>) {}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.zhjt.mogo_core_function_devatools.weaknetwork
|
||||
|
||||
import androidx.annotation.Keep
|
||||
|
||||
@Keep
|
||||
data class DetectResult(var details: List<PingResult>?) {
|
||||
|
||||
data class PingResult(
|
||||
var detectType: Int,
|
||||
var errorCode: Int,
|
||||
var networkType: Int,
|
||||
var detectIp: String?,
|
||||
var port: Int,
|
||||
var rttStr: String?,
|
||||
var pingLossRate: String?
|
||||
)
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.zhjt.mogo_core_function_devatools.weaknetwork
|
||||
|
||||
import android.util.Log
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.utilcode.util.GsonUtils
|
||||
import com.mogo.weak.network.StubImpl
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
|
||||
@@ -12,7 +13,22 @@ class DetectResultImpl: StubImpl.ReportDetectResultListener {
|
||||
}
|
||||
|
||||
override fun onDetectResult(resultsJson: String?) {
|
||||
resultsJson?.let { invokeWeakResult(it) }
|
||||
resultsJson?.let { json ->
|
||||
kotlin.runCatching {
|
||||
val result = GsonUtils.fromJson(json, DetectResult::class.java)
|
||||
val size = result.details?.size ?: 0
|
||||
var rttSum = 0.0
|
||||
result?.details?.forEach { pingResult ->
|
||||
pingResult.rttStr?.let {
|
||||
rttSum += it.toDouble()
|
||||
}
|
||||
}
|
||||
if (rttSum > 0 && size > 0) {
|
||||
Log.d(TAG, "avg of rtt is:${rttSum / size}ms")
|
||||
}
|
||||
}
|
||||
invokeWeakResult(json)
|
||||
}
|
||||
}
|
||||
|
||||
@ChainLog(
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.mogo.cloud.network.WeakNetworkManager
|
||||
import com.mogo.cloud.network.WeakNetworkManager.setListener
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.weak.network.SdtManager
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
@@ -16,6 +17,10 @@ object WeakNetworkStrategy {
|
||||
// 记录到链路日志中的时间间隔
|
||||
private const val OUTPUT_TIME_INTERVAL = 15000
|
||||
|
||||
private const val WEAK_HTTP_RTT = 1300
|
||||
|
||||
private const val VERY_CONSUMING_TIME_URL = "/yycp-launcherSnapshot/launcherSnapshot/querySnapshotSync"
|
||||
|
||||
private var lastOutputTime = 0L
|
||||
|
||||
private val lock by lazy {
|
||||
@@ -33,6 +38,7 @@ object WeakNetworkStrategy {
|
||||
fun startListen() {
|
||||
setListener(object : WeakNetworkManager.OnWeakHttpListener {
|
||||
override fun onHttpRttReceived(hashCode: Int, url: String, timeStamp: Long) {
|
||||
if (VERY_CONSUMING_TIME_URL in url) return
|
||||
outputLog(url, timeStamp)
|
||||
}
|
||||
|
||||
@@ -57,8 +63,12 @@ object WeakNetworkStrategy {
|
||||
try {
|
||||
val currentTime = System.currentTimeMillis()
|
||||
if (currentTime - lastOutputTime > OUTPUT_TIME_INTERVAL) {
|
||||
invokeWeakResult("url为:$url, 耗时为:$timeStamp${if (isFail) " 连接失败!" else ""}")
|
||||
SdtManager.startActiveCheck()
|
||||
if (timeStamp >= WEAK_HTTP_RTT) {
|
||||
ToastUtils.showShort("当前网络质量差!")
|
||||
} else if (timeStamp in 300 until WEAK_HTTP_RTT) {
|
||||
invokeWeakResult("url为:$url, 耗时为:$timeStamp${if (isFail) " 连接失败!" else ""}")
|
||||
SdtManager.startActiveCheck()
|
||||
}
|
||||
lastOutputTime = currentTime
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.8 KiB |
Reference in New Issue
Block a user