fixed bugs fsSize(win), si.processes (command), si.osinfo(win)

This commit is contained in:
Sebastian Hildebrandt 2017-04-23 14:36:41 +02:00
parent 07c772a147
commit 5f000fba3a
16 changed files with 269 additions and 240 deletions

View File

@ -94,6 +94,7 @@ Other changes
| Version | Date | Comment | | Version | Date | Comment |
| -------------- | -------------- | -------- | | -------------- | -------------- | -------- |
| 3.17.1 | 2017-04-23 | fixed bugs fsSize(win), si.processes (command), si.osinfo(win) |
| 3.17.0 | 2017-02-19 | windows support for some first functions, extended process list (linux)| | 3.17.0 | 2017-02-19 | windows support for some first functions, extended process list (linux)|
| 3.16.0 | 2017-01-19 | blockDevices: added removable attribute + fix | | 3.16.0 | 2017-01-19 | blockDevices: added removable attribute + fix |
| 3.15.1 | 2017-01-17 | minor cpuTemperature fix (OSX) | | 3.15.1 | 2017-01-17 | minor cpuTemperature fix (OSX) |

View File

@ -44,8 +44,8 @@ si.cpu()
- Version 3.17.0: windows support for some very first functions (work in progress) - Version 3.17.0: windows support for some very first functions (work in progress)
- Version 3.16.0: `blockDevices`: added removable attribute - Version 3.16.0: `blockDevices`: added removable attribute
- Version 3.15.0: added `cpuTemperature` also for OSX - Version 3.15.0: added `cpuTemperature` also for OSX
- Version 3.14.0: added `currentLoad` per cpu/core, cpu cache (L1, L2, L3) and cpu flags - Version 3.14.0: added `currentLoad` per cpu/core, cpu cache (L1, L2, L3) and cpu flags
- Version 3.13.0: added `shell` (returns standard shell) - Version 3.13.0: added `shell` (returns standard shell)
- Version 3.12.0: refactoring and extended `currentLoad` (better OSX coverage and added irq load). - Version 3.12.0: refactoring and extended `currentLoad` (better OSX coverage and added irq load).
- Version 3.11.0: `blockDevices` now also for OSX and also extended (+ label, model, serial, protocol). - Version 3.11.0: `blockDevices` now also for OSX and also extended (+ label, model, serial, protocol).
@ -72,7 +72,7 @@ little library. This library is still work in progress. Version 3 comes with fur
requires now node.js version 4.0 and above. Another big change is, that all functions now return promises. You can use them requires now node.js version 4.0 and above. Another big change is, that all functions now return promises. You can use them
like before with callbacks OR with promises (see example in this documentation). I am sure, there is for sure room for improvement. like before with callbacks OR with promises (see example in this documentation). I am sure, there is for sure room for improvement.
I was only able to test it on several Debian, Raspbian, Ubuntu distributions as well as OS X (Mavericks, Yosemite, El Captain). I was only able to test it on several Debian, Raspbian, Ubuntu distributions as well as OS X (Mavericks, Yosemite, El Captain).
Since version 2 nearly all functionality is available on OS X/Darwin platforms. Since version 2 nearly all functionality is available on OS X/Darwin platforms.
Be careful, this library has only very limited Windows support! Be careful, this library has only very limited Windows support!
If you have comments, suggestions & reports, please feel free to contact me! If you have comments, suggestions & reports, please feel free to contact me!
@ -254,8 +254,8 @@ This library is splitted in several sections:
| - list[] | X | X | | list of all processes incl. details | | - list[] | X | X | | list of all processes incl. details |
| - ...[0].pid | X | X | | process PID | | - ...[0].pid | X | X | | process PID |
| - ...[0].pcpu | X | X | | process % CPU usage | | - ...[0].pcpu | X | X | | process % CPU usage |
| - ...[0].pcpuu | X | X | | process % CPU usage (user) | | - ...[0].pcpuu | X | | | process % CPU usage (user) |
| - ...[0].pcpus | X | X | | process % CPU usage (system) | | - ...[0].pcpus | X | | | process % CPU usage (system) |
| - ...[0].pmem | X | X | | process memory % | | - ...[0].pmem | X | X | | process memory % |
| - ...[0].priority | X | X | | process priotity | | - ...[0].priority | X | X | | process priotity |
| - ...[0].mem_vsz | X | X | | process virtual memory size | | - ...[0].mem_vsz | X | X | | process virtual memory size |
@ -264,6 +264,8 @@ This library is splitted in several sections:
| - ...[0].started | X | X | | process start time | | - ...[0].started | X | X | | process start time |
| - ...[0].state | X | X | | process state (e.g. sleeping) | | - ...[0].state | X | X | | process state (e.g. sleeping) |
| - ...[0].tty | X | X | | tty from which process was started | | - ...[0].tty | X | X | | tty from which process was started |
| - ...[0].user | X | X | | user who started process |
| - ...[0].command | X | X | | process starting command |
| si.processLoad('apache2',cb) | X | X | | detailed information about given process | | si.processLoad('apache2',cb) | X | X | | detailed information about given process |
| - proc | X | X | | process name | | - proc | X | X | | process name |
| - pid | X | X | | PID | | - pid | X | X | | PID |
@ -402,7 +404,7 @@ Written by Sebastian Hildebrandt [sebhildebrandt](https://github.com/sebhildebra
OSX Temperature: Credits here are going to: OSX Temperature: Credits here are going to:
- Massimiliano Marcon [mmarcon](https://github.com/mmarcon) - for his work on [smc-code][smc-code-url] - Massimiliano Marcon [mmarcon](https://github.com/mmarcon) - for his work on [smc-code][smc-code-url]
- Sébastien Lavoie[lavoiesl](https://github.com/lavoiesl) for his work on [osx-cpu-temp][osx-cpu-temp-url] code. - Sébastien Lavoie [lavoiesl](https://github.com/lavoiesl) for his work on [osx-cpu-temp][osx-cpu-temp-url] code.
## Copyright Information ## Copyright Information

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
module.exports = function (callback) { module.exports = function (callback) {
@ -54,7 +54,7 @@ module.exports = function (callback) {
exec("cat " + battery_path + "status", function (error, stdout) { exec("cat " + battery_path + "status", function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
if (lines.length > 0 && lines[0]) result.ischarging = (lines[0].trim().toLowerCase() == 'charging') if (lines.length > 0 && lines[0]) result.ischarging = (lines[0].trim().toLowerCase() === 'charging')
} }
exec("cat " + battery_path + "cyclec_ount", function (error, stdout) { exec("cat " + battery_path + "cyclec_ount", function (error, stdout) {
if (!error) { if (!error) {
@ -91,11 +91,11 @@ module.exports = function (callback) {
if (!error) { if (!error) {
let lines = stdout.toString().replace(/ +/g, "").replace(/"+/g, "").split('\n'); let lines = stdout.toString().replace(/ +/g, "").replace(/"+/g, "").split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
if (line.indexOf('=') != -1) { if (line.indexOf('=') !== -1) {
if (line.toLowerCase().indexOf('cyclecount') != -1) result.cyclecount = parseFloat(line.split('=')[1].trim()); if (line.toLowerCase().indexOf('cyclecount') !== -1) result.cyclecount = parseFloat(line.split('=')[1].trim());
if (line.toLowerCase().indexOf('ischarging') != -1) result.ischarging = (line.split('=')[1].trim().toLowerCase() == 'yes'); if (line.toLowerCase().indexOf('ischarging') !== -1) result.ischarging = (line.split('=')[1].trim().toLowerCase() === 'yes');
if (line.toLowerCase().indexOf('maxcapacity') != -1) result.maxcapacity = parseFloat(line.split('=')[1].trim()); if (line.toLowerCase().indexOf('maxcapacity') !== -1) result.maxcapacity = parseFloat(line.split('=')[1].trim());
if (line.toLowerCase().indexOf('currentcapacity') != -1) result.currentcapacity = parseFloat(line.split('=')[1].trim()); if (line.toLowerCase().indexOf('currentcapacity') !== -1) result.currentcapacity = parseFloat(line.split('=')[1].trim());
} }
}); });
} }

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
let _cpu_speed = '0.00'; let _cpu_speed = '0.00';
@ -89,9 +89,9 @@ function getCpu() {
let line = lines[0].split(':')[1]; let line = lines[0].split(':')[1];
result.brand = line.split('@')[0].trim(); result.brand = line.split('@')[0].trim();
result.speed = line.split('@')[1] ? parseFloat(line.split('@')[1].trim()).toFixed(2) : '0.00'; result.speed = line.split('@')[1] ? parseFloat(line.split('@')[1].trim()).toFixed(2) : '0.00';
if (result.speed == '0.00') { if (result.speed === '0.00') {
let current = getCpuCurrentSpeedSync(); let current = getCpuCurrentSpeedSync();
if (current != '0.00') result.speed = current; if (current !== '0.00') result.speed = current;
} }
_cpu_speed = result.speed; _cpu_speed = result.speed;
} }
@ -102,7 +102,7 @@ function getCpu() {
if (_windows) { if (_windows) {
exec("wmic cpu get name", function (error, stdout) { exec("wmic cpu get name", function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.split('\r\n').filter(line => line.trim() != '').filter((line, idx) => idx > 0); let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
let line = (lines && lines[0]) ? lines[0] : ''; let line = (lines && lines[0]) ? lines[0] : '';
result.brand = line.split('@')[0].trim(); result.brand = line.split('@')[0].trim();
result.speed = line.split('@')[1].trim(); result.speed = line.split('@')[1].trim();
@ -172,7 +172,7 @@ function cpuCurrentspeed(callback) {
return new Promise((resolve) => { return new Promise((resolve) => {
process.nextTick(() => { process.nextTick(() => {
let result = getCpuCurrentSpeedSync(); let result = getCpuCurrentSpeedSync();
if (result == 0 && _cpu_speed != '0.00') result = parseFloat(_cpu_speed); if (result === 0 && _cpu_speed !== '0.00') result = parseFloat(_cpu_speed);
if (callback) { callback(result) } if (callback) { callback(result) }
resolve(result); resolve(result);
@ -202,10 +202,10 @@ function cpuTemperature(callback) {
lines.forEach(function (line) { lines.forEach(function (line) {
let regex = /\+([^°]*)/g; let regex = /\+([^°]*)/g;
let temps = line.match(regex); let temps = line.match(regex);
if (line.split(':')[0].toUpperCase().indexOf('PHYSICAL') != -1) { if (line.split(':')[0].toUpperCase().indexOf('PHYSICAL') !== -1) {
result.main = parseFloat(temps); result.main = parseFloat(temps);
} }
if (line.split(':')[0].toUpperCase().indexOf('CORE ') != -1) { if (line.split(':')[0].toUpperCase().indexOf('CORE ') !== -1) {
result.cores.push(parseFloat(temps)); result.cores.push(parseFloat(temps));
} }
}); });
@ -217,7 +217,7 @@ function cpuTemperature(callback) {
resolve(result); resolve(result);
} else { } else {
fs.stat('/sys/class/thermal/thermal_zone0/temp', function(err, stat) { fs.stat('/sys/class/thermal/thermal_zone0/temp', function(err, stat) {
if(err == null) { if(err === null) {
exec("cat /sys/class/thermal/thermal_zone0/temp", function (error, stdout) { exec("cat /sys/class/thermal/thermal_zone0/temp", function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
@ -255,7 +255,7 @@ function cpuTemperature(callback) {
let id = 0; let id = 0;
cores.forEach(function(key) { cores.forEach(function(key) {
let value = smc.get(key); let value = smc.get(key);
if (id == 0) { if (id === 0) {
if (value > 0) { if (value > 0) {
result.main = value; result.main = value;
result.max = value; result.max = value;
@ -323,7 +323,7 @@ function cpuFlags(callback) {
if (!error) { if (!error) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
if (line.split(':')[0].toUpperCase().indexOf('FLAGS') != -1) { if (line.split(':')[0].toUpperCase().indexOf('FLAGS') !== -1) {
result = line.split(':')[1].trim().toLowerCase(); result = line.split(':')[1].trim().toLowerCase();
} }
}); });
@ -336,7 +336,7 @@ function cpuFlags(callback) {
exec("sysctl machdep.cpu.features", function (error, stdout) { exec("sysctl machdep.cpu.features", function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
if (lines.length > 0 && lines[0].indexOf('machdep.cpu.features:') != -1) { if (lines.length > 0 && lines[0].indexOf('machdep.cpu.features:') !== -1) {
result = lines[0].split(':')[1].trim().toLowerCase(); result = lines[0].split(':')[1].trim().toLowerCase();
} }
} }
@ -370,17 +370,17 @@ function cpuCache(callback) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
let parts = line.split(':'); let parts = line.split(':');
if (parts[0].toUpperCase().indexOf('L1D CACHE') != -1) { if (parts[0].toUpperCase().indexOf('L1D CACHE') !== -1) {
result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
if (parts[0].toUpperCase().indexOf('L1I CACHE') != -1) { if (parts[0].toUpperCase().indexOf('L1I CACHE') !== -1) {
result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
if (parts[0].toUpperCase().indexOf('L2 CACHE') != -1) { if (parts[0].toUpperCase().indexOf('L2 CACHE') !== -1) {
result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
if (parts[0].toUpperCase().indexOf('L3 CACHE') != -1) { if (parts[0].toUpperCase().indexOf('L3 CACHE') !== -1) {
result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
}); });
} }
@ -394,17 +394,17 @@ function cpuCache(callback) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
let parts = line.split(':'); let parts = line.split(':');
if (parts[0].toLowerCase().indexOf('hw.l1icachesize') != -1) { if (parts[0].toLowerCase().indexOf('hw.l1icachesize') !== -1) {
result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
if (parts[0].toLowerCase().indexOf('hw.l1dcachesize') != -1) { if (parts[0].toLowerCase().indexOf('hw.l1dcachesize') !== -1) {
result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
if (parts[0].toLowerCase().indexOf('hw.l2cachesize') != -1) { if (parts[0].toLowerCase().indexOf('hw.l2cachesize') !== -1) {
result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
if (parts[0].toLowerCase().indexOf('hw.l3cachesize') != -1) { if (parts[0].toLowerCase().indexOf('hw.l3cachesize') !== -1) {
result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1);
} }
}); });
} }

View File

@ -18,7 +18,7 @@ const DockerSocket = require('./dockerSocket');
let _platform = os.type(); let _platform = os.type();
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
let _docker_container_stats = {}; let _docker_container_stats = {};
@ -192,10 +192,10 @@ function docker_calcBlockIO(blkio_stats) {
* @property {number} value * @property {number} value
*/ */
if (element.op && element.op.toLowerCase() == 'read' && element.value) { if (element.op && element.op.toLowerCase() === 'read' && element.value) {
result.r += element.value; result.r += element.value;
} }
if (element.op && element.op.toLowerCase() == 'write' && element.value) { if (element.op && element.op.toLowerCase() === 'write' && element.value) {
result.w += element.value; result.w += element.value;
} }
}) })
@ -395,7 +395,7 @@ function dockerAll(callback) {
element.processes = processes; element.processes = processes;
l -= 1; l -= 1;
if (l == 0) { if (l === 0) {
if (callback) { callback(result) } if (callback) { callback(result) }
resolve(result); resolve(result);
} }

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
let _fs_speed = {}; let _fs_speed = {};
@ -34,15 +34,15 @@ function fsSize(callback) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
process.nextTick(() => { process.nextTick(() => {
let data = [];
if (_linux || _darwin) { if (_linux || _darwin) {
let cmd = (_darwin ? "df -lkP | grep ^/" : "df -lkPT | grep ^/"); let cmd = (_darwin ? "df -lkP | grep ^/" : "df -lkPT | grep ^/");
exec(cmd, function (error, stdout) { exec(cmd, function (error, stdout) {
let data = [];
if (!error) { if (!error) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
//lines.splice(0, 1); //lines.splice(0, 1);
lines.forEach(function (line) { lines.forEach(function (line) {
if (line != '') { if (line !== '') {
line = line.replace(/ +/g, " ").split(' '); line = line.replace(/ +/g, " ").split(' ');
data.push({ data.push({
'fs': line[0], 'fs': line[0],
@ -63,9 +63,9 @@ function fsSize(callback) {
} }
if (_windows) { if (_windows) {
exec('wmic logicaldisk get Caption,FileSystem,FreeSpace,Size', function (error, stdout) { exec('wmic logicaldisk get Caption,FileSystem,FreeSpace,Size', function (error, stdout) {
let lines = stdout.split('\r\n').filter(line => line.trim() != '').filter((line, idx) => idx > 0); let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
lines.forEach(function (line) { lines.forEach(function (line) {
if (line != '') { if (line !== '') {
line = line.trim().split(/\s\s+/); line = line.trim().split(/\s\s+/);
data.push({ data.push({
'fs': line[0], 'fs': line[0],
@ -101,7 +101,7 @@ function parseDevices(lines) {
let i = 0; let i = 0;
lines.forEach(line => { lines.forEach(line => {
if (line.length > 0) { if (line.length > 0) {
if (line[0] == '*') { if (line[0] === '*') {
i++; i++;
} else { } else {
let parts = line.split(':'); let parts = line.split(':');
@ -123,22 +123,22 @@ function parseDevices(lines) {
}; };
parts[0] = parts[0].trim().toUpperCase().replace(/ +/g, ''); parts[0] = parts[0].trim().toUpperCase().replace(/ +/g, '');
parts[1] = parts[1].trim(); parts[1] = parts[1].trim();
if ('DEVICEIDENTIFIER' == parts[0]) devices[i].identifier = parts[1]; if ('DEVICEIDENTIFIER' === parts[0]) devices[i].identifier = parts[1];
if ('DEVICENODE' == parts[0]) devices[i].name = parts[1]; if ('DEVICENODE' === parts[0]) devices[i].name = parts[1];
if ('VOLUMENAME' == parts[0]) { if ('VOLUMENAME' === parts[0]) {
if (parts[1].indexOf('Not applicable') == -1) devices[i].label = parts[1]; if (parts[1].indexOf('Not applicable') === -1) devices[i].label = parts[1];
} }
if ('PROTOCOL' == parts[0]) devices[i].protocol = parts[1]; if ('PROTOCOL' === parts[0]) devices[i].protocol = parts[1];
if ('DISKSIZE' == parts[0]) devices[i].size = parseBytes(parts[1]); if ('DISKSIZE' === parts[0]) devices[i].size = parseBytes(parts[1]);
if ('FILESYSTEMPERSONALITY' == parts[0]) devices[i].fstype = parts[1]; if ('FILESYSTEMPERSONALITY' === parts[0]) devices[i].fstype = parts[1];
if ('MOUNTPOINT' == parts[0]) devices[i].mount = parts[1]; if ('MOUNTPOINT' === parts[0]) devices[i].mount = parts[1];
if ('VOLUMEUUID' == parts[0]) devices[i].uuid = parts[1]; if ('VOLUMEUUID' === parts[0]) devices[i].uuid = parts[1];
if ('READ-ONLYMEDIA' == parts[0] && parts[1] == 'Yes') devices[i].physical = 'CD/DVD'; if ('READ-ONLYMEDIA' === parts[0] && parts[1] === 'Yes') devices[i].physical = 'CD/DVD';
if ('SOLIDSTATE' == parts[0] && parts[1] == 'Yes') devices[i].physical = 'SSD'; if ('SOLIDSTATE' === parts[0] && parts[1] === 'Yes') devices[i].physical = 'SSD';
if ('VIRTUAL' == parts[0]) devices[i].type = 'virtual'; if ('VIRTUAL' === parts[0]) devices[i].type = 'virtual';
if ('REMOVABLEMEDIA' == parts[0]) devices[i].removable = (parts[1] == 'Removable'); if ('REMOVABLEMEDIA' === parts[0]) devices[i].removable = (parts[1] === 'Removable');
if ('PARTITIONTYPE' == parts[0]) devices[i].type = 'part'; if ('PARTITIONTYPE' === parts[0]) devices[i].type = 'part';
if ('DEVICE/MEDIANAME' == parts[0]) devices[i].model = parts[1]; if ('DEVICE/MEDIANAME' === parts[0]) devices[i].model = parts[1];
} }
} }
} }
@ -149,7 +149,7 @@ function parseDevices(lines) {
function parseBlk(lines) { function parseBlk(lines) {
let data = []; let data = [];
lines.filter(line => line != '').forEach((line) => { lines.filter(line => line !== '').forEach((line) => {
let disk = JSON.parse(line); let disk = JSON.parse(line);
data.push({ data.push({
'name': disk.name, 'name': disk.name,
@ -157,12 +157,12 @@ function parseBlk(lines) {
'fstype': disk.fstype, 'fstype': disk.fstype,
'mount': disk.mountpoint, 'mount': disk.mountpoint,
'size': parseInt(disk.size), 'size': parseInt(disk.size),
'physical': (disk.type == 'disk' ? (disk.rota == '0' ? 'SSD' : 'HDD') : (disk.type == 'rom' ? 'CD/DVD' : '')), 'physical': (disk.type === 'disk' ? (disk.rota === '0' ? 'SSD' : 'HDD') : (disk.type === 'rom' ? 'CD/DVD' : '')),
'uuid': disk.uuid, 'uuid': disk.uuid,
'label': disk.label, 'label': disk.label,
'model': disk.model, 'model': disk.model,
'serial': disk.serial, 'serial': disk.serial,
'removable': disk.rm == '1', 'removable': disk.rm === '1',
'protocol': disk.tran 'protocol': disk.tran
}) })
}); });
@ -238,9 +238,9 @@ function blockDevices(callback) {
if (_windows) { if (_windows) {
exec('wmic logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /format:csv', function (error, stdout) { exec('wmic logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /format:csv', function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.split('\r\n').filter(line => line.trim() != '').filter((line, idx) => idx > 0); let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
lines.forEach(function (line) { lines.forEach(function (line) {
if (line != '') { if (line !== '') {
line = line.replace('\r', '').split(','); line = line.replace('\r', '').split(',');
data.push({ data.push({
name: line[7], name: line[7],
@ -249,12 +249,12 @@ function blockDevices(callback) {
fstype: line[5].toLowerCase(), fstype: line[5].toLowerCase(),
mount: line[1], mount: line[1],
size: line[8], size: line[8],
physical: line[4] == '5' ? 'CD/DVD' : 'HDD', physical: line[4] === '5' ? 'CD/DVD' : 'HDD',
uuid: line[10], uuid: line[10],
label: line[9], label: line[9],
model: '', model: '',
serial: line[10], serial: line[10],
removable: line[4] == '2', removable: line[4] === '2',
protocol: '' protocol: ''
}); });
} }
@ -350,9 +350,9 @@ function fsStats(callback) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
let fs_filter = []; let fs_filter = [];
lines.forEach(function (line) { lines.forEach(function (line) {
if (line != '') { if (line !== '') {
line = line.replace(/[├─│└]+/g, "").trim().split(' '); line = line.replace(/[├─│└]+/g, "").trim().split(' ');
if (fs_filter.indexOf(line[0]) == -1) fs_filter.push(line[0]) if (fs_filter.indexOf(line[0]) === -1) fs_filter.push(line[0])
} }
}); });
@ -362,7 +362,7 @@ function fsStats(callback) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
line = line.trim(); line = line.trim();
if (line != '') { if (line !== '') {
line = line.replace(/ +/g, " ").split(' '); line = line.replace(/ +/g, " ").split(' ');
rx += parseInt(line[5]) * 512; rx += parseInt(line[5]) * 512;
@ -390,7 +390,7 @@ function fsStats(callback) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
line = line.trim(); line = line.trim();
if (line != '') { if (line !== '') {
line = line.split(' '); line = line.split(' ');
rx += parseInt(line[0]); rx += parseInt(line[0]);
@ -527,7 +527,7 @@ function disksIO(callback) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
line = line.trim(); line = line.trim();
if (line != '') { if (line !== '') {
line = line.split(' '); line = line.split(' ');
rIO += parseInt(line[1]); rIO += parseInt(line[1]);

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
function graphics(callback) { function graphics(callback) {
@ -35,9 +35,9 @@ function graphics(callback) {
let currentController = {}; let currentController = {};
let currentDisplay = {}; let currentDisplay = {};
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
if ('' != lines[i].trim()) { if ('' !== lines[i].trim()) {
let start = lines[i].search(/\S|$/); let start = lines[i].search(/\S|$/);
if (-1 == starts.indexOf(start)) { if (-1 === starts.indexOf(start)) {
starts.push(start); starts.push(start);
} }
level = starts.indexOf(start); level = starts.indexOf(start);
@ -53,21 +53,21 @@ function graphics(callback) {
} }
lastlevel = level; lastlevel = level;
let parts = lines[i].split(':'); let parts = lines[i].split(':');
if (2 == level) { // grafics controller level if (2 === level) { // grafics controller level
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('chipsetmodel') != -1) currentController.model = parts[1].trim(); if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('chipsetmodel') !== -1) currentController.model = parts[1].trim();
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('bus') != -1) currentController.bus = parts[1].trim(); if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('bus') !== -1) currentController.bus = parts[1].trim();
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('vendor') != -1) currentController.vendor = parts[1].split('(')[0].trim(); if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('vendor') !== -1) currentController.vendor = parts[1].split('(')[0].trim();
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('vram(total)') != -1) { if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('vram(total)') !== -1) {
currentController.vram = parseInt(parts[1]); // in MB currentController.vram = parseInt(parts[1]); // in MB
currentController.vramDynamic = false; currentController.vramDynamic = false;
} }
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('vram(dynamic,max)') != -1) { if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('vram(dynamic,max)') !== -1) {
currentController.vram = parseInt(parts[1]); // in MB currentController.vram = parseInt(parts[1]); // in MB
currentController.vramDynamic = true; currentController.vramDynamic = true;
} }
} }
if (3 == level) { // display controller level if (3 === level) { // display controller level
if (parts.length > 1 && '' == parts[1]) { if (parts.length > 1 && '' === parts[1]) {
currentDisplay.model = parts[0].trim(); currentDisplay.model = parts[0].trim();
currentDisplay.main = false; currentDisplay.main = false;
currentDisplay.builtin = false; currentDisplay.builtin = false;
@ -76,19 +76,19 @@ function graphics(callback) {
currentDisplay.sizey = -1; currentDisplay.sizey = -1;
} }
} }
if (4 == level) { // display controller details level if (4 === level) { // display controller details level
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('resolution') != -1) { if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('resolution') !== -1) {
let resolution = parts[1].split('x'); let resolution = parts[1].split('x');
currentDisplay.resolutionx = (resolution.length > 1 ? parseInt(resolution[0]) : 0); currentDisplay.resolutionx = (resolution.length > 1 ? parseInt(resolution[0]) : 0);
currentDisplay.resolutiony = (resolution.length > 1 ? parseInt(resolution[1]) : 0); currentDisplay.resolutiony = (resolution.length > 1 ? parseInt(resolution[1]) : 0);
} }
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('pixeldepth') != -1) currentDisplay.pixeldepth = parseInt(parts[1]); // in BIT if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('pixeldepth') !== -1) currentDisplay.pixeldepth = parseInt(parts[1]); // in BIT
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('maindisplay') != -1 && parts[1].replace(/ +/g, "").toLowerCase() == 'yes') currentDisplay.main = true; if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('maindisplay') !== -1 && parts[1].replace(/ +/g, "").toLowerCase() === 'yes') currentDisplay.main = true;
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('built-in') != -1 && parts[1].replace(/ +/g, "").toLowerCase() == 'yes') { if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('built-in') !== -1 && parts[1].replace(/ +/g, "").toLowerCase() === 'yes') {
currentDisplay.builtin = true; currentDisplay.builtin = true;
currentDisplay.connection = ''; currentDisplay.connection = '';
} }
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('connectiontype') != -1) { if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('connectiontype') !== -1) {
currentDisplay.builtin = false; currentDisplay.builtin = false;
currentDisplay.connection = parts[1].trim(); currentDisplay.connection = parts[1].trim();
} }
@ -112,10 +112,10 @@ function graphics(callback) {
let currentController = {}; let currentController = {};
let is_vga = false; let is_vga = false;
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
if ('' != lines[i].trim()) { if ('' !== lines[i].trim()) {
if (' ' != lines[i][0] && '\t' != lines[i][0]) { // first line of new entry if (' ' !== lines[i][0] && '\t' !== lines[i][0]) { // first line of new entry
let vgapos = lines[i].toLowerCase().indexOf('vga'); let vgapos = lines[i].toLowerCase().indexOf('vga');
if (vgapos != -1) { // VGA if (vgapos !== -1) { // VGA
if (Object.keys(currentController).length > 0) {// already a controller found if (Object.keys(currentController).length > 0) {// already a controller found
controllers.push(currentController); controllers.push(currentController);
currentController = {}; currentController = {};
@ -140,8 +140,8 @@ function graphics(callback) {
} }
if (is_vga) { // within VGA details if (is_vga) { // within VGA details
let parts = lines[i].split(':'); let parts = lines[i].split(':');
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('devicename') != -1 && parts[0].toLowerCase().indexOf('onboard') != -1) currentController.bus = 'Onboard'; if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('devicename') !== -1 && parts[0].toLowerCase().indexOf('onboard') !== -1) currentController.bus = 'Onboard';
if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('region') != -1 && parts[1].toLowerCase().indexOf('memory') != -1) { if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('region') !== -1 && parts[1].toLowerCase().indexOf('memory') !== -1) {
let memparts = parts[1].split("="); let memparts = parts[1].split("=");
if (memparts.length > 1) { if (memparts.length > 1) {
currentController.vram = parseInt(memparts[1]); currentController.vram = parseInt(memparts[1]);
@ -168,16 +168,16 @@ function graphics(callback) {
let result = {}; let result = {};
// find first "Detailed Timing Description" // find first "Detailed Timing Description"
let start = 108; let start = 108;
if (edid.substr(start, 6) == '000000') { if (edid.substr(start, 6) === '000000') {
start += 36; start += 36;
} }
if (edid.substr(start, 6) == '000000') { if (edid.substr(start, 6) === '000000') {
start += 36; start += 36;
} }
if (edid.substr(start, 6) == '000000') { if (edid.substr(start, 6) === '000000') {
start += 36; start += 36;
} }
if (edid.substr(start, 6) == '000000') { if (edid.substr(start, 6) === '000000') {
start += 36; start += 36;
} }
result.resolutionx = parseInt('0x0' + edid.substr(start + 8, 1) + edid.substr(start + 4, 2)); result.resolutionx = parseInt('0x0' + edid.substr(start + 8, 1) + edid.substr(start + 4, 2));
@ -188,7 +188,7 @@ function graphics(callback) {
start = edid.indexOf('000000fc00'); // find first "Monitor Description Data" start = edid.indexOf('000000fc00'); // find first "Monitor Description Data"
if (start >= 0) { if (start >= 0) {
let model_raw = edid.substr(start + 10, 26); let model_raw = edid.substr(start + 10, 26);
if (model_raw.indexOf('0a') != -1) { if (model_raw.indexOf('0a') !== -1) {
model_raw = model_raw.substr(0, model_raw.indexOf('0a')) model_raw = model_raw.substr(0, model_raw.indexOf('0a'))
} }
result.model = model_raw.match(/.{1,2}/g).map(function (v) { result.model = model_raw.match(/.{1,2}/g).map(function (v) {
@ -207,15 +207,15 @@ function graphics(callback) {
let edid_raw = ''; let edid_raw = '';
let start = 0; let start = 0;
for (let i = 1; i < lines.length; i++) { // start with second line for (let i = 1; i < lines.length; i++) { // start with second line
if ('' != lines[i].trim()) { if ('' !== lines[i].trim()) {
if (' ' != lines[i][0] && '\t' != lines[i][0] && lines[i].toLowerCase().indexOf(' connected ') != -1) { // first line of new entry if (' ' !== lines[i][0] && '\t' !== lines[i][0] && lines[i].toLowerCase().indexOf(' connected ') !== -1) { // first line of new entry
if (Object.keys(currentDisplay).length > 0) { // push last display to array if (Object.keys(currentDisplay).length > 0) { // push last display to array
displays.push(currentDisplay); displays.push(currentDisplay);
currentDisplay = {}; currentDisplay = {};
} }
let parts = lines[i].split(' '); let parts = lines[i].split(' ');
currentDisplay.connection = parts[0]; currentDisplay.connection = parts[0];
currentDisplay.main = (parts[2] == 'primary'); currentDisplay.main = (parts[2] === 'primary');
currentDisplay.builtin = (parts[0].toLowerCase().indexOf('edp') >= 0) currentDisplay.builtin = (parts[0].toLowerCase().indexOf('edp') >= 0)
} }
@ -235,7 +235,7 @@ function graphics(callback) {
is_edid = false; is_edid = false;
} }
} }
if (lines[i].toLowerCase().indexOf('edid:') != -1) { if (lines[i].toLowerCase().indexOf('edid:') !== -1) {
is_edid = true; is_edid = true;
start = lines[i].search(/\S|$/); start = lines[i].search(/\S|$/);
} }

View File

@ -82,6 +82,7 @@
// -------------------------------- // --------------------------------
// //
// version date comment // version date comment
// 3.17.1 2017-04-23 fixed bugs fsSize(win), si.processes (command), si.osinfo(win)
// 3.17.0 2017-02-19 windows support for some first functions // 3.17.0 2017-02-19 windows support for some first functions
// 3.16.0 2017-01-19 blockDevices: added removable attribute + fix // 3.16.0 2017-01-19 blockDevices: added removable attribute + fix
// 3.15.1 2017-01-17 minor cpuTemperature fix (OSX) // 3.15.1 2017-01-17 minor cpuTemperature fix (OSX)
@ -158,7 +159,7 @@ const internet = require('./internet');
const docker = require('./docker'); const docker = require('./docker');
let _platform = os.type(); let _platform = os.type();
let _windows = (_platform == 'Windows_NT'); let _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';

View File

@ -18,9 +18,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
// -------------------------- // --------------------------
@ -49,7 +49,7 @@ function inetChecksite(url, callback) {
exec(cmd + args, function (error, stdout) { exec(cmd + args, function (error, stdout) {
let statusCode = parseInt(stdout.toString()); let statusCode = parseInt(stdout.toString());
result.status = statusCode || 404; result.status = statusCode || 404;
result.ok = !error && (statusCode == 200 || statusCode == 301 || statusCode == 302 || statusCode == 304); result.ok = !error && (statusCode === 200 || statusCode === 301 || statusCode === 302 || statusCode === 304);
result.ms = (result.ok ? Date.now() - t : -1); result.ms = (result.ok ? Date.now() - t : -1);
if (callback) { callback(result) } if (callback) { callback(result) }
resolve(result); resolve(result);

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
// _______________________________________________________________________________________ // _______________________________________________________________________________________
@ -138,9 +138,9 @@ module.exports = function (callback) {
let line = lines[0].replace(/,/g, ".").replace(/M/g, ""); let line = lines[0].replace(/,/g, ".").replace(/M/g, "");
line = line.trim().split(' '); line = line.trim().split(' ');
for (let i = 0; i < line.length; i++) { for (let i = 0; i < line.length; i++) {
if (line[i].toLowerCase().indexOf('total') != -1) result.swaptotal = parseFloat(line[i].split('=')[1].trim()) * 1024 * 1024; if (line[i].toLowerCase().indexOf('total') !== -1) result.swaptotal = parseFloat(line[i].split('=')[1].trim()) * 1024 * 1024;
if (line[i].toLowerCase().indexOf('used') != -1) result.swapused = parseFloat(line[i].split('=')[1].trim()) * 1024 * 1024; if (line[i].toLowerCase().indexOf('used') !== -1) result.swapused = parseFloat(line[i].split('=')[1].trim()) * 1024 * 1024;
if (line[i].toLowerCase().indexOf('free') != -1) result.swapfree = parseFloat(line[i].split('=')[1].trim()) * 1024 * 1024; if (line[i].toLowerCase().indexOf('free') !== -1) result.swapfree = parseFloat(line[i].split('=')[1].trim()) * 1024 * 1024;
} }
} }

View File

@ -20,9 +20,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
let _network = {}; let _network = {};
@ -44,7 +44,7 @@ function getDefaultNetworkInterface() {
for (let dev in ifaces) { for (let dev in ifaces) {
if (ifaces.hasOwnProperty(dev)) { if (ifaces.hasOwnProperty(dev)) {
ifaces[dev].forEach(function (details) { ifaces[dev].forEach(function (details) {
if (details && details.internal == false) { if (details && details.internal === false) {
ifacename = ifacename || dev; ifacename = ifacename || dev;
} }
}) })
@ -93,10 +93,10 @@ function networkInterfaces(callback) {
let mac = ''; let mac = '';
if (ifaces.hasOwnProperty(dev)) { if (ifaces.hasOwnProperty(dev)) {
ifaces[dev].forEach(function (details) { ifaces[dev].forEach(function (details) {
if (details.family == 'IPv4') { if (details.family === 'IPv4') {
ip4 = details.address ip4 = details.address
} }
if (details.family == 'IPv6') { if (details.family === 'IPv6') {
ip6 = details.address ip6 = details.address
} }
mac = details.mac mac = details.mac
@ -217,13 +217,13 @@ function networkStats(iface, callback) {
exec(cmd, function (error, stdout) { exec(cmd, function (error, stdout) {
result.operstate = (stdout.toString().split(':')[1] || '').trim(); result.operstate = (stdout.toString().split(':')[1] || '').trim();
result.operstate = (result.operstate || '').toLowerCase(); result.operstate = (result.operstate || '').toLowerCase();
result.operstate = (result.operstate == 'active' ? 'up' : (result.operstate == 'inactive' ? 'down' : 'unknown')); result.operstate = (result.operstate === 'active' ? 'up' : (result.operstate === 'inactive' ? 'down' : 'unknown'));
cmd = "netstat -bI " + iface; cmd = "netstat -bI " + iface;
exec(cmd, function (error, stdout) { exec(cmd, function (error, stdout) {
if (!error) { if (!error) {
lines = stdout.toString().split('\n'); lines = stdout.toString().split('\n');
// if there is less than 2 lines, no information for this interface was found // if there is less than 2 lines, no information for this interface was found
if (lines.length > 1 && lines[1].trim() != '') { if (lines.length > 1 && lines[1].trim() !== '') {
// skip header line // skip header line
// use the second line because it is tied to the NIC instead of the ipv4 or ipv6 address // use the second line because it is tied to the NIC instead of the ipv4 or ipv6 address
stats = lines[1].replace(/ +/g, " ").split(' '); stats = lines[1].replace(/ +/g, " ").split(' ');
@ -292,7 +292,7 @@ function networkConnections(callback) {
peerip = peeraddress.join(':'); peerip = peeraddress.join(':');
} }
let connstate = line[5]; let connstate = line[5];
if (connstate == 'VERBUNDEN') connstate = 'ESTABLISHED'; if (connstate === 'VERBUNDEN') connstate = 'ESTABLISHED';
if (connstate) { if (connstate) {
result.push({ result.push({
protocol: line[0], protocol: line[0],
@ -335,8 +335,8 @@ function networkConnections(callback) {
peerip = peeraddress.join(':'); peerip = peeraddress.join(':');
} }
let connstate = line[1]; let connstate = line[1];
if (connstate == 'ESTAB') connstate = 'ESTABLISHED'; if (connstate === 'ESTAB') connstate = 'ESTABLISHED';
if (connstate == 'TIME-WAIT') connstate = 'TIME_WAIT'; if (connstate === 'TIME-WAIT') connstate = 'TIME_WAIT';
if (connstate) { if (connstate) {
result.push({ result.push({
protocol: line[0], protocol: line[0],

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
// -------------------------- // --------------------------
@ -40,90 +40,91 @@ exports.time = time;
// Get logo filename of OS distribution // Get logo filename of OS distribution
function getLogoFile(distro) { function getLogoFile(distro) {
distro = distro || '';
distro = distro.toLowerCase(); distro = distro.toLowerCase();
let result = 'linux'; let result = 'linux';
if (_windows) { if (_windows) {
result = 'windows' result = 'windows'
} }
else if (distro.indexOf('mac os') != -1) { else if (distro.indexOf('mac os') !== -1) {
result = 'apple' result = 'apple'
} }
else if (distro.indexOf('arch') != -1) { else if (distro.indexOf('arch') !== -1) {
result = 'arch' result = 'arch'
} }
else if (distro.indexOf('centos') != -1) { else if (distro.indexOf('centos') !== -1) {
result = 'centos' result = 'centos'
} }
else if (distro.indexOf('coreos') != -1) { else if (distro.indexOf('coreos') !== -1) {
result = 'coreos' result = 'coreos'
} }
else if (distro.indexOf('debian') != -1) { else if (distro.indexOf('debian') !== -1) {
result = 'debian' result = 'debian'
} }
else if (distro.indexOf('elementary') != -1) { else if (distro.indexOf('elementary') !== -1) {
result = 'elementary' result = 'elementary'
} }
else if (distro.indexOf('fedora') != -1) { else if (distro.indexOf('fedora') !== -1) {
result = 'fedora' result = 'fedora'
} }
else if (distro.indexOf('gentoo') != -1) { else if (distro.indexOf('gentoo') !== -1) {
result = 'gentoo' result = 'gentoo'
} }
else if (distro.indexOf('mageia') != -1) { else if (distro.indexOf('mageia') !== -1) {
result = 'mageia' result = 'mageia'
} }
else if (distro.indexOf('mandriva') != -1) { else if (distro.indexOf('mandriva') !== -1) {
result = 'mandriva' result = 'mandriva'
} }
else if (distro.indexOf('manjaro') != -1) { else if (distro.indexOf('manjaro') !== -1) {
result = 'manjaro' result = 'manjaro'
} }
else if (distro.indexOf('mint') != -1) { else if (distro.indexOf('mint') !== -1) {
result = 'mint' result = 'mint'
} }
else if (distro.indexOf('openbsd') != -1) { else if (distro.indexOf('openbsd') !== -1) {
result = 'openbsd' result = 'openbsd'
} }
else if (distro.indexOf('opensuse') != -1) { else if (distro.indexOf('opensuse') !== -1) {
result = 'opensuse' result = 'opensuse'
} }
else if (distro.indexOf('pclinuxos') != -1) { else if (distro.indexOf('pclinuxos') !== -1) {
result = 'pclinuxos' result = 'pclinuxos'
} }
else if (distro.indexOf('puppy') != -1) { else if (distro.indexOf('puppy') !== -1) {
result = 'puppy' result = 'puppy'
} }
else if (distro.indexOf('raspbian') != -1) { else if (distro.indexOf('raspbian') !== -1) {
result = 'raspbian' result = 'raspbian'
} }
else if (distro.indexOf('reactos') != -1) { else if (distro.indexOf('reactos') !== -1) {
result = 'reactos' result = 'reactos'
} }
else if (distro.indexOf('redhat') != -1) { else if (distro.indexOf('redhat') !== -1) {
result = 'redhat' result = 'redhat'
} }
else if (distro.indexOf('slackware') != -1) { else if (distro.indexOf('slackware') !== -1) {
result = 'slackware' result = 'slackware'
} }
else if (distro.indexOf('sugar') != -1) { else if (distro.indexOf('sugar') !== -1) {
result = 'sugar' result = 'sugar'
} }
else if (distro.indexOf('steam') != -1) { else if (distro.indexOf('steam') !== -1) {
result = 'steam' result = 'steam'
} }
else if (distro.indexOf('suse') != -1) { else if (distro.indexOf('suse') !== -1) {
result = 'suse' result = 'suse'
} }
else if (distro.indexOf('mate') != -1) { else if (distro.indexOf('mate') !== -1) {
result = 'ubuntu-mate' result = 'ubuntu-mate'
} }
else if (distro.indexOf('lubuntu') != -1) { else if (distro.indexOf('lubuntu') !== -1) {
result = 'lubuntu' result = 'lubuntu'
} }
else if (distro.indexOf('xubuntu') != -1) { else if (distro.indexOf('xubuntu') !== -1) {
result = 'xubuntu' result = 'xubuntu'
} }
else if (distro.indexOf('ubuntu') != -1) { else if (distro.indexOf('ubuntu') !== -1) {
result = 'ubuntu' result = 'ubuntu'
} }
return result; return result;
@ -138,7 +139,7 @@ function osInfo(callback) {
process.nextTick(() => { process.nextTick(() => {
let result = { let result = {
platform: (_platform == 'Windows_NT' ? 'Windows' : _platform), platform: (_platform === 'Windows_NT' ? 'Windows' : _platform),
distro: 'unknown', distro: 'unknown',
release: 'unknown', release: 'unknown',
codename: '', codename: '',
@ -163,7 +164,7 @@ function osInfo(callback) {
let release = {}; let release = {};
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
if (line.indexOf('=') != -1) { if (line.indexOf('=') !== -1) {
release[line.split('=')[0].trim().toUpperCase()] = line.split('=')[1].trim(); release[line.split('=')[0].trim().toUpperCase()] = line.split('=')[1].trim();
} }
}); });
@ -182,11 +183,11 @@ function osInfo(callback) {
exec("sw_vers", function (error, stdout) { exec("sw_vers", function (error, stdout) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
if (line.indexOf('ProductName') != -1) { if (line.indexOf('ProductName') !== -1) {
result.distro = line.split(':')[1].trim(); result.distro = line.split(':')[1].trim();
result.logofile = getLogoFile(result.distro); result.logofile = getLogoFile(result.distro);
} }
if (line.indexOf('ProductVersion') != -1) result.release = line.split(':')[1].trim(); if (line.indexOf('ProductVersion') !== -1) result.release = line.split(':')[1].trim();
}); });
if (callback) { if (callback) {
callback(result) callback(result)

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
let _process_cpu = { let _process_cpu = {
@ -56,13 +56,13 @@ function services(srv, callback) {
let srvs = srv.split('|'); let srvs = srv.split('|');
let comm = (_darwin) ? "ps -caxm -o pcpu,pmem,comm" : "ps axo pcpu,pmem,comm"; let comm = (_darwin) ? "ps -caxm -o pcpu,pmem,comm" : "ps axo pcpu,pmem,comm";
let data = []; let data = [];
if (srv != '' && srvs.length > 0) { if (srv !== '' && srvs.length > 0) {
exec(comm + " | grep -v grep | egrep '" + srv + "'", function (error, stdout) { exec(comm + " | grep -v grep | egrep '" + srv + "'", function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.toString().replace(/ +/g, " ").replace(/,+/g, ".").split('\n'); let lines = stdout.toString().replace(/ +/g, " ").replace(/,+/g, ".").split('\n');
srvs.forEach(function (srv) { srvs.forEach(function (srv) {
let ps = lines.filter(function (e) { let ps = lines.filter(function (e) {
return e.indexOf(srv) != -1 return e.indexOf(srv) !== -1
}); });
data.push({ data.push({
'name': srv, 'name': srv,
@ -115,7 +115,7 @@ function processes(callback) {
let result = []; let result = [];
for (let i = 0; i < head.length; i++) { for (let i = 0; i < head.length; i++) {
if (count <= rights) { if (count <= rights) {
if (head[i] == ' ' && !space) { if (head[i] === ' ' && !space) {
to = i - 1; to = i - 1;
result.push({ result.push({
from: from, from: from,
@ -125,9 +125,9 @@ function processes(callback) {
from = to + 2; from = to + 2;
count++; count++;
} }
space = head[i] == ' '; space = head[i] === ' ';
} else { } else {
if (head[i] != ' ' && space) { if (head[i] !== ' ' && space) {
to = i - 1; to = i - 1;
if (from < to) { if (from < to) {
result.push({ result.push({
@ -139,7 +139,7 @@ function processes(callback) {
from = to + 1; from = to + 1;
count++; count++;
} }
space = head[i] == ' '; space = head[i] === ' ';
} }
} }
to = 1000; to = 1000;
@ -153,20 +153,43 @@ function processes(callback) {
} }
function parseLine(line) { function parseLine(line) {
let pid = parseInt(line.substring(parsedhead[0].from, parsedhead[0].to)); let offset = 0;
let pcpu = parseFloat(line.substring(parsedhead[1].from, parsedhead[1].to).replace(/,/g, ".")); let offset2 = 0;
let pmem = parseFloat(line.substring(parsedhead[2].from, parsedhead[2].to).replace(/,/g, "."));
let priority = parseInt(line.substring(parsedhead[3].from, parsedhead[3].to)); function checkColumn(i) {
let vsz = parseInt(line.substring(parsedhead[4].from, parsedhead[4].to)); offset = offset2;
let rss = parseInt(line.substring(parsedhead[5].from, parsedhead[5].to)); offset2 = line.substring(parsedhead[i].to + offset, 1000).indexOf(' ')
let nice = parseInt(line.substring(parsedhead[6].from, parsedhead[6].to)); // if (line.substring(parsedhead[i].to + offset, parsedhead[i].to + offset + 1) !== ' ') {
let started = line.substring(parsedhead[7].from, parsedhead[7].to).trim(); // offset2++;
let state = line.substring(parsedhead[8].from, parsedhead[8].to).trim(); // }
state = (state[0] == 'R' ? 'running' : (state[0] == 'S' ? 'sleeping' : (state[0] == 'T' ? 'stopped' : (state[0] == 'W' ? 'paging' : (state[0] == 'X' ? 'dead' : (state[0] == 'Z' ? 'zombie' : ((state[0] == 'D' || state[0] == 'U') ? 'blocked' : 'unknown'))))))); }
let tty = line.substring(parsedhead[9].from, parsedhead[9].to).trim();
if (tty == '?' || tty == '??') tty = ''; checkColumn(0)
let user = line.substring(parsedhead[10].from, parsedhead[10].to).trim(); let pid = parseInt(line.substring(parsedhead[0].from + offset, parsedhead[0].to + offset2));
let command = line.substring(parsedhead[11].from, parsedhead[11].to).trim().replace(/\[/g, "").replace(/]/g, ""); checkColumn(1)
let pcpu = parseFloat(line.substring(parsedhead[1].from + offset, parsedhead[1].to + offset2).replace(/,/g, "."));
checkColumn(2)
let pmem = parseFloat(line.substring(parsedhead[2].from + offset, parsedhead[2].to + offset2).replace(/,/g, "."));
checkColumn(3)
let priority = parseInt(line.substring(parsedhead[3].from + offset, parsedhead[3].to + offset2));
checkColumn(4)
let vsz = parseInt(line.substring(parsedhead[4].from + offset, parsedhead[4].to + offset2));
checkColumn(5)
let rss = parseInt(line.substring(parsedhead[5].from + offset, parsedhead[5].to + offset2));
checkColumn(6)
let nice = parseInt(line.substring(parsedhead[6].from + offset, parsedhead[6].to + offset2));
checkColumn(7)
let started = line.substring(parsedhead[7].from + offset, parsedhead[7].to + offset2).trim();
checkColumn(8)
let state = line.substring(parsedhead[8].from + offset, parsedhead[8].to + offset2).trim();
state = (state[0] === 'R' ? 'running' : (state[0] === 'S' ? 'sleeping' : (state[0] === 'T' ? 'stopped' : (state[0] === 'W' ? 'paging' : (state[0] === 'X' ? 'dead' : (state[0] === 'Z' ? 'zombie' : ((state[0] === 'D' || state[0] === 'U') ? 'blocked' : 'unknown')))))));
checkColumn(9)
let tty = line.substring(parsedhead[9].from + offset, parsedhead[9].to + offset2).trim();
if (tty === '?' || tty === '??') tty = '';
checkColumn(10)
let user = line.substring(parsedhead[10].from + offset, parsedhead[10].to + offset2).trim();
checkColumn(11)
let command = line.substring(parsedhead[11].from + offset, parsedhead[11].to + offset2).trim().replace(/\[/g, "").replace(/]/g, "");
return ({ return ({
pid: pid, pid: pid,
@ -190,10 +213,11 @@ function processes(callback) {
let result = []; let result = [];
if (lines.length > 1) { if (lines.length > 1) {
let head = lines[0]; let head = lines[0];
parsedhead = parseHead(head, 7); parsedhead = parseHead(head, 8);
console.log(parsedhead)
lines.shift(); lines.shift();
lines.forEach(function (line) { lines.forEach(function (line) {
if (line.trim() != '') { if (line.trim() !== '') {
result.push(parseLine(line)); result.push(parseLine(line));
} }
}); });
@ -287,7 +311,7 @@ function processes(callback) {
let cmd = ""; let cmd = "";
if ((_process_cpu.ms && Date.now() - _process_cpu.ms >= 500) || _process_cpu.ms == 0) { if ((_process_cpu.ms && Date.now() - _process_cpu.ms >= 500) || _process_cpu.ms === 0) {
if (_linux) cmd = "ps axo pid:10,pcpu:6,pmem:6,pri:5,vsz:10,rss:10,ni:5,start:20,state:20,tty:20,user:20,command"; if (_linux) cmd = "ps axo pid:10,pcpu:6,pmem:6,pri:5,vsz:10,rss:10,ni:5,start:20,state:20,tty:20,user:20,command";
if (_darwin) cmd = "ps acxo pid,pcpu,pmem,pri,vsz,rss,nice,start,state,tty,user,command -r"; if (_darwin) cmd = "ps acxo pid,pcpu,pmem,pri,vsz,rss,nice,start,state,tty,user,command -r";
exec(cmd, function (error, stdout) { exec(cmd, function (error, stdout) {
@ -295,13 +319,13 @@ function processes(callback) {
result.list = parseProcesses(stdout.toString().split('\n')); result.list = parseProcesses(stdout.toString().split('\n'));
result.all = result.list.length; result.all = result.list.length;
result.running = result.list.filter(function (e) { result.running = result.list.filter(function (e) {
return e.state == 'running' return e.state === 'running'
}).length; }).length;
result.blocked = result.list.filter(function (e) { result.blocked = result.list.filter(function (e) {
return e.state == 'blocked' return e.state === 'blocked'
}).length; }).length;
result.sleeping = result.list.filter(function (e) { result.sleeping = result.list.filter(function (e) {
return e.state == 'sleeping' return e.state === 'sleeping'
}).length; }).length;
if (_linux) { if (_linux) {

View File

@ -19,9 +19,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
module.exports = function (callback) { module.exports = function (callback) {
@ -42,39 +42,39 @@ module.exports = function (callback) {
if (!error) { if (!error) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
if (line.indexOf(':') != -1) { if (line.indexOf(':') !== -1) {
if (line.toLowerCase().indexOf('manufacturer') != -1) result.manufacturer = result.manufacturer || line.split(':')[1].trim(); if (line.toLowerCase().indexOf('manufacturer') !== -1) result.manufacturer = result.manufacturer || line.split(':')[1].trim();
if (line.toLowerCase().indexOf('product name') != -1) result.model = line.split(':')[1].trim(); if (line.toLowerCase().indexOf('product name') !== -1) result.model = line.split(':')[1].trim();
if (line.toLowerCase().indexOf('version') != -1) result.version = result.version || line.split(':')[1].trim(); if (line.toLowerCase().indexOf('version') !== -1) result.version = result.version || line.split(':')[1].trim();
if (line.toLowerCase().indexOf('serial number') != -1) result.serial = line.split(':')[1].trim(); if (line.toLowerCase().indexOf('serial number') !== -1) result.serial = line.split(':')[1].trim();
if (line.toLowerCase().indexOf('uuid') != -1) result.uuid = line.split(':')[1].trim(); if (line.toLowerCase().indexOf('uuid') !== -1) result.uuid = line.split(':')[1].trim();
} }
}); });
if (result.serial.toLowerCase().indexOf('o.e.m.') != -1) result.serial = '-'; if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-';
if (result.manufacturer.toLowerCase().indexOf('o.e.m.') != -1) result.manufacturer = ''; if (result.manufacturer.toLowerCase().indexOf('o.e.m.') !== -1) result.manufacturer = '';
if (result.model.toLowerCase().indexOf('o.e.m.') != -1) result.model = 'Computer'; if (result.model.toLowerCase().indexOf('o.e.m.') !== -1) result.model = 'Computer';
if (result.version.toLowerCase().indexOf('o.e.m.') != -1) result.version = '-'; if (result.version.toLowerCase().indexOf('o.e.m.') !== -1) result.version = '-';
if (result.manufacturer == '' && result.model == 'Computer' && result.version == '-') { if (result.manufacturer === '' && result.model === 'Computer' && result.version === '-') {
// Check Raspberry Pi // Check Raspberry Pi
exec("grep Hardware /proc/cpuinfo; grep Serial /proc/cpuinfo; grep Revision /proc/cpuinfo", function (error, stdout) { exec("grep Hardware /proc/cpuinfo; grep Serial /proc/cpuinfo; grep Revision /proc/cpuinfo", function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
if (line.indexOf(':') != -1) { if (line.indexOf(':') !== -1) {
if (line.toLowerCase().indexOf('hardware') != -1) result.model = line.split(':')[1].trim(); if (line.toLowerCase().indexOf('hardware') !== -1) result.model = line.split(':')[1].trim();
if (line.toLowerCase().indexOf('revision') != -1) result.version = line.split(':')[1].trim(); if (line.toLowerCase().indexOf('revision') !== -1) result.version = line.split(':')[1].trim();
if (line.toLowerCase().indexOf('serial') != -1) result.serial = line.split(':')[1].trim(); if (line.toLowerCase().indexOf('serial') !== -1) result.serial = line.split(':')[1].trim();
} }
}); });
if (result.model == 'BCM2709') { if (result.model === 'BCM2709') {
result.manufacturer = 'Raspberry Pi Foundation'; result.manufacturer = 'Raspberry Pi Foundation';
result.model = result.model + ' - Pi 2 Model B'; result.model = result.model + ' - Pi 2 Model B';
if (['a01041', 'a21041'].indexOf(result.version) >= 0) { if (['a01041', 'a21041'].indexOf(result.version) >= 0) {
result.version = result.version + ' - Rev. 1.1' result.version = result.version + ' - Rev. 1.1'
} }
} }
if (result.model == 'BCM2708') { if (result.model === 'BCM2708') {
result.manufacturer = 'Raspberry Pi Foundation'; result.manufacturer = 'Raspberry Pi Foundation';
if (['0002', '0003'].indexOf(result.version) >= 0) { if (['0002', '0003'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B'; result.model = result.model + ' - Pi Model B';
@ -130,12 +130,12 @@ module.exports = function (callback) {
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
lines.forEach(function (line) { lines.forEach(function (line) {
line = line.replace(/[<>"]/g, ""); line = line.replace(/[<>"]/g, "");
if (line.indexOf('=') != -1) { if (line.indexOf('=') !== -1) {
if (line.toLowerCase().indexOf('manufacturer') != -1) result.manufacturer = line.split('=')[1].trim(); if (line.toLowerCase().indexOf('manufacturer') !== -1) result.manufacturer = line.split('=')[1].trim();
if (line.toLowerCase().indexOf('model') != -1) result.model = line.split('=')[1].trim(); if (line.toLowerCase().indexOf('model') !== -1) result.model = line.split('=')[1].trim();
if (line.toLowerCase().indexOf('version') != -1) result.version = line.split('=')[1].trim(); if (line.toLowerCase().indexOf('version') !== -1) result.version = line.split('=')[1].trim();
if (line.toLowerCase().indexOf('ioplatformserialnumber') != -1) result.serial = line.split('=')[1].trim(); if (line.toLowerCase().indexOf('ioplatformserialnumber') !== -1) result.serial = line.split('=')[1].trim();
if (line.toLowerCase().indexOf('ioplatformuuid') != -1) result.uuid = line.split('=')[1].trim(); if (line.toLowerCase().indexOf('ioplatformuuid') !== -1) result.uuid = line.split('=')[1].trim();
} }
}); });
} }
@ -146,7 +146,7 @@ module.exports = function (callback) {
if (_windows) { if (_windows) {
exec("wmic csproduct get", function (error, stdout) { exec("wmic csproduct get", function (error, stdout) {
if (!error) { if (!error) {
let lines = stdout.split('\r\n').filter(line => line.trim() != '').filter((line, idx) => idx > 0)[0].trim().split(/\s\s+/); let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0)[0].trim().split(/\s\s+/);
result.manufacturer = lines[5]; result.manufacturer = lines[5];
result.model = lines[3]; result.model = lines[3];
result.version = lines[6]; result.version = lines[6];

View File

@ -18,9 +18,9 @@ const util = require('./util');
let _platform = os.type(); let _platform = os.type();
const _linux = (_platform == 'Linux'); const _linux = (_platform === 'Linux');
const _darwin = (_platform == 'Darwin'); const _darwin = (_platform === 'Darwin');
const _windows = (_platform == 'Windows_NT'); const _windows = (_platform === 'Windows_NT');
const NOT_SUPPORTED = 'not supported'; const NOT_SUPPORTED = 'not supported';
// -------------------------- // --------------------------
@ -38,7 +38,7 @@ function parseUsers1(lines) {
let is_whopart = true; let is_whopart = true;
lines.forEach(function (line) { lines.forEach(function (line) {
if (line == '---') { if (line === '---') {
is_whopart = false; is_whopart = false;
} else { } else {
let l = line.replace(/ +/g, " ").split(' '); let l = line.replace(/ +/g, " ").split(' ');
@ -69,9 +69,9 @@ function parseUsers1(lines) {
result_w.command = line.substring(w_pos[7], 1000).trim(); result_w.command = line.substring(w_pos[7], 1000).trim();
// find corresponding 'who' line // find corresponding 'who' line
who_line = result_who.filter(function (obj) { who_line = result_who.filter(function (obj) {
return (obj.user.substring(0, 8).trim() == result_w.user && obj.tty == result_w.tty) return (obj.user.substring(0, 8).trim() === result_w.user && obj.tty === result_w.tty)
}); });
if (who_line.length == 1) { if (who_line.length === 1) {
result.push({ result.push({
user: who_line[0].user, user: who_line[0].user,
tty: who_line[0].tty, tty: who_line[0].tty,
@ -96,7 +96,7 @@ function parseUsers2(lines) {
let is_whopart = true; let is_whopart = true;
lines.forEach(function (line) { lines.forEach(function (line) {
if (line == '---') { if (line === '---') {
is_whopart = false; is_whopart = false;
} else { } else {
let l = line.replace(/ +/g, " ").split(' '); let l = line.replace(/ +/g, " ").split(' ');
@ -114,13 +114,13 @@ function parseUsers2(lines) {
// split by w_pos // split by w_pos
result_w.user = l[0]; result_w.user = l[0];
result_w.tty = l[1]; result_w.tty = l[1];
result_w.ip = (l[2] != '-') ? l[2] : ''; result_w.ip = (l[2] !== '-') ? l[2] : '';
result_w.command = l.slice(5, 1000).join(' '); result_w.command = l.slice(5, 1000).join(' ');
// find corresponding 'who' line // find corresponding 'who' line
who_line = result_who.filter(function (obj) { who_line = result_who.filter(function (obj) {
return (obj.user == result_w.user && (obj.tty.substring(3, 1000) == result_w.tty || obj.tty == result_w.tty)) return (obj.user === result_w.user && (obj.tty.substring(3, 1000) === result_w.tty || obj.tty === result_w.tty))
}); });
if (who_line.length == 1) { if (who_line.length === 1) {
result.push({ result.push({
user: who_line[0].user, user: who_line[0].user,
tty: who_line[0].tty, tty: who_line[0].tty,
@ -155,7 +155,7 @@ function users(callback) {
// lines / split // lines / split
let lines = stdout.toString().split('\n'); let lines = stdout.toString().split('\n');
result = parseUsers1(lines); result = parseUsers1(lines);
if (result.length == 0) { if (result.length === 0) {
exec("who; echo '---'; w | tail -n +2", function (error, stdout) { exec("who; echo '---'; w | tail -n +2", function (error, stdout) {
if (!error) { if (!error) {
// lines / split // lines / split

View File

@ -51,7 +51,7 @@ function sortByKey(array, keys) {
} }
function cores() { function cores() {
if (_cores == 0) { if (_cores === 0) {
_cores = os.cpus().length; _cores = os.cpus().length;
} }
return _cores; return _cores;