File sm_hdd_activity.patch of Package kdebase4-workspace
diff -Pdpru kde-workspace-4.11.22.orig/plasma/generic/applets/system-monitor/hdd_activity.cpp kde-workspace-4.11.22/plasma/generic/applets/system-monitor/hdd_activity.cpp
--- kde-workspace-4.11.22.orig/plasma/generic/applets/system-monitor/hdd_activity.cpp 2015-08-12 10:03:15.000000000 +0300
+++ kde-workspace-4.11.22/plasma/generic/applets/system-monitor/hdd_activity.cpp 2025-03-06 11:48:06.941916328 +0300
@@ -42,18 +42,23 @@
*
* RAID blocks (there *could* be more if not using mdadm, I think):
*
- * disk/md<something>/Rate/rio
- * disk/md<something>/Rate/wio
+ * disk/md<something>/Rate/rblk
+ * disk/md<something>/Rate/wblk
*
* SATA disks:
*
- * disk/sd<something>/Rate/rio
- * disk/sd<something>/Rate/wio
+ * disk/sd<something>/Rate/rblk
+ * disk/sd<something>/Rate/wblk
*
* IDE/PATA disks:
*
- * disk/hd<something>/Rate/rio
- * disk/hd<something>/Rate/wio
+ * disk/hd<something>/Rate/rblk
+ * disk/hd<something>/Rate/wblk
+ *
+ * NVMe SSD disks:
+ *
+ * disk/nvme<something>/Rate/rblk
+ * disk/nvme<something>/Rate/wblk
*
* Does NOT include partitions, since I don't think many people will use that.
*
@@ -62,7 +67,7 @@
*/
Hdd_Activity::Hdd_Activity(QObject *parent, const QVariantList &args)
: SM::Applet(parent, args),
- m_regexp("disk/(?:md|sd|hd)[a-z|0-9]_.*/Rate/(?:rblk|wblk)")
+ m_regexp("^disk/(?:md|sd|hd|nvme)[^_]+_[^/]+/Rate/[rw]blk$")
{
setHasConfigurationInterface(true);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
@@ -78,6 +83,15 @@ void Hdd_Activity::init()
setEngine(dataEngine("systemmonitor"));
setTitle(i18n("Disk Activity"));
+ Plasma::DataEngine *solidEngine = dataEngine("soliddevice");
+ QStringList uuids = solidEngine->query("IS StorageVolume")["IS StorageVolume"].toStringList();
+ foreach (const QString &uuid, uuids) {
+ Plasma::DataEngine::Data data = solidEngine->query(uuid);
+ QString device = data["Device"].toString().mid(5);
+ if (data.contains("Label") && !data["Label"].toString().isEmpty())
+ m_deviceLabels[device] = data["Label"].toString();
+ }
+
/* At the time this method is running, not all sources may be connected. */
connect(engine(), SIGNAL(sourceAdded(QString)), this, SLOT(sourceChanged(QString)));
connect(engine(), SIGNAL(sourceRemoved(QString)), this, SLOT(sourceChanged(QString)));
@@ -106,9 +120,7 @@ void Hdd_Activity::sourcesChanged()
void Hdd_Activity::dataUpdated(const QString& source, const Plasma::DataEngine::Data &data)
{
-
-
- const double value = data["value"].toDouble();
+ const double value = data["value"].toDouble()/1024;
QVector<double>& valueVector = m_data[source];
if (valueVector.size() < 2) {
@@ -141,14 +153,14 @@ void Hdd_Activity::dataUpdated(const QSt
//only graph it if it's got both rblk and wblk
if (valueVector.count() == 2) {
- QString read = KGlobal::locale()->formatNumber(valueVector.at(0), 1);
- QString write = KGlobal::locale()->formatNumber(valueVector.at(1), 1);
+ QString read = KGlobal::locale()->formatNumber(valueVector.at(0)*1024, 1);
+ QString write = KGlobal::locale()->formatNumber(valueVector.at(1)*1024, 1);
//FIXME: allow plotter->addSample overload for QVector.
plotter->addSample(valueVector.toList());
if (mode() == SM::Applet::Panel) {
- const QString tooltip = QString("<tr><td>%1 </td><td>rio: %2%</td><td>wio: %3</td></tr>")
+ const QString tooltip = QString("<tr><td>%1 </td><td>rblk: %2%</td><td>wblk: %3</td></tr>")
.arg(plotter->title()).arg(read).arg(write);
setToolTip(source, tooltip);
@@ -168,12 +180,14 @@ void Hdd_Activity::createConfigurationIn
foreach (const QString& hdd, m_possibleHdds) {
if (m_regexp.indexIn(hdd) != -1) {
if (hdd.endsWith("rblk")) {
-
// so the user only sees 1 device (which includes both rblk/wblk
QString trimmedHdd = hdd;
trimmedHdd.remove("rblk");
- QStandardItem *item1 = new QStandardItem(trimmedHdd);
+ QString device = hdd.mid(5, hdd.indexOf('_', 5) - 5);
+ if (m_deviceLabels.contains(device))
+ device = m_deviceLabels[device] + " (" + device + ")";
+ QStandardItem *item1 = new QStandardItem(device);
item1->setEditable(false);
item1->setCheckable(true);
@@ -261,18 +275,13 @@ bool Hdd_Activity::addVisualization(cons
// but only need 1 vis per actual device (otherwise there'd be 1 for rblk, 1
// for wblk, which isn't what I have in mind -sreich
if (splits.at(3) == "rblk") {
-
- QString hdd = source;
- hdd = hdd.remove("rblk");
-
- //kDebug() << "#### ADD VIS hdd: " << hdd;
-
SM::Plotter *plotter = new SM::Plotter(this);
- plotter->setTitle(hdd);
+ QString device = source.mid(5, source.indexOf('_', 5) - 5);
+ plotter->setTitle(m_deviceLabels.contains(device) ?m_deviceLabels[device] :device);
// FIXME: localize properly..including units.
// ksysguard just gives us 1024 KiB for sources, we need to convert for anything else.
- plotter->setUnit("KiB/s");
+ plotter->setUnit("MiB/s");
// should be read, write, respectively
plotter->setCustomPlots(QList<QColor>() << QColor("#0057AE") << QColor("#E20800"));
diff -Pdpru kde-workspace-4.11.22.orig/plasma/generic/applets/system-monitor/hdd_activity.h kde-workspace-4.11.22/plasma/generic/applets/system-monitor/hdd_activity.h
--- kde-workspace-4.11.22.orig/plasma/generic/applets/system-monitor/hdd_activity.h 2015-08-12 10:03:15.000000000 +0300
+++ kde-workspace-4.11.22/plasma/generic/applets/system-monitor/hdd_activity.h 2025-03-06 09:56:57.212509357 +0300
@@ -57,6 +57,7 @@ public slots:
private:
Ui::config ui;
QStandardItemModel m_hddModel;
+ QHash<QString, QString> m_deviceLabels;
/**
* The hdd sources that would be interesting to watch.