#include "sysinfolinuximpl.h" #include #include SysInfoLinuxImpl::SysInfoLinuxImpl() : SysInfo(), mCpuLoadLastValues() {} void SysInfoLinuxImpl::init() { mCpuLoadLastValues = cpuRawData(); } double SysInfoLinuxImpl::cpuLoadAverage() { QVector firstSample = mCpuLoadLastValues; QVector 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 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 rawData; rawData.append(totalUser); rawData.append(totalUserNice); rawData.append(totalSystem); rawData.append(totalIdle); return rawData; }