UNPKG

curator

Version:

A flexible process monitoring and management framework.

87 lines (86 loc) 2.84 kB
(function() { var fs, hertz, ipcpu, kb_per_page, mem, os, pcpu, pmem; fs = require('fs'); os = require('os'); kb_per_page = 4; hertz = 100; mem = function(stat) { return stat.rss * kb_per_page; }; pmem = function(stat) { return stat.mem * 1024 / os.totalmem() * 100; }; pcpu = function(stat) { var seconds, total_time; total_time = stat.utime + stat.stime; seconds = stat.timestamp - stat.starttime / hertz; return (total_time * 1000 / hertz) / seconds / 10; }; ipcpu = exports.ipcpu = function(old_utime, old_stime, interval, stat) { var seconds, total_time; total_time = stat.utime + stat.stime - old_utime - old_stime; seconds = interval / 1000; return (total_time * 1000 / hertz) / seconds / 10; }; exports.poll = function(pid, callback) { return fs.readFile("/proc/" + pid + "/stat", function(err, data) { var stat; if (err) { callback(err, null); return; } data = data.toString('ascii').split(' '); stat = { pid: parseInt(data[0]), comm: data[1], state: data[2], ppid: parseInt(data[3]), pgrp: parseInt(data[4]), session: parseInt(data[5]), tty_nr: parseInt(data[6]), tpgid: parseInt(data[7]), flags: parseInt(data[8]), minflt: parseInt(data[9]), cminflt: parseInt(data[10]), majflt: parseInt(data[11]), cmajflt: parseInt(data[12]), utime: parseInt(data[13]), stime: parseInt(data[14]), cutime: parseInt(data[15]), cstime: parseInt(data[16]), priority: parseInt(data[17]), nice: parseInt(data[18]), num_threads: parseInt(data[19]), itrealvalue: parseInt(data[20]), starttime: parseInt(data[21]), vsize: parseInt(data[22]), rss: parseInt(data[23]), rsslim: parseInt(data[24]), startcode: parseInt(data[25]), endcode: parseInt(data[26]), startstack: parseInt(data[27]), kstkesp: parseInt(data[28]), kstkeip: parseInt(data[29]), signal: parseInt(data[30]), blocked: parseInt(data[31]), sigignore: parseInt(data[32]), sigcatch: parseInt(data[33]), wchan: parseInt(data[34]), nswap: parseInt(data[35]), cnswap: parseInt(data[36]), exit_signal: parseInt(data[37]), processor: parseInt(data[38]), rt_priority: parseInt(data[39]), policy: parseInt(data[40]), delayacct_blkio_ticks: parseInt(data[41]), guest_time: parseInt(data[42]), cguest_time: parseInt(data[43].trim()) }; stat.timestamp = os.uptime(); stat.mem = mem(stat); stat.pmem = pmem(stat); stat.pcpu = pcpu(stat); return callback(null, stat); }); }; }).call(this);