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 "wifi_logger.h"
19 #include "json/json.h"
20 
21 namespace OHOS {
22 namespace Wifi {
23 DEFINE_WIFILOG_LABEL("WifiHiSysEvent");
24 
25 template<typename... Types>
WriteEvent(const std::string & eventType,Types...args)26 static void WriteEvent(const std::string& eventType, Types... args)
27 {
28     int ret = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::COMMUNICATION, eventType,
29         HiviewDFX::HiSysEvent::EventType::STATISTIC, args...);
30     if (ret != 0) {
31         WIFI_LOGE("Write event fail: %{public}s", eventType.c_str());
32     }
33 }
34 
35 template<typename... Type>
WriteEventBehavior(const std::string & eventType,Type...args)36 static void WriteEventBehavior(const std::string& eventType, Type... args)
37 {
38     int ret = HiSysEventWrite(HiviewDFX::HiSysEvent::Domain::COMMUNICATION, eventType,
39         HiviewDFX::HiSysEvent::EventType::BEHAVIOR, args...);
40     if (ret != 0) {
41         WIFI_LOGE("Write event fail: %{public}s", eventType.c_str());
42     }
43 }
44 
WriteWifiStateHiSysEvent(const std::string & serviceType,WifiOperType operType)45 void WriteWifiStateHiSysEvent(const std::string& serviceType, WifiOperType operType)
46 {
47     WriteEvent("WIFI_STATE", "TYPE", serviceType, "OPER_TYPE", static_cast<int>(operType));
48 
49     Json::Value root;
50     Json::FastWriter writer;
51     root["WIFI_STATE"] = static_cast<int>(operType);
52     root["TYPE"] = serviceType;
53     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_WIFI_STATE", "EVENT_VALUE", writer.write(root));
54 }
55 
WriteWifiApStateHiSysEvent(int32_t state)56 void WriteWifiApStateHiSysEvent(int32_t state)
57 {
58     WriteEventBehavior("WIFI_AP_STATE", "STATE", state);
59 }
60 
WriteWifiP2pStateHiSysEvent(const std::string & inter,int32_t type,int32_t state)61 void WriteWifiP2pStateHiSysEvent(const std::string& inter, int32_t type, int32_t state)
62 {
63     WriteEventBehavior("WIFI_P2P_STATE", "INTERFACE", inter, "P2PTYPE", type, "STATE", state);
64 }
65 
WriteWifiConnectionHiSysEvent(const WifiConnectionType & type,const std::string & pkgName)66 void WriteWifiConnectionHiSysEvent(const WifiConnectionType& type, const std::string& pkgName)
67 {
68     WriteEvent("WIFI_CONNECTION", "TYPE", static_cast<int>(type), "PACKAGE_NAME", pkgName);
69 }
70 
WriteWifiScanHiSysEvent(const int result,const std::string & pkgName)71 void WriteWifiScanHiSysEvent(const int result, const std::string& pkgName)
72 {
73     WriteEvent("WIFI_SCAN", "EXECUTE_RESULT", result, "PACKAGE_NAME", pkgName);
74 }
75 
WriteWifiEventReceivedHiSysEvent(const std::string & eventType,int value)76 void WriteWifiEventReceivedHiSysEvent(const std::string& eventType, int value)
77 {
78     WriteEvent("WIFI_EVENT_RECEIVED", "EVENT_TYPE", eventType, "VALUE", value);
79 }
80 
WriteWifiBandHiSysEvent(int band)81 void WriteWifiBandHiSysEvent(int band)
82 {
83     WriteEvent("WIFI_BAND", "BAND", band);
84 }
85 
WriteWifiSignalHiSysEvent(int direction,int txPackets,int rxPackets)86 void WriteWifiSignalHiSysEvent(int direction, int txPackets, int rxPackets)
87 {
88     WriteEvent("WIFI_SIGNAL", "DIRECTION", direction, "TXPACKETS", txPackets, "RXPACKETS", rxPackets);
89 }
90 
WriteWifiOperateStateHiSysEvent(int operateType,int operateState)91 void WriteWifiOperateStateHiSysEvent(int operateType, int operateState)
92 {
93     Json::Value root;
94     Json::FastWriter writer;
95     root["OPERATE_TYPE"] = operateType;
96     root["OPERATE_STATE"] = operateState;
97     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_OPERATE_STATE", "EVENT_VALUE", writer.write(root));
98 }
99 
WriteWifiAbnormalDisconnectHiSysEvent(int errorCode)100 void WriteWifiAbnormalDisconnectHiSysEvent(int errorCode)
101 {
102     Json::Value root;
103     Json::FastWriter writer;
104     root["ERROR_CODE"] = errorCode;
105     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_ABNORMAL_DISCONNECT", "EVENT_VALUE", writer.write(root));
106 }
107 
WriteWifiConnectionInfoHiSysEvent(int networkId)108 void WriteWifiConnectionInfoHiSysEvent(int networkId)
109 {
110     Json::Value root;
111     Json::FastWriter writer;
112     root["NETWORK_ID"] = networkId;
113     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_CONNECTION_INFO", "EVENT_VALUE", writer.write(root));
114 }
115 
WriteWifiOpenAndCloseFailedHiSysEvent(int operateType,std::string failReason,int apState)116 void WriteWifiOpenAndCloseFailedHiSysEvent(int operateType, std::string failReason, int apState)
117 {
118     Json::Value root;
119     Json::FastWriter writer;
120     root["OPERATE_TYPE"] = operateType;
121     root["FAIL_REASON"] = failReason;
122     root["AP_STATE"] = apState;
123     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_OPEN_AND_CLOSE_FAILED", "EVENT_VALUE", writer.write(root));
124 }
125 
WriteSoftApOpenAndCloseFailedEvent(int operateType,std::string failReason)126 void WriteSoftApOpenAndCloseFailedEvent(int operateType, std::string failReason)
127 {
128     WIFI_LOGE("WriteSoftApOpenAndCloseFailedEvent operateType=%{public}d", operateType);
129     Json::Value root;
130     Json::FastWriter writer;
131     root["OPERATE_TYPE"] = operateType;
132     root["FAIL_REASON"] = failReason;
133     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "SOFTAP_OPEN_AND_CLOSE_FAILED", "EVENT_VALUE", writer.write(root));
134 }
135 
WriteWifiAccessIntFailedHiSysEvent(int operateRes,int failCnt)136 void WriteWifiAccessIntFailedHiSysEvent(int operateRes, int failCnt)
137 {
138     Json::Value root;
139     Json::FastWriter writer;
140     root["OPERATE_TYPE"] = operateRes;
141     root["FAIL_CNT"] = failCnt;
142     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_ACCESS_INTERNET_FAILED", "EVENT_VALUE", writer.write(root));
143 }
144 
WriteWifiPnoScanHiSysEvent(int isStartScan,int suspendReason)145 void WriteWifiPnoScanHiSysEvent(int isStartScan, int suspendReason)
146 {
147     Json::Value root;
148     Json::FastWriter writer;
149     root["IS_START"] = isStartScan;
150     root["SUSPEND_REASON"] = suspendReason;
151     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_PNO_SCAN_INFO", "EVENT_VALUE", writer.write(root));
152 }
153 
WriteBrowserFailedForPortalHiSysEvent(int respCode,std::string & server)154 void WriteBrowserFailedForPortalHiSysEvent(int respCode, std::string &server)
155 {
156     Json::Value root;
157     Json::FastWriter writer;
158     root["RESP_CODE"] = respCode;
159     root["SERVER"] = server;
160     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "BROWSER_FAILED_FOR_PORTAL", "EVENT_VALUE", writer.write(root));
161 }
162 
WriteWifiConnectFailedEventHiSysEvent(int operateType)163 void WriteWifiConnectFailedEventHiSysEvent(int operateType)
164 {
165     Json::Value root;
166     Json::FastWriter writer;
167     root["OPERATE_TYPE"] = operateType;
168     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_CONNECT_FAILED_EVENT", "EVENT_VALUE", writer.write(root));
169 }
170 
WriteP2pKpiCountHiSysEvent(int eventType)171 void WriteP2pKpiCountHiSysEvent(int eventType)
172 {
173     Json::Value root;
174     Json::FastWriter writer;
175     root["EVENT_TYPE"] = eventType;
176     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "P2P_CONNECT_STATICS", "EVENT_VALUE", writer.write(root));
177 }
178 
WriteP2pConnectFailedHiSysEvent(int errCode,int failRes)179 void WriteP2pConnectFailedHiSysEvent(int errCode, int failRes)
180 {
181     Json::Value root;
182     Json::FastWriter writer;
183     root["EVENT_TYPE"] = errCode;
184     root["FAIL_RES"] = failRes;
185     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "P2P_CONNECT_FAIL", "EVENT_VALUE", writer.write(root));
186 }
187 
WriteP2pAbDisConnectHiSysEvent(int errCode,int failRes)188 void WriteP2pAbDisConnectHiSysEvent(int errCode, int failRes)
189 {
190     Json::Value root;
191     Json::FastWriter writer;
192     root["EVENT_TYPE"] = errCode;
193     root["FAIL_RES"] = failRes;
194     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "P2P_ABNORMAL_DISCONNECT", "EVENT_VALUE", writer.write(root));
195 }
196 
WriteSoftApAbDisconnectHiSysEvent(int errorCode)197 void WriteSoftApAbDisconnectHiSysEvent(int errorCode)
198 {
199     Json::Value root;
200     Json::FastWriter writer;
201     root["ERROR_CODE"] = errorCode;
202     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "SOFTAP_ABNORMAL_DISCONNECT", "EVENT_VALUE", writer.write(root));
203 }
204 
WriteIsInternetHiSysEvent(int isInternet)205 void WriteIsInternetHiSysEvent(int isInternet)
206 {
207     Json::Value root;
208     Json::FastWriter writer;
209     root["IS_INTERNET"] = isInternet;
210     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_KPI_INTERNET", "EVENT_VALUE", writer.write(root));
211 }
212 
WriteSoftApConnectFailHiSysEvent(int errorCnt)213 void WriteSoftApConnectFailHiSysEvent(int errorCnt)
214 {
215     WIFI_LOGE("WriteSoftApConnectFailHiSysEvent errorCnt=%{public}d", errorCnt);
216     Json::Value root;
217     Json::FastWriter writer;
218     root["ERROR_CODE"] = errorCnt;
219     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "SOFTAP_CONNECT_FAILED", "EVENT_VALUE", writer.write(root));
220 }
221 
WriteWifiScanApiFailHiSysEvent(const std::string & pkgName,int failReason)222 void WriteWifiScanApiFailHiSysEvent(const std::string& pkgName, int failReason)
223 {
224     Json::Value root;
225     Json::FastWriter writer;
226     root["PKG_NAME"] = pkgName;
227     root["FAIL_REASON"] = failReason;
228     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFISCANCONTROL_TRIGGER_API_FAIL", "EVENT_VALUE", writer.write(root));
229 }
230 
WriteWifiEncryptionFailHiSysEvent(int event,const std::string & maskSsid,const std::string & keyMgmt,int encryptedModule)231 void WriteWifiEncryptionFailHiSysEvent(int event, const std::string& maskSsid, const std::string &keyMgmt, int encryptedModule)
232 {
233     Json::Value root;
234     Json::FastWriter writer;
235     root["ENCRY_OR_DECRY_EVENT"] = event;
236     root["SSID"] = maskSsid;
237     root["ENCRYKEYMANAGEMENT"] = keyMgmt;
238     root["ENCRYEVENTMODULE"] = encryptedModule;
239     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFIENCRY_OR_DECRY_FAIL", "EVENT_VALUE", writer.write(root));
240 }
241 
WritePortalStateHiSysEvent(int portalState)242 void WritePortalStateHiSysEvent(int portalState)
243 {
244     Json::Value root;
245     Json::FastWriter writer;
246     root["PORTAL_STATE"] = portalState;
247     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_PORTAL_STATE", "EVENT_VALUE", writer.write(root));
248 }
249 
WriteArpInfoHiSysEvent(uint64_t arpRtt,int arpFailedCount)250 void WriteArpInfoHiSysEvent(uint64_t arpRtt, int arpFailedCount)
251 {
252     Json::Value root;
253     Json::FastWriter writer;
254     root["ARP_RTT"] = arpRtt;
255     root["ARP_FAILED_COUNT"] = arpFailedCount;
256     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_ARP_DETECTION_INFO", "EVENT_VALUE", writer.write(root));
257 }
258 
WriteLinkInfoHiSysEvent(int signalLevel,int rssi,int band,int linkSpeed)259 void WriteLinkInfoHiSysEvent(int signalLevel, int rssi, int band, int linkSpeed)
260 {
261     Json::Value root;
262     Json::FastWriter writer;
263     root["LEVEL"] = signalLevel;
264     root["BAND"] = band;
265     root["RSSI"] = rssi;
266     root["LINKSPEED"] = linkSpeed;
267     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_LINK_INFO", "EVENT_VALUE", writer.write(root));
268 }
269 
WirteConnectTypeHiSysEvent(std::string connectType)270 void WirteConnectTypeHiSysEvent(std::string connectType)
271 {
272     Json::Value root;
273     Json::FastWriter writer;
274     root["CONNECT_TYPE"] = connectType;
275     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_CONNECT_TYPE", "EVENT_VALUE", writer.write(root));
276 }
277 
WriteWifiWpaStateHiSysEvent(int state)278 void WriteWifiWpaStateHiSysEvent(int state)
279 {
280     Json::Value root;
281     Json::FastWriter writer;
282     root["WPA_STATE"] = state;
283     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "EVENT_WPA_STATE", "EVENT_VALUE", writer.write(root));
284 }
285 
WritePortalAuthExpiredHisysevent(int respCode,int detectNum,time_t connTime,time_t portalAuthTime,bool isNotificationClicked)286 void WritePortalAuthExpiredHisysevent(int respCode, int detectNum, time_t connTime,
287     time_t portalAuthTime, bool isNotificationClicked)
288 {
289     Json::Value root;
290     Json::FastWriter writer;
291     time_t now = time(nullptr);
292     if (now < 0) {
293         now = 0;
294     }
295     int64_t authDura = (now > 0 && portalAuthTime > 0 && now > portalAuthTime) ? now - portalAuthTime : 0;
296     int64_t connDura = (now > 0 && connTime > 0 && now > connTime) ? now - connTime : 0;
297     int64_t authCostDura =
298         (portalAuthTime > 0 && connTime > 0 && portalAuthTime > connTime) ? portalAuthTime - connTime : 0;
299     root["RESP_CODE"] = respCode;
300     root["DURA"] = authDura;
301     root["CONN_DURA"] = connDura;
302     root["AUTH_COST_DURA"] = authCostDura;
303     root["DET_NUM"] = detectNum;
304     root["IS_NOTIFICA_CLICKED"] = isNotificationClicked ? 1 : 0;
305     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "PORTAL_AUTH_EXPIRED", "EVENT_VALUE", writer.write(root));
306 }
307 
WriteWifiSelfcureHisysevent(int type)308 void WriteWifiSelfcureHisysevent(int type)
309 {
310     Json::Value root;
311     Json::FastWriter writer;
312     root["WIFI_SELFCURE_TYPE"] = type;
313     WriteEvent("WIFI_CHR_EVENT", "EVENT_NAME", "WIFI_SELFCURE", "EVENT_VALUE", writer.write(root));
314 }
315 }  // namespace Wifi
316 }  // namespace OHOS