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 #ifndef DATASHARE_RADAR_REPORTER_H
17 #define DATASHARE_RADAR_REPORTER_H
18 
19 #include "hisysevent.h"
20 
21 namespace OHOS {
22 namespace DataShare {
23 namespace RadarReporter {
24 using namespace OHOS::HiviewDFX;
25 static constexpr int DISTRIBUTEDDATA_ID = 0xd;
26 static constexpr int DATA_SHARE_ID = 5;
27 enum BizScene {
28     CREATE_DATASHARE_HELPER = 1,
29     SILENT_ACCESS = 2,
30     OBSERVER_MANAGER = 3,
31     NOTIFY_OBSERVER_DATA_CHANGE = 4,
32     TEMPLATE_DATA_MANAGER = 5,
33     TEMPLATE_DATA_CHANGE = 6,
34 };
35 
36 enum CreateDataShareHelperStage {
37     CREATE_HELPER = 1,
38     DISTRIBUTEDDATA_START = 2,
39     CONNECT_EXT = 3,
40     DIS_CONNECT_EXT = 4,
41 };
42 
43 enum SilentAccessStage {
44     EXT_REQUEST = 1,
45     GET_BMS = 2,
46     PROXY_GET_SUPPLIER = 3,
47     PROXY_PERMISSION = 4,
48     PROXY_MATEDATA_EXISTS = 5,
49     PROXY_CONNECT_EXT = 6,
50     PROXY_CALL_RDB = 7,
51 };
52 
53 enum ObserverManagerStage {
54     REGISTER_OBSERVER = 1,
55     UNREGISTER_OBSERVER = 2,
56 };
57 
58 enum NotifyObserverDataChangeStage {
59     NOTIFY_DATA_CHANGE = 1,
60 };
61 
62 enum TemplateDataManagerStage {
63     SUBSCRIBE_PUBLISHED_DATA = 1,
64     SUBSCRIBE_RDB_DATA = 2,
65     UNSUBSCRIBE_PUBLISHED_DATA = 3,
66     UNSUBSCRIBE_RDB_DATA = 4,
67     ADD_TEMPLATE = 5,
68     DELETE_TEMPLATE = 6,
69 };
70 
71 enum TemplateDataChangeStage {
72     PUBLISHED_DATA_CHANGE = 1,
73     RDB_DATA_CHANGE = 2,
74 };
75 
76 enum StageRes {
77     IDLE = 0,
78     SUCCESS = 1,
79     FAILED = 2,
80     CANCELLED = 3,
81 };
82 
83 enum BizState {
84     START = 1,
85     FINISHED = 2,
86 };
87 
88 enum ErrorCode {
89     CONNECT_EXTENSION_ERROR = (DISTRIBUTEDDATA_ID << 21) | (DATA_SHARE_ID << 16),
90     CREATE_HELPER_ERROR,
91     CREATE_SHARE_BLOCK_ERROR,
92     SHARE_BLOCK_FULL,
93     DISTRIBUTEDDATA_NOT_START,
94     EXT_CONNECT_TIMEOUT_ERROR,
95     EXT_DIS_CONNECT_ERROR,
96     GET_BMS_FAILED,
97     SUPPLIER_ERROR,
98     URI_ERROR,
99     PERMISSION_DENIED_ERROR,
100     GET_RDB_STORE_ERROR,
101     META_DATA_NOT_EXISTS,
102     EMPTY_OBSERVER_ERROR,
103     NOTIFY_ERROR,
104     DATA_OBS_EMPTY_ERROR,
105     SILENT_PROXY_DISABLE,
106     ADD_TEMPLATE_ERROR,
107     NOT_SUBCRIBE_ERROR,
108     CREATE_DELEGATE_ERROR,
109     INSERT_RDB_ERROR,
110     QUERY_RDB_ERROR,
111     DELETE_RDB_ERROR,
112     UPDATE_RDB_ERROR,
113     GET_BUNDLE_INFP_FAILED,
114     EMPTY_PARAM_ERROR,
115     INVALID_PARAM_ERROR,
116     DATA_SHARE_DIED_ERROR,
117 };
118 
119 static constexpr char DOMAIN[] = "DISTDATAMGR";
120 constexpr const char* EVENT_NAME = "DISTRIBUTED_DATA_SHARE_BEHAVIOR";
121 constexpr const char* ORG_PKG = "distributeddata";
122 constexpr const char* BIZ_STATE = "BIZ_STATE";
123 constexpr const char* ERROR_CODE = "ERROR_CODE";
124 constexpr const char* LOCAL_SESS_NAME = "LOCAL_SESS_NAME";
125 constexpr const char* PEER_SESS_NAME = "PEER_SESS_NAME";
126 
127 static constexpr HiviewDFX::HiSysEvent::EventType TYPE = HiviewDFX::HiSysEvent::EventType::BEHAVIOR;
128 
129 #define RADAR_REPORT(funcName, bizScene, bizStage, stageRes, ...)                          \
130 ({                                                                                         \
131     HiSysEventWrite(RadarReporter::DOMAIN, RadarReporter::EVENT_NAME, RadarReporter::TYPE, \
132         "ORG_PKG", RadarReporter::ORG_PKG, "FUNC", funcName,                               \
133         "BIZ_SCENE", bizScene, "BIZ_STAGE", bizStage, "STAGE_RES", stageRes,               \
134         ##__VA_ARGS__);                                                                    \
135 })
136 
137 class RadarReport final {
138 public:
RadarReport(int32_t bizScene,int32_t bizStage,const std::string funcName)139     RadarReport(int32_t bizScene, int32_t bizStage, const std::string funcName)
140     {
141         RADAR_REPORT(funcName, bizScene, bizStage, RadarReporter::SUCCESS,
142             RadarReporter::BIZ_STATE, RadarReporter::START);
143         bizScene_ = bizScene;
144         bizStage_ = bizStage;
145         funcName_ = funcName;
146     }
147 
~RadarReport()148     ~RadarReport()
149     {
150         if (errorCode_ != 0) {
151             RADAR_REPORT(funcName_, bizScene_, bizStage_, RadarReporter::FAILED, RadarReporter::BIZ_STATE,
152                 RadarReporter::FINISHED, RadarReporter::ERROR_CODE, errorCode_);
153         } else {
154             RADAR_REPORT(funcName_, bizScene_, bizStage_, RadarReporter::SUCCESS,
155                 RadarReporter::BIZ_STATE, RadarReporter::FINISHED);
156         }
157     }
158 
SetError(int32_t errorCode)159     void SetError(int32_t errorCode)
160     {
161         errorCode_ = errorCode;
162     }
163 private:
164     int32_t bizScene_;
165     int32_t bizStage_;
166     int32_t errorCode_ = 0;
167     std::string funcName_;
168 };
169 } // namespace RadarReporter
170 } // namespace DataShare
171 } // namespace OHOS
172 #endif // DATASHARE_RADAR_REPORTER_H