1 // Copyright (C) 2023 Huawei Device Co., Ltd.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13
14 use hisysevent::{build_number_param, build_str_param, write, EventType, HiSysEventParam};
15
16 const DOMAIN: &str = "REQUEST";
17 const DONWLOAD_SA: &str = "DOWNLOAD_SERVER";
18
19 pub(crate) const ERROR_INFO: &str = "ERROR_INFO";
20 pub(crate) const TASKS_TYPE: &str = "TASKS_TYPE";
21 pub(crate) const TOTAL_FILE_NUM: &str = "TOTAL_FILE_NUM";
22 pub(crate) const FAIL_FILE_NUM: &str = "FAIL_FILE_NUM";
23 pub(crate) const SUCCESS_FILE_NUM: &str = "SUCCESS_FILE_NUM";
24
25 pub(crate) const PARAM_DFX_CODE: &str = "CODE";
26 pub(crate) const PARAM_BUNDLE_NAME: &str = "BUNDLE_NAME";
27 pub(crate) const PARAM_MODULE_NAME: &str = "MODULE_NAME";
28 pub(crate) const PARAM_EXTRA_INFO: &str = "EXTRA_INFO";
29
30 /// System events structure which base on `Hisysevent`.
31 pub(crate) struct SysEvent<'a> {
32 event_kind: EventKind,
33 inner_type: EventType,
34 params: Vec<HiSysEventParam<'a>>,
35 }
36
37 impl<'a> SysEvent<'a> {
task_fault() -> Self38 pub(crate) fn task_fault() -> Self {
39 Self {
40 event_kind: EventKind::TaskFault,
41 inner_type: EventType::Fault,
42 params: Vec::new(),
43 }
44 }
45
exec_error() -> Self46 pub(crate) fn exec_error() -> Self {
47 Self {
48 event_kind: EventKind::ExecError,
49 inner_type: EventType::Statistic,
50 params: Vec::new(),
51 }
52 }
53
exec_fault() -> Self54 pub(crate) fn exec_fault() -> Self {
55 Self {
56 event_kind: EventKind::ExecFault,
57 inner_type: EventType::Fault,
58 params: Vec::new(),
59 }
60 }
61
param(mut self, param: HiSysEventParam<'a>) -> Self62 pub(crate) fn param(mut self, param: HiSysEventParam<'a>) -> Self {
63 self.params.push(param);
64 self
65 }
66
write(self)67 pub(crate) fn write(self) {
68 write(
69 DOMAIN,
70 self.event_kind.as_str(),
71 self.inner_type,
72 self.params.as_slice(),
73 );
74 }
75 }
76
77 pub(crate) enum EventKind {
78 TaskFault,
79 ExecError,
80 ExecFault,
81 }
82
83 impl EventKind {
as_str(&self) -> &str84 fn as_str(&self) -> &str {
85 match self {
86 EventKind::TaskFault => "TASK_FAULT",
87 EventKind::ExecError => "EXEC_ERROR",
88 EventKind::ExecFault => "EXEC_FAULT",
89 }
90 }
91 }
92
93 #[repr(u32)]
94 #[allow(non_camel_case_types)]
95 #[allow(dead_code)]
96 #[derive(Clone, Copy)]
97 pub(crate) enum DfxCode {
98 INVALID_IPC_MESSAGE_A00 = 0x001FFFFF,
99 INVALID_IPC_MESSAGE_A01 = 0x001F0000,
100 INVALID_IPC_MESSAGE_A02 = 0x001F0001,
101 INVALID_IPC_MESSAGE_A03 = 0x001F0100,
102 INVALID_IPC_MESSAGE_A04 = 0x001F0101,
103 INVALID_IPC_MESSAGE_A05 = 0x001F0200,
104 INVALID_IPC_MESSAGE_A06 = 0x001F0201,
105 INVALID_IPC_MESSAGE_A07 = 0x001F0300,
106 INVALID_IPC_MESSAGE_A08 = 0x001F0301,
107 INVALID_IPC_MESSAGE_A09 = 0x001F0400,
108 INVALID_IPC_MESSAGE_A10 = 0x001F0401,
109 INVALID_IPC_MESSAGE_A11 = 0x001F0500,
110 INVALID_IPC_MESSAGE_A12 = 0x001F0501,
111 INVALID_IPC_MESSAGE_A13 = 0x001F0600,
112 INVALID_IPC_MESSAGE_A14 = 0x001F0601,
113 INVALID_IPC_MESSAGE_A15 = 0x001F0700,
114 INVALID_IPC_MESSAGE_A16 = 0x001F0701,
115 INVALID_IPC_MESSAGE_A17 = 0x001F0800,
116 INVALID_IPC_MESSAGE_A18 = 0x001F0801,
117 INVALID_IPC_MESSAGE_A19 = 0x001F0900,
118 INVALID_IPC_MESSAGE_A20 = 0x001F0901,
119 INVALID_IPC_MESSAGE_A21 = 0x001F0A00,
120 INVALID_IPC_MESSAGE_A22 = 0x001F0A01,
121 INVALID_IPC_MESSAGE_A23 = 0x001F0B00,
122 INVALID_IPC_MESSAGE_A24 = 0x001F0B01,
123 INVALID_IPC_MESSAGE_A25 = 0x001F0C00,
124 INVALID_IPC_MESSAGE_A26 = 0x001F0C01,
125 INVALID_IPC_MESSAGE_A27 = 0x001F0D00,
126 INVALID_IPC_MESSAGE_A28 = 0x001F0D01,
127 INVALID_IPC_MESSAGE_A29 = 0x001F0E00,
128 INVALID_IPC_MESSAGE_A30 = 0x001F0E01,
129 INVALID_IPC_MESSAGE_A31 = 0x001F0F00,
130 INVALID_IPC_MESSAGE_A32 = 0x001F0F01,
131 INVALID_IPC_MESSAGE_A33 = 0x001F1000,
132 INVALID_IPC_MESSAGE_A34 = 0x001F1001,
133 INVALID_IPC_MESSAGE_A35 = 0x001F1100,
134 INVALID_IPC_MESSAGE_A36 = 0x001F1101,
135 INVALID_IPC_MESSAGE_A37 = 0x001F1200,
136 INVALID_IPC_MESSAGE_A38 = 0x001F1201,
137 INVALID_IPC_MESSAGE_A39 = 0x001F1300,
138 INVALID_IPC_MESSAGE_A40 = 0x001F1301,
139 INVALID_IPC_MESSAGE_A41 = 0x001F1400,
140 INVALID_IPC_MESSAGE_A42 = 0x001F1401,
141 INVALID_IPC_MESSAGE_A43 = 0x001F1500,
142 INVALID_IPC_MESSAGE_A44 = 0x001F1501,
143 INVALID_IPC_MESSAGE_A45 = 0x001F1600,
144 INVALID_IPC_MESSAGE_A46 = 0x001F1601,
145 TASK_STATISTICS = 0x002F0000,
146 TASK_FAULT_00 = 0x002F00FF,
147 TASK_FAULT_01 = 0x002F01FF,
148 TASK_FAULT_02 = 0x002F02FF,
149 TASK_FAULT_03 = 0x002F03FF,
150 TASK_FAULT_04 = 0x002F04FF,
151 TASK_FAULT_05 = 0x002F05FF,
152 TASK_FAULT_06 = 0x002F06FF,
153 TASK_FAULT_07 = 0x002F07FF,
154 TASK_FAULT_08 = 0x002F08FF,
155 TASK_FAULT_09 = 0x002FFFFF,
156 UDS_FAULT_00 = 0x00300000,
157 UDS_FAULT_01 = 0x00300001,
158 UDS_FAULT_02 = 0x00300002,
159 UDS_FAULT_03 = 0x003F0000,
160 UDS_FAULT_04 = 0x003F0001,
161 SA_ERROR_00 = 0x004F0000,
162 SA_ERROR_01 = 0x004F0001,
163 SA_ERROR_02 = 0x004F0002,
164 SA_FAULT_00 = 0x005F0000,
165 SA_FAULT_01 = 0x005F0001,
166 SAMGR_FAULT_A00 = 0xF02F0000,
167 SAMGR_FAULT_A01 = 0xF02F0001,
168 SAMGR_FAULT_A02 = 0xF02F0002,
169 ABMS_FAULT_A00 = 0xF03F0000,
170 ABMS_FAULT_A01 = 0xF03F0001,
171 BMS_FAULT_00 = 0xF04F0000,
172 OS_ACCOUNT_FAULT_00 = 0xF05F0000,
173 OS_ACCOUNT_FAULT_01 = 0xF05F0001,
174 OS_ACCOUNT_FAULT_02 = 0xF05F0002,
175 RDB_FAULT_00 = 0xF06F0000,
176 RDB_FAULT_01 = 0xF06F0001,
177 RDB_FAULT_02 = 0xF06F0002,
178 RDB_FAULT_03 = 0xF06F0003,
179 RDB_FAULT_04 = 0xF06F0004,
180 RDB_FAULT_05 = 0xF06F0005,
181 RDB_FAULT_06 = 0xF06F0006,
182 RDB_FAULT_07 = 0xF06F0007,
183 RDB_FAULT_08 = 0xF06F0008,
184 RDB_FAULT_09 = 0xF06F0009,
185 RDB_FAULT_10 = 0xF06F000A,
186 RDB_FAULT_11 = 0xF06F000B,
187 RDB_FAULT_12 = 0xF06F000C,
188 RDB_FAULT_13 = 0xF06FFFFF,
189 EVENT_FAULT_00 = 0xF07F0000,
190 EVENT_FAULT_01 = 0xF07F0001,
191 EVENT_FAULT_02 = 0xF07F0002,
192 NET_CONN_CLIENT_FAULT_00 = 0xF08F0000,
193 NET_CONN_CLIENT_FAULT_01 = 0xF08F0001,
194 NET_CONN_CLIENT_FAULT_02 = 0xF08F0002,
195 NET_CONN_CLIENT_FAULT_03 = 0xF08F0003,
196 TELEPHONY_FAULT_00 = 0xF09F0000,
197 TELEPHONY_FAULT_01 = 0xF09F0001,
198 SYSTEM_RESOURCE_FAULT_00 = 0xF0AF0000,
199 SYSTEM_RESOURCE_FAULT_01 = 0xF0AF0001,
200 SYSTEM_RESOURCE_FAULT_02 = 0xF0AF0002,
201 MEDIA_FAULT_00 = 0xF0BF0000,
202 MEDIA_FAULT_01 = 0xF0BF0001,
203 NOTIFICATION_FAULT_00 = 0xF0CF0000,
204 CERT_MANAGER_FAULT_00 = 0xF0DF0000,
205 CERT_MANAGER_FAULT_01 = 0xF0DF0001,
206 ACCESS_TOKEN_FAULT_00 = 0xF0EF0000,
207 ACCESS_TOKEN_FAULT_01 = 0xF0EF0001,
208 ACCESS_TOKEN_FAULT_02 = 0xF0EF0002,
209 URL_POLICY_FAULT_00 = 0xF0FF0000,
210 STANDARD_FAULT_00 = 0xF1000000,
211 STANDARD_FAULT_01 = 0xF1000001,
212 STANDARD_FAULT_02 = 0xF1000002,
213 STANDARD_FAULT_03 = 0xF1000003,
214 STANDARD_FAULT_04 = 0xF1000004,
215 STANDARD_FAULT_05 = 0xF1000005,
216 STANDARD_FAULT_06 = 0xF1000006,
217 STANDARD_FAULT_A01 = 0xF10F0000,
218 }
219
sys_task_fault( action: &str, total_file: i32, fail_file: i32, succ_file: i32, reason_err: i32, )220 pub(crate) fn sys_task_fault(
221 action: &str,
222 total_file: i32,
223 fail_file: i32,
224 succ_file: i32,
225 reason_err: i32,
226 ) {
227 SysEvent::task_fault()
228 .param(build_str_param!(TASKS_TYPE, action))
229 .param(build_number_param!(TOTAL_FILE_NUM, total_file))
230 .param(build_number_param!(FAIL_FILE_NUM, fail_file))
231 .param(build_number_param!(SUCCESS_FILE_NUM, succ_file))
232 .param(build_number_param!(ERROR_INFO, reason_err))
233 .write();
234 }
235
isys_fault(dfx_code: DfxCode, extra_info: &str)236 pub(crate) fn isys_fault(dfx_code: DfxCode, extra_info: &str) {
237 SysEvent::exec_fault()
238 .param(build_number_param!(PARAM_DFX_CODE, dfx_code as u32))
239 .param(build_str_param!(PARAM_BUNDLE_NAME, DONWLOAD_SA))
240 .param(build_str_param!(PARAM_MODULE_NAME, DONWLOAD_SA))
241 .param(build_str_param!(PARAM_EXTRA_INFO, extra_info))
242 .write();
243 }
244
isys_error(dfx_code: DfxCode, extra_info: &str)245 pub(crate) fn isys_error(dfx_code: DfxCode, extra_info: &str) {
246 SysEvent::exec_error()
247 .param(build_number_param!(PARAM_DFX_CODE, dfx_code as u32))
248 .param(build_str_param!(PARAM_BUNDLE_NAME, DONWLOAD_SA))
249 .param(build_str_param!(PARAM_MODULE_NAME, DONWLOAD_SA))
250 .param(build_str_param!(PARAM_EXTRA_INFO, extra_info))
251 .write();
252 }
253