| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #include "sysinfolinuximpl.h"
- #include <sys/sysinfo.h>
- #include <sys/types.h>
- SysInfoLinuxImpl::SysInfoLinuxImpl() : SysInfo(), mCpuLoadLastValues() {}
- void SysInfoLinuxImpl::init() { mCpuLoadLastValues = cpuRawData(); }
- double SysInfoLinuxImpl::cpuLoadAverage() {
- QVector<qulonglong> firstSample = mCpuLoadLastValues;
- QVector<qulonglong> secondSample = cpuRawData();
- mCpuLoadLastValues = secondSample;
- double overall = (secondSample[0] - firstSample[0]) +
- (secondSample[1] - firstSample[1]) +
- (secondSample[2] - firstSample[2]);
- double total = overall + (secondSample[3] - firstSample[3]);
- double percent = (overall / total) * 100.0;
- return qBound(0.0, percent, 100.0);
- }
- double SysInfoLinuxImpl::memoryUsed() {
- struct sysinfo memInfo;
- sysinfo(&memInfo);
- qulonglong totalMemory = memInfo.totalram;
- totalMemory += memInfo.totalswap;
- totalMemory *= memInfo.mem_unit;
- qulonglong totalMemoryUsed = memInfo.totalram - memInfo.freeram;
- totalMemoryUsed += memInfo.totalswap - memInfo.freeswap;
- totalMemoryUsed *= memInfo.mem_unit;
- double percent = (double)totalMemoryUsed / (double)totalMemory * 100.0;
- return qBound(0.0, percent, 100.0);
- }
- QVector<qulonglong> SysInfoLinuxImpl::cpuRawData() {
- QFile file("/proc/stat");
- file.open(QIODevice::ReadOnly);
- QByteArray line = file.readLine();
- file.close();
- qulonglong totalUser = 0, totalUserNice = 0, totalSystem = 0, totalIdle = 0;
- std::sscanf(line.data(), "cpu %llu %llu %llu %llu", &totalUser,
- &totalUserNice, &totalSystem, &totalIdle);
- QVector<qulonglong> rawData;
- rawData.append(totalUser);
- rawData.append(totalUserNice);
- rawData.append(totalSystem);
- rawData.append(totalIdle);
- return rawData;
- }
|