diff --git a/frameworks/native/backup_ext/src/ext_extension.cpp b/frameworks/native/backup_ext/src/ext_extension.cpp index e2e6fae9ef92df2546cf23e701b5bc804aca6087..cdd0f66a878cf3c90e3ea0dc516a70542d88ccc9 100644 --- a/frameworks/native/backup_ext/src/ext_extension.cpp +++ b/frameworks/native/backup_ext/src/ext_extension.cpp @@ -88,6 +88,26 @@ static void RecordDoRestoreRes(const std::string &bundleName, const std::string BizStageRestore::BIZ_STAGE_DO_RESTORE, err); } +static void RecordDoBackupRes(const std::string &bundleName, const ErrCode errCode, AppRadar::DoBackupInfo &backupInfo) +{ + uint32_t inExcludeNum = backupInfo.includeNum + backupInfo.excludeNum; + if (inExcludeNum >= BConstants::MAX_INEXCLUDE_SIZE) { + AppRadar::Info infoInExclude(bundleName, "", string("\"total inExclude\":").append(to_string(inExcludeNum))); + AppRadar::GetInstance().RecordBackupFuncRes(infoInExclude, "BackupExtExtension::DoBackup", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_DO_BACKUP, ERR_OK); + } + if (errCode == ERR_OK && backupInfo.cost >= BConstants::MAX_TIME_COST) { + std::stringstream ss; + ss << R"("spendTime": )" << backupInfo.cost << "ms, "; + ss << R"("totalFilesNum": )" << backupInfo.allFileNum << ", "; + ss << R"("smallFilesNum": )" << backupInfo.smallFileNum << ", "; + ss << R"("bigFilesNum": )" << backupInfo.allFileNum - backupInfo.tarFileNum; + AppRadar::Info info(bundleName, "", ss.str()); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::DoBackup", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_DO_BACKUP, errCode); + } +} + static string GetIndexFileRestorePath(const string &bundleName) { if (BFile::EndsWith(bundleName, BConstants::BUNDLE_FILE_MANAGER) && bundleName.size() == BConstants::FM_LEN) { @@ -682,6 +702,7 @@ int BackupExtExtension::DoBackup(const BJsonEntityExtensionConfig &usrConfig) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("Start Do backup"); + auto start = std::chrono::system_clock::now(); if (extension_ == nullptr) { HILOGE("Failed to do backup, extension is nullptr"); throw BError(BError::Codes::EXT_INVAL_ARG, "Extension is nullptr"); @@ -697,7 +718,6 @@ int BackupExtExtension::DoBackup(const BJsonEntityExtensionConfig &usrConfig) vector includes = usrConfig.GetIncludes(); vector excludes = usrConfig.GetExcludes(); - auto proxy = ServiceProxy::GetInstance(); if (proxy == nullptr) { throw BError(BError::Codes::EXT_BROKEN_BACKUP_SA, std::generic_category().message(errno)); @@ -730,6 +750,11 @@ int BackupExtExtension::DoBackup(const BJsonEntityExtensionConfig &usrConfig) } HILOGI("HandleBackup finish, ret = %{public}d", res); + auto end = std::chrono::system_clock::now(); + auto cost = std::chrono::duration_cast(end - start).count(); + AppRadar::DoBackupInfo doBackupInfo = {cost, bigFileInfo.size(), smallFiles.size(), tarMap.size(), + includes.size(), excludes.size()}; + RecordDoBackupRes(bundleName_, res, doBackupInfo); return res; } @@ -881,13 +906,7 @@ void BackupExtExtension::AsyncTaskBackup(const string config) HILOGI("Do backup, start fwk timer end."); BJsonCachedEntity cachedEntity(config); auto cache = cachedEntity.Structuralize(); - auto start = std::chrono::system_clock::now(); auto ret = ptr->DoBackup(cache); - auto end = std::chrono::system_clock::now(); - auto cost = to_string(std::chrono::duration_cast(end - start).count()); - AppRadar::Info info(ptr->bundleName_, "", string("\"spend_time\":").append(cost).append(string("ms\""))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::AsyncTaskBackup", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_DO_BACKUP, static_cast(ret)); // REM: 处理返回结果 ret ptr->AppDone(ret); HILOGI("backup app done %{public}d", ret); @@ -1888,11 +1907,18 @@ int BackupExtExtension::DoIncrementalBackupTask(UniqueFd incrementalFd, UniqueFd vector bigFiles; CompareFiles(move(incrementalFd), move(manifestFd), allFiles, smallFiles, bigFiles); auto ret = DoIncrementalBackup(allFiles, smallFiles, bigFiles); - auto end = std::chrono::system_clock::now(); - auto cost = to_string(std::chrono::duration_cast(end - start).count()); - AppRadar::Info info(bundleName_, "", string("\"spend_time\":").append(cost).append(string("ms\""))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::AsyncTaskDoIncrementalBackup", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_DO_BACKUP, static_cast(ret)); + if (ret == ERR_OK) { + auto end = std::chrono::system_clock::now(); + auto cost = std::chrono::duration_cast(end - start).count(); + if (cost >= BConstants::MAX_TIME_COST) { + std::stringstream ss; + ss << R"("spendTime": )"<< cost << R"(ms, "totalFiles": )" << allFiles.size() << R"(, "smallFiles": )" + << smallFiles.size() << R"(, "bigFiles": )" << bigFiles.size(); + AppRadar::Info info(bundleName_, "", ss.str()); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::DoIncrementalBackupTask", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_DO_BACKUP, static_cast(ret)); + } + } return ret; } diff --git a/frameworks/native/backup_ext/src/sub_ext_extension.cpp b/frameworks/native/backup_ext/src/sub_ext_extension.cpp index 540cb94acac9e7fd940b062f8185a4cb30350271..d155707042d1383864673b3855c2174c97591837 100644 --- a/frameworks/native/backup_ext/src/sub_ext_extension.cpp +++ b/frameworks/native/backup_ext/src/sub_ext_extension.cpp @@ -150,8 +150,8 @@ void BackupExtExtension::CheckTmpDirFileInfos(bool isSpecialVersion) if (!errFiles.empty()) { HILOGE("(Debug) The received file and idx is not same"); std::stringstream ss; - ss << "\"total_file\": \"" << idxFileInfos.size() << "\", \"restore_file\": \"" - << idxFileInfos.size() - errFiles.size() << "\"" << "\"info\": \"different received file and idx\""; + ss << R"("totalFile": )" << idxFileInfos.size() << R"(, "restoreFile": )" + << idxFileInfos.size() - errFiles.size() << R"(, "info": "different received file and idx")"; AppRadar::Info info (bundleName_, "", ss.str()); AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::CheckTmpDirFileInfos", AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_CHECK_DATA_FAIL, @@ -186,8 +186,8 @@ tuple> BackupExtExtension::CheckRestoreFileInfos() errFileInfos_.size()); if (errFiles.size()) { std::stringstream ss; - ss << "\"total_file\": \"" << endFileInfos_.size() << "\", \"restore_file\": \"" - << endFileInfos_.size() - errFileInfos_.size() << "\""; + ss << R"("totalFile": )" << endFileInfos_.size() << R"(, "restoreFile": )" + << endFileInfos_.size() - errFileInfos_.size(); AppRadar::Info info (bundleName_, "", ss.str()); AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::CheckRestoreFileInfos", AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_CHECK_DATA_FAIL, @@ -209,11 +209,13 @@ std::function BackupExtExtension::OnRestoreCallback( HILOGI("Current bundle will execute app done"); if (errCode == ERR_OK) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - std::stringstream ss; - ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); - AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::OnRestoreCallback", - AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + if (spendTime >= BConstants::MAX_TIME_COST) { + std::stringstream ss; + ss << R"("spendTime": )"<< spendTime << "ms"; + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::OnRestoreCallback", + AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + } } extensionPtr->FinishOnProcessTask(); if (errMsg.empty()) { @@ -242,11 +244,13 @@ std::function BackupExtExtension::OnRestoreExCallbac } if (errCode == ERR_OK && !restoreRetInfo.empty()) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - std::stringstream ss; - ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); - AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::OnRestoreExCallback", - AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + if (spendTime >= BConstants::MAX_TIME_COST) { + std::stringstream ss; + ss << R"("spendTime": )"<< spendTime << "ms"; + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::OnRestoreExCallback", + AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + } } extensionPtr->FinishOnProcessTask(); extensionPtr->extension_->InvokeAppExtMethod(errCode, restoreRetInfo); @@ -300,12 +304,14 @@ std::function BackupExtExtension::IncreOnRestoreExCa } if (errCode == ERR_OK && !restoreRetInfo.empty()) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - std::stringstream ss; - ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); - AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::IncreOnRestoreExCallback", - AppRadar::GetInstance().GetUserId(), - BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + if (spendTime >= BConstants::MAX_TIME_COST) { + std::stringstream ss; + ss << R"("spendTime": )"<< spendTime << "ms"; + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::IncreOnRestoreExCallback", + AppRadar::GetInstance().GetUserId(), + BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + } } extensionPtr->FinishOnProcessTask(); extensionPtr->extension_->InvokeAppExtMethod(errCode, restoreRetInfo); @@ -338,11 +344,13 @@ std::function BackupExtExtension::IncreOnRestoreCall HILOGI("Current bundle will execute app done"); if (errCode == ERR_OK) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - std::stringstream ss; - ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); - AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::IncreOnRestoreCallback", - AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + if (spendTime >= BConstants::MAX_TIME_COST) { + std::stringstream ss; + ss << R"("spendTime": )"<< spendTime << "ms"; + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::IncreOnRestoreCallback", + AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); + } } extensionPtr->FinishOnProcessTask(); if (errMsg.empty()) { @@ -381,11 +389,13 @@ std::function BackupExtExtension::OnBackupCall extensionPtr->FinishOnProcessTask(); if (errCode == ERR_OK) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\""))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::OnBackupCallback", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, - static_cast(ERR_OK)); + if (spendTime >= BConstants::MAX_TIME_COST) { + AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::OnBackupCallback", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, + static_cast(ERR_OK)); + } extensionPtr->AsyncTaskBackup(extensionPtr->extension_->GetUsrConfig()); return; } @@ -418,11 +428,13 @@ std::function BackupExtExtension::OnBackupExCa if (errCode == ERR_OK) { if (backupExRetInfo.size()) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\""))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::OnBackupExCallback", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, - static_cast(ERR_OK)); + if (spendTime >= BConstants::MAX_TIME_COST) { + AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::OnBackupExCallback", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, + static_cast(ERR_OK)); + } HILOGI("Will notify backup result report"); extensionPtr->FinishOnProcessTask(); extensionPtr->AsyncTaskBackup(extensionPtr->extension_->GetUsrConfig()); @@ -460,11 +472,13 @@ std::function BackupExtExtension::IncOnBackupC extPtr->FinishOnProcessTask(); if (errCode == ERR_OK) { auto spendTime = extPtr->GetOnStartTimeCost(); - AppRadar::Info info(extPtr->bundleName_, "", string("\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\""))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::IncOnBackupCallback", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, - static_cast(ERR_OK)); + if (spendTime >= BConstants::MAX_TIME_COST) { + AppRadar::Info info(extPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::IncOnBackupCallback", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, + static_cast(ERR_OK)); + } proxy->GetAppLocalListAndDoIncrementalBackup(); return; } @@ -500,11 +514,13 @@ std::function BackupExtExtension::IncOnBackupE if (errCode == ERR_OK) { if (backupExRetInfo.size()) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\""))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::IncOnBackupExCallback", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, - static_cast(ERR_OK)); + if (spendTime >= BConstants::MAX_TIME_COST) { + AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::IncOnBackupExCallback", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, + static_cast(ERR_OK)); + } HILOGI("Start GetAppLocalListAndDoIncrementalBackup"); extensionPtr->FinishOnProcessTask(); proxy->GetAppLocalListAndDoIncrementalBackup(); diff --git a/services/backup_sa/src/module_app_gallery/app_gallery_dispose_proxy.cpp b/services/backup_sa/src/module_app_gallery/app_gallery_dispose_proxy.cpp index 0540db747a48c4907cf5c8f903770394075b1240..82bf9aa7acea748d415a5c371923ab9d0f319784 100644 --- a/services/backup_sa/src/module_app_gallery/app_gallery_dispose_proxy.cpp +++ b/services/backup_sa/src/module_app_gallery/app_gallery_dispose_proxy.cpp @@ -66,13 +66,25 @@ sptr AppGalleryDisposeProxy::GetInstance() DisposeErr AppGalleryDisposeProxy::StartBackup(const std::string &bundleName) { HILOGI("StartBackup, app %{public}s", bundleName.c_str()); - return DoDispose(bundleName, DisposeOperation::START_BACKUP); + DisposeErr res = DoDispose(bundleName, DisposeOperation::START_BACKUP); + if (res != DisposeErr::REQUEST_FAIL) { + AppRadar::Info info(bundleName, "", ""); + AppRadar::GetInstance().RecordBackupFuncRes(info, "StartBackup", AppRadar::GetInstance().GetUserId(), + BizStageBackup::BIZ_STAGE_START_DISPOSE, static_cast(res)); + } + return res; } DisposeErr AppGalleryDisposeProxy::EndBackup(const std::string &bundleName) { HILOGI("EndBackup, app %{public}s", bundleName.c_str()); - return DoDispose(bundleName, DisposeOperation::END_BACKUP); + DisposeErr res = DoDispose(bundleName, DisposeOperation::END_BACKUP); + if (res != DisposeErr::REQUEST_FAIL) { + AppRadar::Info info(bundleName, "", ""); + AppRadar::GetInstance().RecordBackupFuncRes(info, "EndBackup", AppRadar::GetInstance().GetUserId(), + BizStageBackup::BIZ_STAGE_END_DISPOSE, static_cast(res)); + } + return res; } DisposeErr AppGalleryDisposeProxy::StartRestore(const std::string &bundleName) @@ -82,7 +94,13 @@ DisposeErr AppGalleryDisposeProxy::StartRestore(const std::string &bundleName) return DisposeErr::OK; } HILOGI("StartRestore, app %{public}s", bundleName.c_str()); - return DoDispose(bundleName, DisposeOperation::START_RESTORE); + DisposeErr res = DoDispose(bundleName, DisposeOperation::START_RESTORE); + if (res != DisposeErr::REQUEST_FAIL) { + AppRadar::Info info(bundleName, "", ""); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "StartRestore", AppRadar::GetInstance().GetUserId(), + BizStageRestore::BIZ_STAGE_START_DISPOSE, static_cast(res)); + } + return res; } DisposeErr AppGalleryDisposeProxy::EndRestore(const std::string &bundleName) @@ -92,13 +110,19 @@ DisposeErr AppGalleryDisposeProxy::EndRestore(const std::string &bundleName) return DisposeErr::OK; } HILOGI("EndRestore, app %{public}s", bundleName.c_str()); - return DoDispose(bundleName, DisposeOperation::END_RESTORE); + DisposeErr res = DoDispose(bundleName, DisposeOperation::END_RESTORE); + if (res != DisposeErr::REQUEST_FAIL) { + AppRadar::Info info(bundleName, "", ""); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "EndRestore", AppRadar::GetInstance().GetUserId(), + BizStageRestore::BIZ_STAGE_END_DISPOSE, static_cast(res)); + } + return res; } void RecordDoDisposeRes(const std::string &bundleName, AppGalleryDisposeProxy::DisposeOperation disposeOperation, int32_t err) { - AppRadar::Info info (bundleName, "", ""); + AppRadar::Info info (bundleName, "", "REQUEST FAIL"); switch (disposeOperation) { case AppGalleryDisposeProxy::DisposeOperation::START_BACKUP: AppRadar::GetInstance().RecordBackupFuncRes(info, "StartBackup", AppRadar::GetInstance().GetUserId(), @@ -126,7 +150,7 @@ DisposeErr AppGalleryDisposeProxy::DoDispose(const std::string &bundleName, Disp try { HILOGI("DoDispose, app %{public}s, operation %{public}d", bundleName.c_str(), disposeOperation); if (!ConnectExtAbility() || appRemoteObj_ == nullptr) { - HILOGI("Can not connect to %{public}s", bundleName.c_str()); + HILOGE("Can not connect to %{public}s", bundleName.c_str()); return DisposeErr::CONN_FAIL; } @@ -134,15 +158,15 @@ DisposeErr AppGalleryDisposeProxy::DoDispose(const std::string &bundleName, Disp MessageParcel data; const auto interfaceToken = APP_FOUNDATION_SERVICE; if (!data.WriteInterfaceToken(interfaceToken)) { - HILOGI("write WriteInterfaceToken failed"); + HILOGE("write WriteInterfaceToken failed"); return DisposeErr::IPC_FAIL; } if (!data.WriteString16(Str8ToStr16(bundleDetailInfo.bundleName))) { - HILOGI("write bundleName failed"); + HILOGE("write bundleName failed"); return DisposeErr::IPC_FAIL; } if (!data.WriteInt32(static_cast(bundleDetailInfo.bundleIndex))) { - HILOGI("write bundleIndex failed"); + HILOGE("write bundleIndex failed"); return DisposeErr::IPC_FAIL; } diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 5785bc60ca89d7c74900330358c761bb89708342..b81770bc56ffcf4897ac2b62e09235afb2bdfa36 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -316,6 +316,27 @@ void Service::StopAll(const wptr &obj, bool force) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); std::lock_guard lock(failedBundlesLock_); + int32_t fail_cnt = failedBundles_.size(); + int32_t totalBundles = fail_cnt + successBundlesNum_.load(); + if (totalBundles != 0) { + int32_t result = 0; + if (fail_cnt != 0) { + result = BError::BackupErrorCode::E_TASKFAIL; + } + std::stringstream ss; + ss << "successBundleNum:" << successBundlesNum_ << "," << "failedBundleNum:" << + fail_cnt << "," << "failedBundles:{"; + for (auto &failBundle : failedBundles_) { + ss << "\"" << failBundle.first << "\":" << "{errCode:" << failBundle.second.errCode << "," + << "reportTime:" << failBundle.second.reportTime << "},"; + } + ss << "}"; + string resultInfo = ss.str(); + AppRadar::StatInfo statInfo("", resultInfo); + IServiceReverse::Scenario scenario = session_->GetScenario(); + AppRadar::GetInstance().RecordStatisticRes(statInfo, GetUserIdDefault(), scenario, + successBundlesNum_.load(), fail_cnt, result); + } failedBundles_.clear(); successBundlesNum_ = 0; session_->Deactive(obj, force); diff --git a/services/backup_sa/src/module_ipc/service_incremental.cpp b/services/backup_sa/src/module_ipc/service_incremental.cpp index 7d330e0d1c04e65dddc6b517dbd60289aa1c7b0c..203e52ed9b35d18ed74c37fa01c4640c38257dd6 100644 --- a/services/backup_sa/src/module_ipc/service_incremental.cpp +++ b/services/backup_sa/src/module_ipc/service_incremental.cpp @@ -80,7 +80,16 @@ ErrCode Service::Release() { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); HILOGI("KILL"); - VerifyCaller(session_->GetScenario()); + IServiceReverse::Scenario scenario = session_->GetScenario(); + VerifyCaller(scenario); + AppRadar::Info info("", "", "call release"); + if (scenario == IServiceReverse::Scenario::RESTORE) { + AppRadar::GetInstance().RecordRestoreFuncRes(info, "Service::Release", session_->GetSessionUserId(), + BizStageRestore::BIZ_STAGE_RELEASE, ERR_OK); + } else if (scenario == IServiceReverse::Scenario::BACKUP) { + AppRadar::GetInstance().RecordBackupFuncRes(info, "Service::Release", session_->GetSessionUserId(), + BizStageBackup::BIZ_STAGE_RELEASE, ERR_OK); + } SessionDeactive(); return BError(BError::Codes::OK); } diff --git a/services/backup_sa/src/module_sched/sched_scheduler.cpp b/services/backup_sa/src/module_sched/sched_scheduler.cpp index efcfb24d6329383f4989b9eff341440a7ff4c6d6..ca7e528f8c6ceba2cf55fe9ff671ff07f7d086eb 100644 --- a/services/backup_sa/src/module_sched/sched_scheduler.cpp +++ b/services/backup_sa/src/module_sched/sched_scheduler.cpp @@ -40,6 +40,21 @@ namespace OHOS::FileManagement::Backup { using namespace std; +void ExtDiedClearFailRadarReport(const string& bundleName, IServiceReverse::Scenario scenario, ErrCode res) +{ + if (res == ERR_OK) { + return; + } + AppRadar::Info info(bundleName, "", ""); + if (scenario == IServiceReverse::Scenario::RESTORE) { + AppRadar::GetInstance().RecordRestoreFuncRes(info, "SchedScheduler::ExecutingQueueTasks", + AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_EXTENSION_ABNORMAL_EXIT_CLEAR_FAIL, res); + } else if (scenario == IServiceReverse::Scenario::BACKUP) { + AppRadar::GetInstance().RecordBackupFuncRes(info, "SchedScheduler::ExecutingQueueTasks", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_EXTENSION_ABNORMAL_EXIT_CLEAR_FAIL, res); + } +} + void SchedScheduler::Sched(string bundleName) { if (bundleName == "") { @@ -119,7 +134,9 @@ void SchedScheduler::ExecutingQueueTasks(const string &bundleName) } } else if (action == BConstants::ServiceSchedAction::CLEAN) { HILOGI("Current bundle %{public}s process is cleaning", bundleName.data()); - reversePtr_->ClearResidualBundleData(bundleName); + ErrCode res = reversePtr_->ClearResidualBundleData(bundleName); + IServiceReverse::Scenario scenario = sessionPtr_->GetScenario(); + ExtDiedClearFailRadarReport(bundleName, scenario, res); } } diff --git a/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp b/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp index 45729864b1af196cf96006b30f74fa8579911d9c..9286bc29d9bfe64952e164de64dbdd1dbc1971e4 100644 --- a/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_throw_test.cpp @@ -913,6 +913,7 @@ HWTEST_F(ServiceThrowTest, SUB_Service_throw_InitIncrementalBackupSession_0100, return 0; })); EXPECT_CALL(*sessionMock, Deactive(_, _)).WillOnce(Return()); + EXPECT_CALL(*sessionMock, GetScenario()).WillOnce(Return(IServiceReverse::Scenario::UNDEFINED)); auto ret = service->InitIncrementalBackupSession(nullptr); EXPECT_EQ(ret, BError(BError::Codes::EXT_THROW_EXCEPTION).GetCode()); } catch (...) { diff --git a/utils/include/b_radar/b_radar.h b/utils/include/b_radar/b_radar.h index 9bf798493280064a1cb7f702640ef55a75db7bf5..2ec80872ed849717674d7aa70fc536c7e16f95d6 100644 --- a/utils/include/b_radar/b_radar.h +++ b/utils/include/b_radar/b_radar.h @@ -94,6 +94,23 @@ public: int64_t totalFileSpendTime; }; + struct DoBackupInfo { + int64_t cost; + uint32_t allFileNum; + uint32_t smallFileNum; + uint32_t tarFileNum; + uint32_t includeNum; + uint32_t excludeNum; + }; + + struct StatInfo { + std::string callerName; + std::string resInfo; + + StatInfo(const std::string &callerName, const std::string &resInfo) + : callerName(callerName), resInfo(resInfo) {} + }; + public: int32_t GetUserId(); void RecordDefaultFuncRes(Info &info, const std::string &func, int32_t userId, @@ -102,6 +119,8 @@ public: enum BizStageBackup bizStage, int32_t resultCode); void RecordRestoreFuncRes(Info &info, const std::string &func, int32_t userId, enum BizStageRestore bizStage, int32_t resultCode); + void RecordStatisticRes(StatInfo &statInfo, int32_t userId, enum IServiceReverse::Scenario scenario, + int32_t succ_cnt, int32_t fail_cnt, int32_t resultCode); private: AppRadar() = default; ~AppRadar() = default; diff --git a/utils/src/b_radar/b_radar.cpp b/utils/src/b_radar/b_radar.cpp index 1316310e04abf32c7bff25ad0b6c17a10b8ca444..1c7f7ac8450ded0c0756ae40d4f69b87ef234dc3 100644 --- a/utils/src/b_radar/b_radar.cpp +++ b/utils/src/b_radar/b_radar.cpp @@ -97,4 +97,24 @@ void AppRadar::RecordRestoreFuncRes(Info &info, const std::string &func, int32_t "RESULT_CODE", resultCode, "RESULT_INFO", ss.str()); } + +void AppRadar::RecordStatisticRes(StatInfo &statInfo, int32_t userId, enum IServiceReverse::Scenario scenario, + int32_t succ_cnt, int32_t fail_cnt, int32_t resultCode) +{ + std::stringstream ss; + ss << R"("result_info": {)" << statInfo.resInfo << "}}"; + HiSysEventWrite( + OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT, + BConstants::FILE_BACKUP_RESTORE_STATISTIC, + OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC, + "CALLER_NAME", statInfo.callerName, + "USER_ID", userId, + "PID", getpid(), + "TIME", TimeUtils::GetCurrentTime(), + "BIZ_SCENE", static_cast(scenario), + "SUCC_CNT", succ_cnt, + "FAIL_CNT", fail_cnt, + "RESULT_CODE", resultCode, + "RESULT_INFO", ss.str()); +} } // namespace OHOS::FileManagement::Backup \ No newline at end of file