• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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