-
Notifications
You must be signed in to change notification settings - Fork 8
/
cpuusage.js
54 lines (43 loc) · 1009 Bytes
/
cpuusage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var libfs = require( 'fs' );
var readStat = function( cb ) {
libfs.readFile( "/proc/stat", function( err, data ) {
cb( data.toString( ) );
} );
}
function cpuUsage( freq, cb ) {
if( typeof freq == 'function' ) {
cb = freq;
freq = 1000;
}
var prevTotal = 0;
var prevIdle = 0;
var prevLoad = 0;
setInterval( function( ) {
readStat( function( data ) {
var dRaw = data.split( ' ' );
var d = [];
var idx = 1;
var count = 0;
while( count < 4 ) {
var t = parseInt( dRaw[ idx ] );
if( t ) {
count++;
d.push( t );
}
idx++;
}
var idle = parseInt( d[ 3 ] );
var total = parseInt( d[ 0 ] ) + parseInt( d[ 1 ] ) + parseInt( d[ 2 ] );
var load = 0;
if( prevTotal != 0 ) {
load = Math.round( ( total - prevTotal ) / ( total + idle - prevTotal - prevIdle ) * 100 );
if( cb )
cb( load );
}
prevLoad = load;
prevTotal = total;
prevIdle = idle;
} );
}, freq || 1000 );
};
module.exports = cpuUsage;