• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 <map>
17 
18 #include "event_report.h"
19 #include "hilog_wrapper.h"
20 
21 namespace OHOS {
22 namespace AAFwk {
23 namespace {
24 // event params
25 const std::string TYPE = "TYPE";
26 const std::string EVENT_KEY_APP_PID = "APP_PID";
27 const std::string EVENT_KEY_USERID = "USER_ID";
28 const std::string EVENT_KEY_FORM_ID = "FORM_ID";
29 const std::string EVENT_KEY_ERROR_CODE = "ERROR_CODE";
30 const std::string EVENT_KEY_BUNDLE_NAME = "BUNDLE_NAME";
31 const std::string EVENT_KEY_MODULE_NAME = "MODULE_NAME";
32 const std::string EVENT_KEY_ABILITY_NAME = "ABILITY_NAME";
33 const std::string EVENT_KEY_ABILITY_TYPE = "ABILITY_TYPE";
34 const std::string EVENT_KEY_VERSION_NAME = "VERSION_NAME";
35 const std::string EVENT_KEY_VERSION_CODE = "VERSION_CODE";
36 const std::string EVENT_KEY_PROCESS_NAME = "PROCESS_NAME";
37 const std::string EVENT_KEY_EXTENSION_TYPE = "EXTENSION_TYPE";
38 const std::map<EventName, std::string> eventNameToStrMap_ = {
39     std::map<EventName, std::string>::value_type(EventName::START_ABILITY_ERROR, "START_ABILITY_ERROR"),
40     std::map<EventName, std::string>::value_type(EventName::TERMINATE_ABILITY_ERROR, "TERMINATE_ABILITY_ERROR"),
41     std::map<EventName, std::string>::value_type(EventName::START_EXTENSION_ERROR, "START_EXTENSION_ERROR"),
42     std::map<EventName, std::string>::value_type(EventName::STOP_EXTENSION_ERROR, "STOP_EXTENSION_ERROR"),
43     std::map<EventName, std::string>::value_type(EventName::CONNECT_SERVICE_ERROR, "CONNECT_SERVICE_ERROR"),
44     std::map<EventName, std::string>::value_type(EventName::DISCONNECT_SERVICE_ERROR, "DISCONNECT_SERVICE_ERROR"),
45     std::map<EventName, std::string>::value_type(EventName::START_ABILITY, "START_ABILITY"),
46     std::map<EventName, std::string>::value_type(EventName::TERMINATE_ABILITY, "TERMINATE_ABILITY"),
47     std::map<EventName, std::string>::value_type(EventName::CLOSE_ABILITY, "CLOSE_ABILITY"),
48     std::map<EventName, std::string>::value_type(EventName::ABILITY_ONFOREGROUND, "ABILITY_ONFOREGROUND"),
49     std::map<EventName, std::string>::value_type(EventName::ABILITY_ONBACKGROUND, "ABILITY_ONBACKGROUND"),
50     std::map<EventName, std::string>::value_type(EventName::ABILITY_ONACTIVE, "ABILITY_ONACTIVE"),
51     std::map<EventName, std::string>::value_type(EventName::ABILITY_ONINACTIVE, "ABILITY_ONINACTIVE"),
52     std::map<EventName, std::string>::value_type(EventName::START_SERVICE, "START_SERVICE"),
53     std::map<EventName, std::string>::value_type(EventName::STOP_SERVICE, "STOP_SERVICE"),
54     std::map<EventName, std::string>::value_type(EventName::CONNECT_SERVICE, "CONNECT_SERVICE"),
55     std::map<EventName, std::string>::value_type(EventName::DISCONNECT_SERVICE, "DISCONNECT_SERVICE"),
56     std::map<EventName, std::string>::value_type(EventName::ADD_FORM, "ADD_FORM"),
57     std::map<EventName, std::string>::value_type(EventName::REQUEST_FORM, "REQUEST_FORM"),
58     std::map<EventName, std::string>::value_type(EventName::REQUEST_FORM, "REQUEST_FORM"),
59     std::map<EventName, std::string>::value_type(EventName::DELETE_FORM, "DELETE_FORM"),
60     std::map<EventName, std::string>::value_type(EventName::CASTTEMP_FORM, "CASTTEMP_FORM"),
61     std::map<EventName, std::string>::value_type(EventName::ACQUIREFORMSTATE_FORM, "ACQUIREFORMSTATE_FORM"),
62     std::map<EventName, std::string>::value_type(EventName::MESSAGE_EVENT_FORM, "MESSAGE_EVENT_FORM"),
63     std::map<EventName, std::string>::value_type(EventName::ROUTE_EVENT_FORM, "ROUTE_EVENT_FORM"),
64     std::map<EventName, std::string>::value_type(EventName::BACKGROUND_EVENT_FORM, "BACKGROUND_EVENT_FORM"),
65     std::map<EventName, std::string>::value_type(EventName::RELEASE_FORM, "RELEASE_FORM"),
66     std::map<EventName, std::string>::value_type(EventName::DELETE_INVALID_FORM, "DELETE_INVALID_FORM"),
67     std::map<EventName, std::string>::value_type(EventName::SET_NEXT_REFRESH_TIME_FORM, "SET_NEXT_REFRESH_TIME_FORM"),
68     std::map<EventName, std::string>::value_type(EventName::APP_ATTACH, "APP_ATTACH"),
69     std::map<EventName, std::string>::value_type(EventName::APP_LAUNCH, "APP_LAUNCH"),
70     std::map<EventName, std::string>::value_type(EventName::APP_FOREGROUND, "APP_FOREGROUND"),
71     std::map<EventName, std::string>::value_type(EventName::APP_BACKGROUND, "APP_BACKGROUND"),
72     std::map<EventName, std::string>::value_type(EventName::APP_TERMINATE, "APP_TERMINATE"),
73 };
74 }
75 
SendAppEvent(const EventName & eventName,HiSysEventType type,const EventInfo & eventInfo)76 void EventReport::SendAppEvent(const EventName &eventName, HiSysEventType type,
77     const EventInfo& eventInfo)
78 {
79     std::string name = ConvertEventName(eventName);
80     if (name == "INVALIDEVENTNAME") {
81         HILOG_ERROR("invalid eventName");
82         return;
83     }
84     HiSysEvent::Write(
85         HiSysEvent::Domain::AAFWK,
86         name,
87         type,
88         EVENT_KEY_APP_PID, eventInfo.pid,
89         EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
90         EVENT_KEY_VERSION_NAME, eventInfo.versionName,
91         EVENT_KEY_VERSION_CODE, eventInfo.versionCode,
92         EVENT_KEY_PROCESS_NAME, eventInfo.processName);
93 }
94 
SendAbilityEvent(const EventName & eventName,HiSysEventType type,const EventInfo & eventInfo)95 void EventReport::SendAbilityEvent(const EventName &eventName, HiSysEventType type,
96     const EventInfo& eventInfo)
97 {
98     std::string name = ConvertEventName(eventName);
99     if (name == "INVALIDEVENTNAME") {
100         HILOG_ERROR("invalid eventName");
101         return;
102     }
103     switch (eventName) {
104         case EventName::START_ABILITY_ERROR:
105         case EventName::TERMINATE_ABILITY_ERROR:
106             HiSysEvent::Write(
107                 HiSysEvent::Domain::AAFWK,
108                 name,
109                 type,
110                 EVENT_KEY_USERID, eventInfo.userId,
111                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
112                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
113                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName,
114                 EVENT_KEY_ERROR_CODE, eventInfo.errCode);
115             break;
116         case EventName::START_ABILITY:
117             HiSysEvent::Write(
118                 HiSysEvent::Domain::AAFWK,
119                 name,
120                 type,
121                 EVENT_KEY_USERID, eventInfo.userId,
122                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
123                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
124                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
125             break;
126         case EventName::TERMINATE_ABILITY:
127         case EventName::CLOSE_ABILITY:
128             HiSysEvent::Write(
129                 HiSysEvent::Domain::AAFWK,
130                 name,
131                 type,
132                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
133                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
134             break;
135         case EventName::ABILITY_ONFOREGROUND:
136         case EventName::ABILITY_ONBACKGROUND:
137         case EventName::ABILITY_ONINACTIVE:
138             HiSysEvent::Write(
139                 HiSysEvent::Domain::AAFWK,
140                 name,
141                 type,
142                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
143                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
144                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
145             break;
146         case EventName::ABILITY_ONACTIVE:
147             HiSysEventWrite(
148                 HiSysEvent::Domain::AAFWK,
149                 name,
150                 type,
151                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
152                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
153                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName,
154                 EVENT_KEY_ABILITY_TYPE, eventInfo.abilityType);
155             break;
156         default:
157             break;
158     }
159 }
160 
SendExtensionEvent(const EventName & eventName,HiSysEventType type,const EventInfo & eventInfo)161 void EventReport::SendExtensionEvent(const EventName &eventName, HiSysEventType type,
162     const EventInfo& eventInfo)
163 {
164     std::string name = ConvertEventName(eventName);
165     if (name == "INVALIDEVENTNAME") {
166         HILOG_ERROR("invalid eventName");
167         return;
168     }
169     switch (eventName) {
170         case EventName::DISCONNECT_SERVICE:
171             HiSysEvent::Write(HiSysEvent::Domain::AAFWK, name, type);
172             break;
173         case EventName::CONNECT_SERVICE:
174             HiSysEvent::Write(
175                 HiSysEvent::Domain::AAFWK,
176                 name,
177                 type,
178                 EVENT_KEY_USERID, eventInfo.userId,
179                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
180                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
181                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
182             break;
183         case EventName::START_SERVICE:
184         case EventName::STOP_SERVICE:
185             HiSysEvent::Write(
186                 HiSysEvent::Domain::AAFWK,
187                 name,
188                 type,
189                 EVENT_KEY_USERID, eventInfo.userId,
190                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
191                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
192                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName,
193                 EVENT_KEY_EXTENSION_TYPE, eventInfo.extensionType);
194             break;
195         case EventName::START_EXTENSION_ERROR:
196         case EventName::STOP_EXTENSION_ERROR:
197         case EventName::CONNECT_SERVICE_ERROR:
198             HiSysEvent::Write(
199                 HiSysEvent::Domain::AAFWK,
200                 name,
201                 type,
202                 EVENT_KEY_USERID, eventInfo.userId,
203                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
204                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
205                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName,
206                 EVENT_KEY_ERROR_CODE, eventInfo.errCode);
207             break;
208         case EventName::DISCONNECT_SERVICE_ERROR:
209             HiSysEvent::Write(HiSysEvent::Domain::AAFWK, name, type, EVENT_KEY_ERROR_CODE, eventInfo.errCode);
210             break;
211         default:
212             break;
213     }
214 }
215 
SendFormEvent(const EventName & eventName,HiSysEventType type,const EventInfo & eventInfo)216 void EventReport::SendFormEvent(const EventName &eventName, HiSysEventType type,
217     const EventInfo& eventInfo)
218 {
219     std::string name = ConvertEventName(eventName);
220     if (name == "INVALIDEVENTNAME") {
221         HILOG_ERROR("invalid eventName");
222         return;
223     }
224     switch (eventName) {
225         case EventName::DELETE_INVALID_FORM:
226             HiSysEvent::Write(HiSysEvent::Domain::AAFWK, name, type);
227             break;
228         case EventName::ACQUIREFORMSTATE_FORM:
229         case EventName::MESSAGE_EVENT_FORM:
230             HiSysEvent::Write(
231                 HiSysEvent::Domain::AAFWK,
232                 name,
233                 type,
234                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
235                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
236                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
237             break;
238         case EventName::ADD_FORM:
239         case EventName::REQUEST_FORM:
240         case EventName::BACKGROUND_EVENT_FORM:
241         case EventName::ROUTE_EVENT_FORM:
242             HiSysEvent::Write(
243                 HiSysEvent::Domain::AAFWK,
244                 name,
245                 type,
246                 EVENT_KEY_FORM_ID, eventInfo.formId,
247                 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
248                 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
249                 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
250             break;
251         case EventName::DELETE_FORM:
252         case EventName::CASTTEMP_FORM:
253         case EventName::RELEASE_FORM:
254         case EventName::SET_NEXT_REFRESH_TIME_FORM:
255             HiSysEvent::Write(
256                 HiSysEvent::Domain::AAFWK, name, type, EVENT_KEY_FORM_ID, eventInfo.formId);
257             break;
258         default:
259             break;
260     }
261 }
262 
ConvertEventName(const EventName & eventName)263 std::string EventReport::ConvertEventName(const EventName &eventName)
264 {
265     auto it = eventNameToStrMap_.find(eventName);
266     if (it != eventNameToStrMap_.end()) {
267         return it->second;
268     }
269     return "INVALIDEVENTNAME";
270 }
271 }  // namespace AAFwk
272 }  // namespace OHOS
273