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