43 std::advance(it,
static_cast<uint32_t
>(param));
47 std::shared_ptr<networkLoad::networkParser> networkLoad::networkParser::inst =
nullptr;
50 ethernetDataFile(
std::move(ethernetDataFileName)), ethDev(
std::move(ethName))
52 networkParser::getNetworkParser()->parse(ethernetDataFileName);
56 networkLoad::networkParser::parse(
const std::string& netFile)
59 if ((this->currentTime + std::chrono::milliseconds(10)) > std::chrono::system_clock::now())
65 this->timeBefore = this->currentTime;
66 this->currentTime = std::chrono::system_clock::now();
69 std::ifstream ethFile;
73 ethFile.open(netFile);
75 catch (std::ifstream::failure& e)
77 throw std::runtime_error(
"Exception: " + netFile + std::string(e.what()));
80 this->timeBefore = std::chrono::system_clock::now();
81 this->ethObjOld = this->ethObj;
84 for (std::string line; std::getline(ethFile, line); lineCnt++)
90 std::stringstream strStream(line);
92 std::string ifName =
"";
93 std::unordered_map<std::string, uint64_t> ifValues;
95 while (strStream >> strPart)
99 strPart.erase(std::remove_if(strPart.begin(),
101 [](
auto c) { return !std::isalnum(c); }),
109 ifValues[it->data()] = std::stoull(strPart);
114 this->ethObj[ifName] = ifValues;
116 if (this->ethObjOld.empty())
118 this->ethObjOld = this->ethObj;
122 const std::unordered_map<std::string, uint64_t>&
123 networkLoad::networkParser::getEthObj(
const std::string& ethDevice)
const
125 return this->ethObj.at(ethDevice);
128 const std::unordered_map<std::string, uint64_t>&
129 networkLoad::networkParser::getEthObjOld(
const std::string& ethDevice)
const
131 return this->ethObjOld.at(ethDevice);
134 std::list<std::string>
135 networkLoad::networkParser::getNetworkDevices(std::string netFile)
137 std::list<std::string> ifList;
138 this->parse(netFile);
139 for (
const auto& elem : this->ethObj)
141 ifList.push_back(elem.first);
146 networkLoad::networkParser::networkParser()
148 this->currentTime = std::chrono::system_clock::now() - std::chrono::milliseconds(100);
149 this->timeBefore = std::chrono::system_clock::now();
152 std::shared_ptr<networkLoad::networkParser>
153 networkLoad::networkParser::getNetworkParser()
155 if (networkLoad::networkParser::inst ==
nullptr)
157 networkLoad::networkParser::inst = std::make_unique<networkLoad::networkParser>();
159 return networkLoad::networkParser::inst;
162 const std::chrono::system_clock::time_point
163 networkLoad::networkParser::getTimeStamp()
const
165 return this->currentTime;
168 const std::chrono::system_clock::time_point
169 networkLoad::networkParser::getTimeBefore()
const
171 return this->timeBefore;
177 return this->isDeviceAvailable;
186 std::list<std::string>
190 auto parser = networkParser::getNetworkParser();
191 return parser->getNetworkDevices(ethernetDataFile);
209 uint64_t Bytes = totalBytes;
215 kByte = Bytes / 1024;
220 mByte = kByte / 1024;
225 gByte = mByte / 1024;
269 uint64_t Bytes = totalBytes * 8;
275 kByte = Bytes / 1024;
280 mByte = kByte / 1024;
285 gByte = mByte / 1024;
330 networkParser::getNetworkParser()->parse(this->ethernetDataFile);
333 [designator](
auto elem) { return elem == designator; }))
335 throw std::runtime_error(
"invalid designator: " + designator);
337 auto before = networkParser::getNetworkParser()->getTimeBefore();
338 auto current = networkParser::getNetworkParser()->getTimeStamp();
340 auto msec = std::chrono::duration_cast<std::chrono::milliseconds>(before - current);
342 uint64_t Bytes = (networkParser::getNetworkParser()->getEthObj(this->ethDev).at(designator) -
343 networkParser::getNetworkParser()->getEthObjOld(this->ethDev).at(designator));
344 if (
static_cast<unsigned long>(msec.count()) <= 0)
350 Bytes /=
static_cast<unsigned long>(msec.count());
358 networkParser::getNetworkParser()->parse(this->ethernetDataFile);
359 auto ifObj = networkParser::getNetworkParser()->getEthObj(this->ethDev);
362 [designator](
auto elem) { return elem == designator; }))
364 throw std::runtime_error(
"invalid designator: " + designator);
366 return ifObj[designator];