• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
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 #include "include/Network.h"
16 #include <sstream>
17 #include <fstream>
18 #include <iostream>
19 #include <string>
20 #include <unistd.h>
21 #include <dirent.h>
22 #include <cstdio>
23 #include <cstdlib>
24 #include <climits>
25 #include <cctype>
26 #include "sys/time.h"
27 #include "securec.h"
28 #include "include/sp_utils.h"
29 #include "include/sp_log.h"
30 const int LARGE_BUFF_MAX_LEN = 256;
31 namespace OHOS {
32 namespace SmartPerf {
ItemData()33 std::map<std::string, std::string> Network::ItemData()
34 {
35     std::map<std::string, std::string> result = Network::GetNetworkInfo();
36     LOGI("Network ItemData map siez=%u", result.size());
37     if (result.find("networkUp") != result.end() && result["networkUp"].empty()) {
38         result["networkUp"] = "NA";
39     }
40     if (result.find("networkDown") != result.end() && result["networkDown"].empty()) {
41         result["networkDown"] = "NA";
42     }
43     return result;
44 }
45 
GetNetworkInfo()46 std::map<std::string, std::string> Network::GetNetworkInfo()
47 {
48     std::map<std::string, std::string> networkInfo;
49     char buff[LARGE_BUFF_MAX_LEN];
50     FILE *fp = fopen("/proc/net/dev", "r");
51     if (fp == nullptr) {
52         std::cout << "net work node is not accessed" << std::endl;
53         return networkInfo;
54     }
55     while (fgets(buff, LARGE_BUFF_MAX_LEN, fp) != nullptr) {
56         if (strstr(buff, "rmnet") || strstr(buff, "eth") || strstr(buff, "wlan")) {
57             if (sscanf_s(buff, "%*s%lld%*lld%*lld%*lld%*lld%*lld%*lld%*lld%lld%*lld%*lld%*lld%*lld%*lld%*lld%*lld",
58                 &curRx, &curTx) < 0) {
59                 (void)fclose(fp);
60                 return networkInfo;
61             }
62             allTx += curTx;
63             allRx += curRx;
64         }
65     }
66     (void)fclose(fp);
67     if (isFirst) {
68         networkInfo["networkUp"] = std::to_string(prevTx);
69         networkInfo["networkDown"] = std::to_string(prevRx);
70         isFirst = false;
71         prevTx = allTx;
72         prevRx = allRx;
73         allTx = 0;
74         allRx = 0;
75         return networkInfo;
76     }
77     if ((allTx == 0 && allRx == 0) || (allTx <= prevTx && allRx <= prevRx)) {
78         networkInfo["networkUp"] = "0";
79         networkInfo["networkDown"] = "0";
80         prevTx = allTx;
81         prevRx = allRx;
82         allTx = 0;
83         allRx = 0;
84         return networkInfo;
85     }
86     diffTx = allTx - prevTx;
87     prevTx = allTx;
88     diffRx = allRx - prevRx;
89     prevRx = allRx;
90     allTx = 0;
91     allRx = 0;
92     networkInfo["networkUp"] = std::to_string(diffTx);
93     networkInfo["networkDown"] = std::to_string(diffRx);
94     return networkInfo;
95 }
96 }
97 }
98