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 
16 #include <iomanip>
17 #include <sstream>
18 #include <string>
19 #include <unistd.h>
20 
21 #include "b_process/b_multiuser.h"
22 #include "b_radar/b_radar.h"
23 #include "b_resources/b_constants.h"
24 #include "b_utils/b_time.h"
25 #include "hisysevent.h"
26 #include "i_service_reverse.h"
27 
28 namespace OHOS::FileManagement::Backup {
GetUserId()29 int32_t AppRadar::GetUserId()
30 {
31     auto multiuser = BMultiuser::ParseUid(getuid());
32     if ((multiuser.userId == BConstants::SYSTEM_UID) || (multiuser.userId == BConstants::XTS_UID)) {
33         return BConstants::DEFAULT_USER_ID;
34     }
35     return multiuser.userId;
36 }
37 
RecordDefaultFuncRes(Info & info,const std::string & func,int32_t userId,enum BizStageBackup bizStage,int32_t resultCode)38 void AppRadar::RecordDefaultFuncRes(Info &info, const std::string &func, int32_t userId,
39                                     enum BizStageBackup bizStage, int32_t resultCode)
40 {
41     std::stringstream ss;
42     ss << R"("result_info": {)" << info.resInfo << "}}";
43     HiSysEventWrite(
44         OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT,
45         BConstants::FILE_BACKUP_RESTORE_EVENTS,
46         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
47         "BUNDLE_NAME", info.bundleName,
48         "USER_ID", userId,
49         "PID", getpid(),
50         "FUNC", func,
51         "TIME", TimeUtils::GetCurrentTime(),
52         "BIZ_SCENE", static_cast<int32_t>(IServiceReverse::Scenario::UNDEFINED),
53         "BIZ_STAGE", static_cast<int32_t>(bizStage),
54         "EXEC_STATUS", info.status,
55         "RESULT_CODE", resultCode,
56         "RESULT_INFO", ss.str());
57 }
58 
RecordBackupFuncRes(Info & info,const std::string & func,int32_t userId,enum BizStageBackup bizStage,int32_t resultCode)59 void AppRadar::RecordBackupFuncRes(Info &info, const std::string &func, int32_t userId,
60                                    enum BizStageBackup bizStage, int32_t resultCode)
61 {
62     std::stringstream ss;
63     ss << R"("result_info": {)" << info.resInfo << "}}";
64     HiSysEventWrite(
65         OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT,
66         BConstants::FILE_BACKUP_RESTORE_EVENTS,
67         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
68         "BUNDLE_NAME", info.bundleName,
69         "USER_ID", userId,
70         "PID", getpid(),
71         "FUNC", func,
72         "TIME", TimeUtils::GetCurrentTime(),
73         "BIZ_SCENE", static_cast<int32_t>(IServiceReverse::Scenario::BACKUP),
74         "BIZ_STAGE", static_cast<int32_t>(bizStage),
75         "EXEC_STATUS", info.status,
76         "RESULT_CODE", resultCode,
77         "RESULT_INFO", ss.str());
78 }
79 
RecordRestoreFuncRes(Info & info,const std::string & func,int32_t userId,enum BizStageRestore bizStage,int32_t resultCode)80 void AppRadar::RecordRestoreFuncRes(Info &info, const std::string &func, int32_t userId,
81                                     enum BizStageRestore bizStage, int32_t resultCode)
82 {
83     std::stringstream ss;
84     ss << R"("result_info": {)" << info.resInfo << "}}";
85     HiSysEventWrite(
86         OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT,
87         BConstants::FILE_BACKUP_RESTORE_EVENTS,
88         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
89         "BUNDLE_NAME", info.bundleName,
90         "USER_ID", userId,
91         "PID", getpid(),
92         "FUNC", func,
93         "TIME", TimeUtils::GetCurrentTime(),
94         "BIZ_SCENE", static_cast<int32_t>(IServiceReverse::Scenario::RESTORE),
95         "BIZ_STAGE", static_cast<int32_t>(bizStage),
96         "EXEC_STATUS", info.status,
97         "RESULT_CODE", resultCode,
98         "RESULT_INFO", ss.str());
99 }
100 
RecordStatisticRes(StatInfo & statInfo,int32_t userId,enum IServiceReverse::Scenario scenario,int32_t succ_cnt,int32_t fail_cnt,int32_t resultCode)101 void AppRadar::RecordStatisticRes(StatInfo &statInfo, int32_t userId, enum IServiceReverse::Scenario scenario,
102                                   int32_t succ_cnt, int32_t fail_cnt, int32_t resultCode)
103 {
104     std::stringstream ss;
105     ss << R"("result_info": {)" << statInfo.resInfo << "}}";
106     HiSysEventWrite(
107         OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT,
108         BConstants::FILE_BACKUP_RESTORE_STATISTIC,
109         OHOS::HiviewDFX::HiSysEvent::EventType::STATISTIC,
110         "CALLER_NAME", statInfo.callerName,
111         "USER_ID", userId,
112         "PID", getpid(),
113         "TIME", TimeUtils::GetCurrentTime(),
114         "BIZ_SCENE", static_cast<int32_t>(scenario),
115         "SUCC_CNT", succ_cnt,
116         "FAIL_CNT", fail_cnt,
117         "RESULT_CODE", resultCode,
118         "RESULT_INFO", ss.str());
119 }
120 } // namespace OHOS::FileManagement::Backup