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 "wifi_hisysevent.h"
17 #include "hisysevent.h"
18 #include "sta_define.h"
19 #include "wifi_logger.h"
20 #include "json/json.h"
21 #include <map>
22
23 namespace OHOS {
24 namespace Wifi {
25 DEFINE_WIFILOG_LABEL("WifiHiSysEvent");
26
27 const std::map<int, std::string> g_connectTypeTransMap {
28 { NETWORK_SELECTED_BY_UNKNOWN, "UNKNOWN" },
29 { NETWORK_SELECTED_BY_AUTO, "AUTO_CONNECT" },
30 { NETWORK_SELECTED_BY_USER, "SELECT_CONNECT" },
31 { NETWORK_SELECTED_BY_RETRY, "RETRY_CONNECT" },
32 { NETWORK_SELECTED_BY_WIFIPRO, "WIFIPRO_CONNECT" },
33 { NETWORK_SELECTED_BY_SELFCURE, "SELFCURE_CONNECT" },
34 { NETWORK_SELECTED_BY_ROAM, "ROMA_CONNECT" },
35 { NETWORK_SELECTED_BY_REASSOC, "REASSOC" },
36 };
37
38 template<typename... Types>
WriteEvent(const std::string & eventType,Types...args)39 static void WriteEvent(const std::string& eventType, Types... args)
40 {
41 int ret = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::COMMUNICATION, eventType,
42 HiviewDFX::HiSysEvent::EventType::STATISTIC, args...);
43 if (ret != 0) {
44 WIFI_LOGE("Write event fail: %{public}s", eventType.c_str());
45 }
46 }
47
48 template<typename... Type>
WriteEventBehavior(const std::string & eventType,Type...args)49 static void WriteEventBehavior(const std::string& eventType, Type... args)
50 {
51 int ret = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::COMMUNICATION, eventType,
52 HiviewDFX::HiSysEvent::EventType::BEHAVIOR, args...);
53 if (ret != 0) {
54 WIFI_LOGE("Write event fail: %{public}s", eventType.c_str());
55 }
56 }
57
WriteWifiStateHiSysEvent(const std::string & serviceType,WifiOperType operType)58 void WriteWifiStateHiSysEvent(const std::string& serviceType, WifiOperType operType)
59 {
60 WriteEvent("WIFI_STATE", "TYPE", serviceType, "OPER_TYPE", static_cast<int>(operType));
61
62 Json::Value root;
63 Json::FastWriter writer;
64 root["WIFI_STATE"] = static_cast<int>(operType);
65 root["TYPE"] = serviceType;
66 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_WIFI_STATE", "EVENT_VALUE", writer.write(root));
67 }
68
WriteWifiApStateHiSysEvent(int32_t state)69 void WriteWifiApStateHiSysEvent(int32_t state)
70 {
71 WriteEventBehavior("WIFI_AP_STATE", "STATE", state);
72 }
73
WriteWifiBridgeStateHiSysEvent(int32_t state)74 void WriteWifiBridgeStateHiSysEvent(int32_t state)
75 {
76 WriteEventBehavior("WIFI_BRIDGE_STATE", "STATE", state);
77 }
78
WriteWifiP2pStateHiSysEvent(const std::string & inter,int32_t type,int32_t state)79 void WriteWifiP2pStateHiSysEvent(const std::string& inter, int32_t type, int32_t state)
80 {
81 WriteEventBehavior("WIFI_P2P_STATE", "INTERFACE", inter, "P2PTYPE", type, "STATE", state);
82 }
83
WriteWifiConnectionHiSysEvent(const WifiConnectionType & type,const std::string & pkgName)84 void WriteWifiConnectionHiSysEvent(const WifiConnectionType& type, const std::string& pkgName)
85 {
86 WriteEvent("WIFI_CONNECTION", "TYPE", static_cast<int>(type), "PACKAGE_NAME", pkgName);
87 }
88
WriteWifiScanHiSysEvent(const int result,const std::string & pkgName)89 void WriteWifiScanHiSysEvent(const int result, const std::string& pkgName)
90 {
91 WriteEvent("WIFI_SCAN", "EXECUTE_RESULT", result, "PACKAGE_NAME", pkgName);
92 }
93
WriteWifiEventReceivedHiSysEvent(const std::string & eventType,int value)94 void WriteWifiEventReceivedHiSysEvent(const std::string& eventType, int value)
95 {
96 WriteEvent("WIFI_EVENT_RECEIVED", "EVENT_TYPE", eventType, "VALUE", value);
97 }
98
WriteWifiBandHiSysEvent(int band)99 void WriteWifiBandHiSysEvent(int band)
100 {
101 WriteEvent("WIFI_BAND", "BAND", band);
102 }
103
WriteWifiSignalHiSysEvent(int direction,int txPackets,int rxPackets)104 void WriteWifiSignalHiSysEvent(int direction, int txPackets, int rxPackets)
105 {
106 WriteEvent("WIFI_SIGNAL", "DIRECTION", direction, "TXPACKETS", txPackets, "RXPACKETS", rxPackets);
107 }
108
WriteWifiOperateStateHiSysEvent(int operateType,int operateState)109 void WriteWifiOperateStateHiSysEvent(int operateType, int operateState)
110 {
111 Json::Value root;
112 Json::FastWriter writer;
113 root["OPERATE_TYPE"] = operateType;
114 root["OPERATE_STATE"] = operateState;
115 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_OPERATE_STATE", "EVENT_VALUE", writer.write(root));
116 }
117
WriteWifiAbnormalDisconnectHiSysEvent(int errorCode)118 void WriteWifiAbnormalDisconnectHiSysEvent(int errorCode)
119 {
120 Json::Value root;
121 Json::FastWriter writer;
122 root["ERROR_CODE"] = errorCode;
123 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_ABNORMAL_DISCONNECT", "EVENT_VALUE", writer.write(root));
124 }
125
WriteWifiConnectionInfoHiSysEvent(int networkId)126 void WriteWifiConnectionInfoHiSysEvent(int networkId)
127 {
128 Json::Value root;
129 Json::FastWriter writer;
130 root["NETWORK_ID"] = networkId;
131 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_CONNECTION_INFO", "EVENT_VALUE", writer.write(root));
132 }
133
WriteWifiOpenAndCloseFailedHiSysEvent(int operateType,std::string failReason,int apState)134 void WriteWifiOpenAndCloseFailedHiSysEvent(int operateType, std::string failReason, int apState)
135 {
136 Json::Value root;
137 Json::FastWriter writer;
138 root["OPERATE_TYPE"] = operateType;
139 root["FAIL_REASON"] = failReason;
140 root["AP_STATE"] = apState;
141 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_OPEN_AND_CLOSE_FAILED", "EVENT_VALUE", writer.write(root));
142 }
143
WriteSoftApOpenAndCloseFailedEvent(int operateType,std::string failReason)144 void WriteSoftApOpenAndCloseFailedEvent(int operateType, std::string failReason)
145 {
146 WIFI_LOGE("WriteSoftApOpenAndCloseFailedEvent operateType=%{public}d", operateType);
147 Json::Value root;
148 Json::FastWriter writer;
149 root["OPERATE_TYPE"] = operateType;
150 root["FAIL_REASON"] = failReason;
151 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "SOFTAP_OPEN_AND_CLOSE_FAILED", "EVENT_VALUE", writer.write(root));
152 }
153
WriteWifiAccessIntFailedHiSysEvent(int operateRes,int failCnt)154 void WriteWifiAccessIntFailedHiSysEvent(int operateRes, int failCnt)
155 {
156 Json::Value root;
157 Json::FastWriter writer;
158 root["OPERATE_TYPE"] = operateRes;
159 root["FAIL_CNT"] = failCnt;
160 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_ACCESS_INTERNET_FAILED", "EVENT_VALUE", writer.write(root));
161 }
162
WriteWifiPnoScanHiSysEvent(int isStartScan,int suspendReason)163 void WriteWifiPnoScanHiSysEvent(int isStartScan, int suspendReason)
164 {
165 Json::Value root;
166 Json::FastWriter writer;
167 root["IS_START"] = isStartScan;
168 root["SUSPEND_REASON"] = suspendReason;
169 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_PNO_SCAN_INFO", "EVENT_VALUE", writer.write(root));
170 }
171
WriteBrowserFailedForPortalHiSysEvent(int respCode,std::string & server)172 void WriteBrowserFailedForPortalHiSysEvent(int respCode, std::string &server)
173 {
174 Json::Value root;
175 Json::FastWriter writer;
176 root["RESP_CODE"] = respCode;
177 root["SERVER"] = server;
178 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "BROWSER_FAILED_FOR_PORTAL", "EVENT_VALUE", writer.write(root));
179 }
180
WriteAuthFailHiSysEvent(const std::string & authFailReason,int subErrCode)181 void WriteAuthFailHiSysEvent(const std::string &authFailReason, int subErrCode)
182 {
183 Json::Value root;
184 Json::FastWriter writer;
185 root["FAIL_REASON"] = authFailReason;
186 root["SUB_ERR_CODE"] = subErrCode;
187 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_AUTH_FAIL_INFO", "EVENT_VALUE", writer.write(root));
188 }
189
WriteAssocFailHiSysEvent(const std::string & assocFailReason,int subErrCode)190 void WriteAssocFailHiSysEvent(const std::string &assocFailReason, int subErrCode)
191 {
192 Json::Value root;
193 Json::FastWriter writer;
194 root["FAIL_REASON"] = assocFailReason;
195 root["SUB_ERR_CODE"] = subErrCode;
196 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_ASSOC_FAIL_INFO", "EVENT_VALUE", writer.write(root));
197 }
198
WriteDhcpFailHiSysEvent(const std::string & dhcpFailReason,int subErrCode)199 void WriteDhcpFailHiSysEvent(const std::string &dhcpFailReason, int subErrCode)
200 {
201 Json::Value root;
202 Json::FastWriter writer;
203 root["FAIL_REASON"] = dhcpFailReason;
204 root["SUB_ERR_CODE"] = subErrCode;
205 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_DHCP_FAIL_INFO", "EVENT_VALUE", writer.write(root));
206 }
207
WriteScanLimitHiSysEvent(const std::string & scanInitiator,int scanLimitType,bool isForeground)208 void WriteScanLimitHiSysEvent(const std::string &scanInitiator, int scanLimitType, bool isForeground)
209 {
210 if (scanInitiator.empty()) {
211 return;
212 }
213 Json::Value root;
214 Json::FastWriter writer;
215 root["SCAN_INITIATOR"] = scanInitiator;
216 root["IS_FOREGROUND"] = isForeground;
217 root["SCAN_LIMIT_TYPE"] = scanLimitType;
218 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_SCAN_LIMIT_STATISTICS", "EVENT_VALUE", writer.write(root));
219 }
220
WriteAutoConnectFailEvent(const std::string & failReason,const std::string & subReason)221 void WriteAutoConnectFailEvent(const std::string &failReason, const std::string &subReason)
222 {
223 Json::Value root;
224 Json::FastWriter writer;
225 root["FAIL_REASON"] = failReason;
226 root["SUB_REASON"] = subReason;
227 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_AUTO_RECONNECT_FAILED", "EVENT_VALUE", writer.write(root));
228 }
229
WriteP2pKpiCountHiSysEvent(int eventType)230 void WriteP2pKpiCountHiSysEvent(int eventType)
231 {
232 Json::Value root;
233 Json::FastWriter writer;
234 root["EVENT_TYPE"] = eventType;
235 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "P2P_CONNECT_STATICS", "EVENT_VALUE", writer.write(root));
236 }
237
WriteP2pConnectFailedHiSysEvent(int errCode,int failRes)238 void WriteP2pConnectFailedHiSysEvent(int errCode, int failRes)
239 {
240 Json::Value root;
241 Json::FastWriter writer;
242 root["EVENT_TYPE"] = errCode;
243 root["FAIL_RES"] = failRes;
244 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "P2P_CONNECT_FAIL", "EVENT_VALUE", writer.write(root));
245 }
246
WriteP2pAbDisConnectHiSysEvent(int errCode,int failRes)247 void WriteP2pAbDisConnectHiSysEvent(int errCode, int failRes)
248 {
249 Json::Value root;
250 Json::FastWriter writer;
251 root["EVENT_TYPE"] = errCode;
252 root["FAIL_RES"] = failRes;
253 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "P2P_ABNORMAL_DISCONNECT", "EVENT_VALUE", writer.write(root));
254 }
255
WriteSoftApAbDisconnectHiSysEvent(int errorCode)256 void WriteSoftApAbDisconnectHiSysEvent(int errorCode)
257 {
258 Json::Value root;
259 Json::FastWriter writer;
260 root["ERROR_CODE"] = errorCode;
261 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "SOFTAP_ABNORMAL_DISCONNECT", "EVENT_VALUE", writer.write(root));
262 }
263
WriteIsInternetHiSysEvent(int isInternet)264 void WriteIsInternetHiSysEvent(int isInternet)
265 {
266 Json::Value root;
267 Json::FastWriter writer;
268 root["IS_INTERNET"] = isInternet;
269 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_KPI_INTERNET", "EVENT_VALUE", writer.write(root));
270 }
271
WriteSoftApConnectFailHiSysEvent(int errorCnt)272 void WriteSoftApConnectFailHiSysEvent(int errorCnt)
273 {
274 WIFI_LOGE("WriteSoftApConnectFailHiSysEvent errorCnt=%{public}d", errorCnt);
275 Json::Value root;
276 Json::FastWriter writer;
277 root["ERROR_CODE"] = errorCnt;
278 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "SOFTAP_CONNECT_FAILED", "EVENT_VALUE", writer.write(root));
279 }
280
WriteWifiScanApiFailHiSysEvent(const std::string & pkgName,const WifiScanFailReason failReason)281 void WriteWifiScanApiFailHiSysEvent(const std::string& pkgName, const WifiScanFailReason failReason)
282 {
283 #ifndef OHOS_ARCH_LITE
284 Json::Value root;
285 Json::FastWriter writer;
286 root["PKG_NAME"] = pkgName;
287 root["FAIL_REASON"] = static_cast<int>(failReason);
288 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFISCANCONTROL_TRIGGER_API_FAIL", "EVENT_VALUE", writer.write(root));
289 #endif
290 }
291
WriteWifiEncryptionFailHiSysEvent(int event,const std::string & maskSsid,const std::string & keyMgmt,int encryptedModule)292 void WriteWifiEncryptionFailHiSysEvent(int event, const std::string& maskSsid, const std::string &keyMgmt, int encryptedModule)
293 {
294 Json::Value root;
295 Json::FastWriter writer;
296 root["ENCRY_OR_DECRY_EVENT"] = event;
297 root["SSID"] = maskSsid;
298 root["ENCRYKEYMANAGEMENT"] = keyMgmt;
299 root["ENCRYEVENTMODULE"] = encryptedModule;
300 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFIENCRY_OR_DECRY_FAIL", "EVENT_VALUE", writer.write(root));
301 }
302
WritePortalStateHiSysEvent(int portalState)303 void WritePortalStateHiSysEvent(int portalState)
304 {
305 Json::Value root;
306 Json::FastWriter writer;
307 root["PORTAL_STATE"] = portalState;
308 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_PORTAL_STATE", "EVENT_VALUE", writer.write(root));
309 }
310
WriteArpInfoHiSysEvent(uint64_t arpRtt,int arpFailedCount)311 void WriteArpInfoHiSysEvent(uint64_t arpRtt, int arpFailedCount)
312 {
313 Json::Value root;
314 Json::FastWriter writer;
315 root["ARP_RTT"] = arpRtt;
316 root["ARP_FAILED_COUNT"] = arpFailedCount;
317 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_ARP_DETECTION_INFO", "EVENT_VALUE", writer.write(root));
318 }
319
WriteLinkInfoHiSysEvent(int signalLevel,int rssi,int band,int linkSpeed)320 void WriteLinkInfoHiSysEvent(int signalLevel, int rssi, int band, int linkSpeed)
321 {
322 Json::Value root;
323 Json::FastWriter writer;
324 root["LEVEL"] = signalLevel;
325 root["BAND"] = band;
326 root["RSSI"] = rssi;
327 root["LINKSPEED"] = linkSpeed;
328 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_LINK_INFO", "EVENT_VALUE", writer.write(root));
329 }
330
WriteConnectTypeHiSysEvent(int connectType,bool isFirstConnect)331 void WriteConnectTypeHiSysEvent(int connectType, bool isFirstConnect)
332 {
333 Json::Value root;
334 Json::FastWriter writer;
335 std::string connectTypeStr = "";
336 if (g_connectTypeTransMap.find(connectType) != g_connectTypeTransMap.end()) {
337 connectTypeStr = g_connectTypeTransMap.at(connectType);
338 }
339 if (isFirstConnect) {
340 connectTypeStr = "FIRST_CONNECT";
341 }
342 root["CONNECT_TYPE"] = connectTypeStr;
343 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_CONNECT_TYPE", "EVENT_VALUE", writer.write(root));
344 }
345
WriteWifiLinkTypeHiSysEvent(const std::string & ssid,int32_t wifiLinkType,const std::string & triggerReason)346 void WriteWifiLinkTypeHiSysEvent(const std::string &ssid, int32_t wifiLinkType, const std::string &triggerReason)
347 {
348 Json::Value root;
349 Json::FastWriter writer;
350 root["SSID"] = ssid;
351 root["WIFI_LINK_TYPE"] = wifiLinkType;
352 root["TRIGGER_REASON"] = triggerReason;
353 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_WIFI_LINK_TYPE_UPDATE", "EVENT_VALUE", writer.write(root));
354 }
355
WriteEmlsrExitReasonHiSysEvent(const std::string & ssid,int32_t reason)356 void WriteEmlsrExitReasonHiSysEvent(const std::string &ssid, int32_t reason)
357 {
358 Json::Value root;
359 Json::FastWriter writer;
360 root["SSID"] = ssid;
361 root["EMLSR_EXIT_REASON"] = reason;
362 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_WIFI_EMLSR_EXIT_REASON", "EVENT_VALUE", writer.write(root));
363 }
364
WriteStaConnectIface(const std::string & ifName)365 void WriteStaConnectIface(const std::string &ifName)
366 {
367 Json::Value root;
368 Json::FastWriter writer;
369 root["IFACE_NAME"] = ifName;
370 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_STA_CONNECT_IFNAME", "EVENT_VALUE", writer.write(root));
371 }
372
WriteWifiWpaStateHiSysEvent(int state)373 void WriteWifiWpaStateHiSysEvent(int state)
374 {
375 Json::Value root;
376 Json::FastWriter writer;
377 root["WPA_STATE"] = state;
378 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_WPA_STATE", "EVENT_VALUE", writer.write(root));
379 }
380
WritePortalAuthExpiredHisysevent(int respCode,int detectNum,time_t connTime,time_t portalAuthTime,bool isNotificationClicked)381 void WritePortalAuthExpiredHisysevent(int respCode, int detectNum, time_t connTime,
382 time_t portalAuthTime, bool isNotificationClicked)
383 {
384 Json::Value root;
385 Json::FastWriter writer;
386 time_t now = time(nullptr);
387 if (now < 0) {
388 now = 0;
389 }
390 int64_t authDura = (now > 0 && portalAuthTime > 0 && now > portalAuthTime) ? now - portalAuthTime : 0;
391 int64_t connDura = (now > 0 && connTime > 0 && now > connTime) ? now - connTime : 0;
392 int64_t authCostDura =
393 (portalAuthTime > 0 && connTime > 0 && portalAuthTime > connTime) ? portalAuthTime - connTime : 0;
394 root["RESP_CODE"] = respCode;
395 root["DURA"] = authDura;
396 root["CONN_DURA"] = connDura;
397 root["AUTH_COST_DURA"] = authCostDura;
398 root["DET_NUM"] = detectNum;
399 root["IS_NOTIFICA_CLICKED"] = isNotificationClicked ? 1 : 0;
400 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "PORTAL_AUTH_EXPIRED", "EVENT_VALUE", writer.write(root));
401 }
402
WriteWifiSelfcureHisysevent(int type)403 void WriteWifiSelfcureHisysevent(int type)
404 {
405 Json::Value root;
406 Json::FastWriter writer;
407 root["WIFI_SELFCURE_TYPE"] = type;
408 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_SELFCURE", "EVENT_VALUE", writer.write(root));
409 }
410
Write3VapConflictHisysevent(int type)411 void Write3VapConflictHisysevent(int type)
412 {
413 Json::Value root;
414 Json::FastWriter writer;
415 root["WIFI_3VAP_CONFLICT_TYPE"] = type;
416 WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_3VAP_CONFLICT", "EVENT_VALUE", writer.write(root));
417 }
418 } // namespace Wifi
419 } // namespace OHOS