15 #include <sys/dkstat.h> 16 #include <sys/param.h> 17 #include <sys/sysctl.h> 18 #include <sys/resource.h> 21 #if defined(Q_OS_NETBSD) 22 #include <sys/param.h> 23 #include <sys/sysctl.h> 24 #include <sys/sched.h> 27 #include "cpusensor.h" 29 CPUSensor::CPUSensor( TQString cpu,
int interval ) :
30 Sensor(interval), userTicks(0), sysTicks(0), niceTicks(0), idleTicks(0)
33 TQRegExp rx(
"^\\d+$");
34 if( rx.search( cpu.lower() ) == -1)
36 cpuNbr =
"cpu"+cpuNbr;
40 CPUSensor::~CPUSensor()
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 TQFile file(
"/proc/stat");
74 if ( file.open(IO_ReadOnly | IO_Translate) )
76 TQTextStream t( &file );
77 TQRegExp rx( cpuNbr+
"\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)");
80 while( (line = t.readLine()) !=0 && rx.cap(0) ==
"" )
85 u = rx.cap(1).toLong();
87 n = rx.cap(2).toLong();
89 s = rx.cap(3).toLong();
91 i = rx.cap(4).toLong();
105 int CPUSensor::getCPULoad()
107 long uTicks, sTicks, nTicks, iTicks;
109 getTicks(uTicks, sTicks, nTicks, iTicks);
111 const long totalTicks = ((uTicks - userTicks) +
112 (sTicks - sysTicks) +
113 (nTicks - niceTicks) +
114 (iTicks - idleTicks));
116 int load = (totalTicks == 0) ? 0 : (
int) ( 100.0 * ( (uTicks+sTicks+nTicks) - (userTicks+sysTicks+niceTicks))/( totalTicks+0.001) + 0.5 );
117 user = (totalTicks == 0) ? 0 : (
int) ( 100.0 * ( uTicks - userTicks)/( totalTicks+0.001) + 0.5 );
118 idle = (totalTicks == 0) ? 0 : (
int) ( 100.0 * ( iTicks - idleTicks)/( totalTicks+0.001) + 0.5 );
119 system = (totalTicks == 0) ? 0 : (
int) ( 100.0 * ( sTicks - sysTicks)/( totalTicks+0.001) + 0.5 );
120 nice = (totalTicks == 0) ? 0 : (
int) ( 100.0 * ( nTicks - niceTicks)/( totalTicks+0.001) + 0.5 );
130 void CPUSensor::update()
135 int load = getCPULoad();
137 TQObjectListIt it( *objList );
141 meter = sp->getMeter();
142 format = sp->getParam(
"FORMAT" );
144 if( format.length() == 0)
148 format.replace( TQRegExp(
"%load",
false), TQString::number( load ) );
149 format.replace( TQRegExp(
"%user",
false), TQString::number( user ) );
150 format.replace( TQRegExp(
"%nice",
false), TQString::number( nice ) );
151 format.replace( TQRegExp(
"%idle",
false), TQString::number( idle ) );
152 format.replace( TQRegExp(
"%system",
false), TQString::number( system ) );
153 format.replace( TQRegExp(
"%v",
false), TQString::number( load ) );
155 meter->setValue( format );
163 meter = sp->getMeter();
164 meter->setMax( 100 );
167 #include "cpusensor.moc"