File indexing completed on 2024-05-12 17:00:14

0001 /*
0002     SPDX-FileCopyrightText: 2021 David Redondo <kde@david-redondo.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #include "loadaverages.h"
0008 
0009 #include <KLocalizedString>
0010 #include <array>
0011 
0012 LoadAverages::LoadAverages(KSysGuard::SensorContainer *parent)
0013     : KSysGuard::SensorObject(QStringLiteral("loadaverages"), i18nc("@title", "Load Averages"), parent)
0014     , average1Minute{new KSysGuard::SensorProperty(QStringLiteral("loadaverage1"), i18nc("@title", "Load average (1 minute)"), 0, this)}
0015     , average5Minutes{new KSysGuard::SensorProperty(QStringLiteral("loadaverage5"), i18nc("@title", "Load average (5 minutes)"), 0, this)}
0016     , average15Minutes{new KSysGuard::SensorProperty(QStringLiteral("loadaverage15"), i18nc("@title", "Load average (15 minute)"), 0, this)}
0017 {
0018     average1Minute->setShortName(i18nc("@title,  Short for 'Load average (1 minute)", "Load average (1m)"));
0019     average5Minutes->setShortName(i18nc("@title,  Short for 'Load average (5 minutes)", "Load average (5m)"));
0020     average15Minutes->setShortName(i18nc("@title,  Short for 'Load average (15 minutes)", "Load average (15m)"));
0021 
0022     average1Minute->setDescription(i18nc("@info", "Number of jobs in the run queue averaged over 1 minute"));
0023     average5Minutes->setDescription(i18nc("@info", "Number of jobs in the run queue averaged over 5 minutes"));
0024     average15Minutes->setDescription(i18nc("@info", "Number of jobs in the run queue averaged over 15 minutes"));
0025 
0026     average1Minute->setUnit(KSysGuard::UnitNone);
0027     average5Minutes->setUnit(KSysGuard::UnitNone);
0028     average15Minutes->setUnit(KSysGuard::UnitNone);
0029 }
0030 
0031 void LoadAverages::update()
0032 {
0033     if (isSubscribed()) {
0034         std::array<double, 3> averages;
0035         const int numRetrieved = getloadavg(averages.data(), 3);
0036         if (numRetrieved >= 1) {
0037             average1Minute->setValue(averages[0]);
0038         }
0039         if (numRetrieved >= 2) {
0040             average5Minutes->setValue(averages[1]);
0041         }
0042         if (numRetrieved == 3) {
0043             average15Minutes->setValue(averages[2]);
0044         }
0045     }
0046 }