1 /*
2 * Copyright (C) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "upgrade_restore_task_report.h"
16
17 #include <sstream>
18 #include <nlohmann/json.hpp>
19
20 #include "media_log.h"
21 #include "hisysevent.h"
22 #include "media_backup_report_data_type.h"
23 #include "upgrade_restore_gallery_media_task.h"
24 #include "json_utils.h"
25
26 namespace OHOS::Media {
27 static constexpr char MEDIA_LIBRARY[] = "MEDIALIBRARY";
Report(const std::string & taskInfo)28 int32_t UpgradeRestoreGalleryMediaTask::Report(const std::string &taskInfo)
29 {
30 UpgradeRestoreGalleryMediaTask::ResultData resultData = this->ParseFromJsonStr(taskInfo);
31 MEDIA_INFO_LOG("UpgradeRestoreGalleryMediaTask, resultData: %{public}s", this->ToString(resultData).c_str());
32 for (const auto &eventInfo : this->Parse(resultData)) {
33 int32_t ret = HiSysEventWrite(MEDIA_LIBRARY,
34 "MEDIALIB_BACKUP_RESTORE_RESULT",
35 HiviewDFX::HiSysEvent::EventType::STATISTIC,
36 "SCENE_CODE",
37 eventInfo.sceneCode,
38 "TASK_ID",
39 eventInfo.taskId,
40 "ERROR_CODE",
41 eventInfo.errorCode,
42 "ERROR_INFO",
43 eventInfo.errorInfo,
44 "TYPE",
45 eventInfo.type,
46 "BACKUP_INFO",
47 eventInfo.backupInfo,
48 "DUPLICATE_COUNT",
49 eventInfo.duplicateCount,
50 "FAILED_COUNT",
51 eventInfo.failedCount,
52 "SUCCESS_COUNT",
53 eventInfo.successCount);
54 if (ret != 0) {
55 MEDIA_ERR_LOG("UpgradeRestoreGalleryMediaTask error:%{public}d", ret);
56 }
57 }
58 return 0;
59 }
60
ParseFromJsonStr(const std::string & jsonStr)61 UpgradeRestoreGalleryMediaTask::ResultData UpgradeRestoreGalleryMediaTask::ParseFromJsonStr(const std::string &jsonStr)
62 {
63 JsonUtils jsonUtils;
64 nlohmann::json jsonObj = jsonUtils.Parse(jsonStr);
65 ResultData resultData;
66 for (const auto &info : jsonUtils.GetArray(jsonObj, "resultInfo")) {
67 ResultInfo resultInfo;
68 resultInfo.errorCode = jsonUtils.GetString(info, "errorCode");
69 resultInfo.errorInfo = jsonUtils.GetString(info, "errorInfo");
70 resultInfo.type = jsonUtils.GetString(info, "type");
71 for (const auto &backup : jsonUtils.GetArray(info, "infos")) {
72 BackupInfo backupInfo;
73 backupInfo.backupInfo = jsonUtils.GetString(backup, "backupInfo");
74 backupInfo.duplicateCount = jsonUtils.GetInt(backup, "duplicateCount");
75 backupInfo.failedCount = jsonUtils.GetInt(backup, "failedCount");
76 backupInfo.successCount = jsonUtils.GetInt(backup, "successCount");
77 resultInfo.infos.push_back(backupInfo);
78 }
79 resultData.resultInfo.push_back(resultInfo);
80 }
81 return resultData;
82 }
83
Parse(const UpgradeRestoreGalleryMediaTask::ResultData & resultData)84 std::vector<MediaRestoreResultInfo> UpgradeRestoreGalleryMediaTask::Parse(
85 const UpgradeRestoreGalleryMediaTask::ResultData &resultData)
86 {
87 std::vector<MediaRestoreResultInfo> result;
88 for (const auto &resultInfo : resultData.resultInfo) {
89 for (const auto &backupInfo : resultInfo.infos) {
90 MediaRestoreResultInfo eventInfo;
91 eventInfo.sceneCode = this->sceneCode_;
92 eventInfo.taskId = this->taskId_;
93 eventInfo.errorCode = resultInfo.errorCode;
94 eventInfo.errorInfo = resultInfo.errorInfo;
95 eventInfo.type = resultInfo.type;
96 eventInfo.backupInfo = backupInfo.backupInfo;
97 eventInfo.duplicateCount = backupInfo.duplicateCount;
98 eventInfo.failedCount = backupInfo.failedCount;
99 eventInfo.successCount = backupInfo.successCount;
100 result.emplace_back(eventInfo);
101 }
102 }
103 return result;
104 }
105
ToString(const UpgradeRestoreGalleryMediaTask::ResultData & resultData)106 std::string UpgradeRestoreGalleryMediaTask::ToString(const UpgradeRestoreGalleryMediaTask::ResultData &resultData)
107 {
108 std::stringstream ss;
109 for (const auto &resultInfo : resultData.resultInfo) {
110 ss << "ErrorCode: " << resultInfo.errorCode << ", ";
111 ss << "ErrorInfo: " << resultInfo.errorInfo << ", ";
112 ss << "Type: " << resultInfo.type << ", ";
113 for (const auto &backupInfo : resultInfo.infos) {
114 ss << "BackupInfo: " << backupInfo.backupInfo << ", ";
115 ss << "DuplicateCount: " << backupInfo.duplicateCount << ", ";
116 ss << "FailedCount: " << backupInfo.failedCount << ", ";
117 ss << "SuccessCount: " << backupInfo.successCount << ", ";
118 }
119 }
120 return ss.str();
121 }
122 } // namespace OHOS::Media