UNPKG

node-proc

Version:

Module to access Linux /proc information

207 lines (156 loc) 4 kB
#!/usr/bin/env node /** * Node Proc Pseudo-Filesystem Reader * * @package Node-Proc * @subpackage Index * * @author James Cunningham <tetrauk@gmail.com> * @copyright Copyright 2013 James Cunningham. */ /* --- Dependencies --- -------------------------------------------------- */ var FS = require( 'fs' ); /* --- Filesystem Access Functions --- -------------------------------------------------- */ /** * Read Proc File * * @param string filename Proc Filename (excluding /proc) * @param function callback Callback( object err, string filedata ) * @return void */ function readProcFile( filename, callback ) { FS.readFile( '/proc/'+filename, function( err, filedata ) { if ( err ) return callback( err ); return callback( null, filedata.toString() ); }); } // Export Function exports.read = readProcFile; /** * Read KeyValue String * * @param string input Input String * @param stirng sep Seperator (default ":") */ function readKeyValue( input, sep ) { if ( !sep ) sep = ":"; input = input.trim().split( "\n" ); var r = {}; for( key in input ) { line = input[ key ].trim().split( sep ); if ( line.length != 2 ) continue; line[0] = line[0].trim(); line[1] = line[1].trim(); // Convert kB values to bytes if ( line[1].slice( -3 ) == ' kB' || line[1].slice( -3 ) == ' KB' ) line[1] = parseInt( line[1].substr( 0, line[1].length -3 ) ) * 1024; // Append To Response r[ line[0] ] = line[1]; } return r; } /* --- Memory Information --- -------------------------------------------------- */ /** * Memory Info * * @param function callback( object err, array meminfo ) * @return void */ exports.meminfo = function( callback ) { readProcFile( 'meminfo', function( err, meminfo ) { if ( err ) return callback( err ); meminfo = readKeyValue( meminfo ); return callback( null, meminfo ); }); }; /* --- CPU Information --- -------------------------------------------------- */ /** * CPU Info * * @param function callback( object err, array cpuinfo ) * @return void */ exports.cpuinfo = function( callback ) { readProcFile( 'cpuinfo', function( err, cpuinfo ) { if ( err ) return callback( err ); // Split Multiple Processors var procs = cpuinfo.split("\n\n"); var r = []; // Format Each Processor for( p in procs ) { if ( procs[p].length < 1 ) continue; // Parse and append to response r.push( readKeyValue( procs[p] ) ); } return callback( null, r ); }); }; /* --- Network Functions --- -------------------------------------------------- */ /** * Network Devices Transfer * * @param function callback( object err, array netdev ) * @return void */ exports.netdev = function( callback ) { readProcFile( 'net/dev', function( err, netdev ) { if ( err ) return callback( err ); netdev = netdev.trim().split( "\n" ); // Remove Headers netdev.shift(); netdev.shift(); var r = []; for( dev in netdev ) { // Split Line by whitespace line = netdev[dev].trim().match( /\S+/g ); // Append To Response r.push({ device: line[0].substr( 0, line[0].length - 1 ), Rx: { bytes: line[1], packets: line[2] }, Tx: { bytes: line[9], packets: line[10] } }); } return callback( null, r ); }); }; /* --- System Time --- -------------------------------------------------- */ /** * Uptime * * @param function callback( object err, integer uptime, integer startTime ) * @return void */ exports.uptime = function( callback ) { readProcFile( 'uptime', function( err, uptime ) { if ( err ) return callback( err ); uptime = uptime.split( ' ' ); uptime = parseInt( uptime[0].split('.')[0] ); var startTime = Math.floor(new Date().getTime() / 1000) - uptime; return callback( null, uptime, startTime ); }); };