1 /*
2 * Copyright (c) 2023 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 "form_event_report.h"
17
18 #include <map>
19
20 #include "fms_log_wrapper.h"
21
22 namespace OHOS {
23 namespace AppExecFwk {
24 namespace {
25 // event params
26 constexpr const char *EVENT_KEY_FORM_ID = "FORM_ID";
27 constexpr const char *EVENT_KEY_BUNDLE_NAME = "BUNDLE_NAME";
28 constexpr const char *EVENT_KEY_MODULE_NAME = "MODULE_NAME";
29 constexpr const char *EVENT_KEY_ABILITY_NAME = "ABILITY_NAME";
30 constexpr const char *EVENT_KEY_HOST_BUNDLE_NAME = "HOST_BUNDLE_NAME";
31 const std::map<FormEventName, std::string> EVENT_NAME_MAP = {
32 std::map<FormEventName, std::string>::value_type(FormEventName::ADD_FORM, "ADD_FORM"),
33 std::map<FormEventName, std::string>::value_type(FormEventName::REQUEST_FORM, "REQUEST_FORM"),
34 std::map<FormEventName, std::string>::value_type(FormEventName::REQUEST_FORM, "REQUEST_FORM"),
35 std::map<FormEventName, std::string>::value_type(FormEventName::DELETE_FORM, "DELETE_FORM"),
36 std::map<FormEventName, std::string>::value_type(FormEventName::CASTTEMP_FORM, "CASTTEMP_FORM"),
37 std::map<FormEventName, std::string>::value_type(FormEventName::ACQUIREFORMSTATE_FORM, "ACQUIREFORMSTATE_FORM"),
38 std::map<FormEventName, std::string>::value_type(FormEventName::MESSAGE_EVENT_FORM, "MESSAGE_EVENT_FORM"),
39 std::map<FormEventName, std::string>::value_type(FormEventName::ROUTE_EVENT_FORM, "ROUTE_EVENT_FORM"),
40 std::map<FormEventName, std::string>::value_type(FormEventName::BACKGROUND_EVENT_FORM, "BACKGROUND_EVENT_FORM"),
41 std::map<FormEventName, std::string>::value_type(FormEventName::RELEASE_FORM, "RELEASE_FORM"),
42 std::map<FormEventName, std::string>::value_type(FormEventName::DELETE_INVALID_FORM, "DELETE_INVALID_FORM"),
43 std::map<FormEventName, std::string>::value_type(
44 FormEventName::SET_NEXT_REFRESH_TIME_FORM, "SET_NEXT_REFRESH_TIME_FORM"),
45 std::map<FormEventName, std::string>::value_type(FormEventName::FORM_RENDER_BLOCK, "FORM_RENDER_BLOCK"),
46 };
47 }
48
SendFormEvent(const FormEventName & eventName,HiSysEventType type,const FormEventInfo & eventInfo)49 void FormEventReport::SendFormEvent(const FormEventName &eventName, HiSysEventType type,
50 const FormEventInfo &eventInfo)
51 {
52 std::string name = ConvertEventName(eventName);
53 if (name == "INVALIDEVENTNAME") {
54 HILOG_ERROR("invalid eventName");
55 return;
56 }
57
58 switch (eventName) {
59 case FormEventName::DELETE_INVALID_FORM:
60 HiSysEventWrite(HiSysEvent::Domain::FORM_MANAGER, name, type);
61 break;
62 case FormEventName::ACQUIREFORMSTATE_FORM:
63 HiSysEventWrite(
64 HiSysEvent::Domain::FORM_MANAGER,
65 name,
66 type,
67 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
68 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
69 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
70 break;
71 case FormEventName::MESSAGE_EVENT_FORM:
72 HiSysEventWrite(
73 HiSysEvent::Domain::FORM_MANAGER,
74 name,
75 type,
76 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
77 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
78 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName,
79 EVENT_KEY_HOST_BUNDLE_NAME, eventInfo.hostBundleName);
80 break;
81 case FormEventName::ADD_FORM:
82 case FormEventName::ROUTE_EVENT_FORM:
83 HiSysEventWrite(
84 HiSysEvent::Domain::FORM_MANAGER, name, type,
85 EVENT_KEY_FORM_ID, eventInfo.formId,
86 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
87 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
88 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName,
89 EVENT_KEY_HOST_BUNDLE_NAME, eventInfo.hostBundleName);
90 break;
91 default:
92 break;
93 }
94 }
95
SendSecondFormEvent(const FormEventName & eventName,HiSysEventType type,const FormEventInfo & eventInfo)96 void FormEventReport::SendSecondFormEvent(const FormEventName &eventName, HiSysEventType type,
97 const FormEventInfo &eventInfo)
98 {
99 std::string name = ConvertEventName(eventName);
100 if (name == "INVALIDEVENTNAME") {
101 HILOG_ERROR("invalid eventName");
102 return;
103 }
104
105 switch (eventName) {
106 case FormEventName::REQUEST_FORM:
107 case FormEventName::BACKGROUND_EVENT_FORM:
108 HiSysEventWrite(
109 HiSysEvent::Domain::FORM_MANAGER,
110 name,
111 type,
112 EVENT_KEY_FORM_ID, eventInfo.formId,
113 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName,
114 EVENT_KEY_MODULE_NAME, eventInfo.moduleName,
115 EVENT_KEY_ABILITY_NAME, eventInfo.abilityName);
116 break;
117 case FormEventName::DELETE_FORM:
118 HiSysEventWrite(HiSysEvent::Domain::FORM_MANAGER, name, type,
119 EVENT_KEY_FORM_ID, eventInfo.formId,
120 EVENT_KEY_HOST_BUNDLE_NAME, eventInfo.hostBundleName);
121 break;
122 case FormEventName::CASTTEMP_FORM:
123 case FormEventName::RELEASE_FORM:
124 case FormEventName::SET_NEXT_REFRESH_TIME_FORM:
125 HiSysEventWrite(HiSysEvent::Domain::FORM_MANAGER, name, type, EVENT_KEY_FORM_ID, eventInfo.formId);
126 break;
127 case FormEventName::FORM_RENDER_BLOCK:
128 HiSysEventWrite(
129 HiSysEvent::Domain::FORM_MANAGER,
130 name,
131 type,
132 EVENT_KEY_BUNDLE_NAME, eventInfo.bundleName);
133 break;
134 default:
135 break;
136 }
137 }
138
ConvertEventName(const FormEventName & eventName)139 std::string FormEventReport::ConvertEventName(const FormEventName &eventName)
140 {
141 auto it = EVENT_NAME_MAP.find(eventName);
142 if (it != EVENT_NAME_MAP.end()) {
143 return it->second;
144 }
145 return "INVALIDEVENTNAME";
146 }
147 } // namespace AppExecFwk
148 } // namespace OHOS
149