13 #include <QTextStream>
18 #include <sys/dkstat.h>
19 #include <sys/param.h>
20 #include <sys/sysctl.h>
21 #include <sys/resource.h>
24 #if defined(Q_OS_NETBSD)
25 #include <sys/param.h>
26 #include <sys/sysctl.h>
27 #include <sys/sched.h>
31 Sensor(interval), userTicks(0), sysTicks(0), niceTicks(0), idleTicks(0)
35 if (rx.indexIn(cpu.toLower()) == -1)
37 cpuNbr =
"cpu" + cpuNbr;
44 void CPUSensor::getTicks(
long &u,
long &s,
long &n,
long &i)
47 static long cp_time[CPUSTATES];
49 size_t size =
sizeof(cp_time);
52 if (sysctlbyname(
"kern.cp_time", &cp_time, &size, NULL, 0) != -1) {
54 s = cp_time[CP_SYS] + cp_time[CP_INTR];
59 #if defined(Q_OS_NETBSD)
60 static uint64_t cp_time[CPUSTATES];
62 size_t size =
sizeof(cp_time);
65 if (sysctlbyname(
"kern.cp_time", &cp_time, &size, NULL, 0) != -1) {
67 s = cp_time[CP_SYS] + cp_time[CP_INTR];
72 QFile file(
"/proc/stat");
74 if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
76 QRegExp rx(cpuNbr +
"\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)");
80 while ((line = t.readLine()) != 0 && rx.cap(0).isEmpty()) {
84 u = rx.cap(1).toLong();
86 n = rx.cap(2).toLong();
88 s = rx.cap(3).toLong();
90 i = rx.cap(4).toLong();
105 long uTicks, sTicks, nTicks, iTicks;
107 getTicks(uTicks, sTicks, nTicks, iTicks);
109 const long totalTicks = ((uTicks - userTicks) +
110 (sTicks - sysTicks) +
111 (nTicks - niceTicks) +
112 (iTicks - idleTicks));
114 int load = (totalTicks == 0) ? 0 : (
int)(100.0 * ((uTicks + sTicks + nTicks) - (userTicks + sysTicks + niceTicks)) / (totalTicks + 0.001) + 0.5);
115 user = (totalTicks == 0) ? 0 : (
int)(100.0 * (uTicks - userTicks) / (totalTicks + 0.001) + 0.5);
116 idle = (totalTicks == 0) ? 0 : (
int)(100.0 * (iTicks - idleTicks) / (totalTicks + 0.001) + 0.5);
117 system = (totalTicks == 0) ? 0 : (
int)(100.0 * (sTicks - sysTicks) / (totalTicks + 0.001) + 0.5);
118 nice = (totalTicks == 0) ? 0 : (
int)(100.0 * (nTicks - niceTicks) / (totalTicks + 0.001) + 0.5);
119 suload = (totalTicks == 0) ? 0 : (
int)(100.0 * ((uTicks + sTicks) - (userTicks + sysTicks)) / (totalTicks+0.001) + 0.5);
142 if (format.length() == 0) {
143 format = QString::number(load);
144 meter->setValue(format);
150 index = format.indexOf(
"%load", 0, Qt::CaseInsensitive);
152 format.replace(index, 5, QString::number(load));
154 index = format.indexOf(
"%v", 0, Qt::CaseInsensitive);
156 format.replace(index, 2, QString::number(load));
158 index = format.indexOf(
"%user", 0, Qt::CaseInsensitive);
160 format.replace(index, 5, QString::number(user));
162 index = format.indexOf(
"%nice", 0, Qt::CaseInsensitive);
164 format.replace(index, 5, QString::number(nice));
166 index = format.indexOf(
"%system", 0, Qt::CaseInsensitive);
168 format.replace(index, 7, QString::number(system));
170 index = format.indexOf(
"%idle", 0, Qt::CaseInsensitive);
172 format.replace(index, 5, QString::number(idle));
174 index = format.indexOf(
"%suload", 0, Qt::CaseInsensitive);
176 format.replace(index, 7, QString::number(suload));
178 meter->setValue(format);
CPUSensor(const QString &cpu, int interval)
QString getParam(const QString &) const
virtual void setMax(int max)
void setMaxValue(SensorParams *sp)
QList< QObject * > * objList