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