From a88758fd14816c673d2910ea02bea24207ffdf3b Mon Sep 17 00:00:00 2001 From: maudrid Date: Fri, 21 Aug 2020 21:46:28 +0200 Subject: [PATCH] Make sure that not only the first disk IO is reported but the sum of all disk IO. For example: If the computer has devices sda and sdb, add the IO numbers of both devices together. --- stacer-core/Info/disk_info.cpp | 36 +++++++++++++++++----------------- stacer-core/Info/disk_info.h | 6 +++--- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/stacer-core/Info/disk_info.cpp b/stacer-core/Info/disk_info.cpp index 692dac0d..660041b9 100644 --- a/stacer-core/Info/disk_info.cpp +++ b/stacer-core/Info/disk_info.cpp @@ -8,14 +8,13 @@ QList DiskInfo::getDisks() const void DiskInfo::updateDiskInfo() { - qDeleteAll(disks); disks.clear(); QList storageInfoList = QStorageInfo::mountedVolumes(); for(const QStorageInfo &info: storageInfoList) { if (info.isValid()) { - Disk *disk = new Disk(); + Disk *disk = new Disk; disk->name = info.displayName(); disk->device = info.device(); disk->size = info.bytesTotal(); @@ -38,11 +37,6 @@ QList DiskInfo::devices() return set.toList(); } -DiskInfo::~DiskInfo() -{ - qDeleteAll(disks); -} - QList DiskInfo::fileSystemTypes() { QSet set; @@ -55,30 +49,36 @@ QList DiskInfo::fileSystemTypes() QList DiskInfo::getDiskIO() const { - static QString diskName = getDiskName(); + static QStringList diskNames = getDiskNames(); QList diskReadWrite; + quint64 totalRead = 0; + quint64 totalWrite = 0; - QStringList diskStat = FileUtil::readStringFromFile(QString("/sys/block/%1/stat").arg(diskName)) - .trimmed() - .split(QRegExp("\\s+")); + for (const QString diskName : diskNames) { + QStringList diskStat = FileUtil::readStringFromFile(QString("/sys/block/%1/stat").arg(diskName)) + .trimmed() + .split(QRegExp("\\s+")); - if (diskStat.count() > 7) { - diskReadWrite.append(diskStat.at(2).toLongLong() * 512); - diskReadWrite.append(diskStat.at(6).toLongLong() * 512); + if (diskStat.count() > 7) { + totalRead = totalRead + (diskStat.at(2).toLongLong() * 512); + totalWrite = totalWrite + (diskStat.at(6).toLongLong() * 512); + } } + diskReadWrite.append(totalRead); + diskReadWrite.append(totalWrite); return diskReadWrite; } -QString DiskInfo::getDiskName() const +QStringList DiskInfo::getDiskNames() const { QDir blocks("/sys/block"); - + QStringList disks; for (const QFileInfo entryInfo : blocks.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot)) { if (QFile::exists(QString("%1/device").arg(entryInfo.absoluteFilePath()))) { - return entryInfo.baseName(); + disks.append(entryInfo.baseName()); } } - return QString(); + return disks; } diff --git a/stacer-core/Info/disk_info.h b/stacer-core/Info/disk_info.h index 16b6d60e..d75b6417 100644 --- a/stacer-core/Info/disk_info.h +++ b/stacer-core/Info/disk_info.h @@ -17,16 +17,16 @@ public: QList getDisks() const; void updateDiskInfo(); QList getDiskIO() const; - QString getDiskName() const; + QStringList getDiskNames() const; QList fileSystemTypes(); QList devices(); - ~DiskInfo(); private: QList disks; }; -struct Disk { +class Disk { +public: QString name; QString device; QString fileSystemType;