From 5f000fba3a69f9e4084697470adfa8313e4d1fbe Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sun, 23 Apr 2017 14:36:41 +0200 Subject: [PATCH] fixed bugs fsSize(win), si.processes (command), si.osinfo(win) --- CHANGELOG.md | 1 + README.md | 14 ++++---- lib/battery.js | 18 +++++------ lib/cpu.js | 58 ++++++++++++++++----------------- lib/docker.js | 8 ++--- lib/filesystem.js | 70 ++++++++++++++++++++-------------------- lib/graphics.js | 66 +++++++++++++++++++------------------- lib/index.js | 3 +- lib/internet.js | 8 ++--- lib/memory.js | 12 +++---- lib/network.js | 22 ++++++------- lib/osinfo.js | 69 +++++++++++++++++++-------------------- lib/processes.js | 82 ++++++++++++++++++++++++++++++----------------- lib/system.js | 54 +++++++++++++++---------------- lib/users.js | 22 ++++++------- lib/util.js | 2 +- 16 files changed, 269 insertions(+), 240 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18fb591..07ca6ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -94,6 +94,7 @@ Other changes | 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.16.0 | 2017-01-19 | blockDevices: added removable attribute + fix | | 3.15.1 | 2017-01-17 | minor cpuTemperature fix (OSX) | diff --git a/README.md b/README.md index d9fe6a2..bd26323 100644 --- a/README.md +++ b/README.md @@ -44,8 +44,8 @@ si.cpu() - Version 3.17.0: windows support for some very first functions (work in progress) - Version 3.16.0: `blockDevices`: added removable attribute -- 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.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.13.0: added `shell` (returns standard shell) - 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). @@ -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 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). -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! 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 | | - ...[0].pid | X | X | | process PID | | - ...[0].pcpu | X | X | | process % CPU usage | -| - ...[0].pcpuu | X | X | | process % CPU usage (user) | -| - ...[0].pcpus | X | X | | process % CPU usage (system) | +| - ...[0].pcpuu | X | | | process % CPU usage (user) | +| - ...[0].pcpus | X | | | process % CPU usage (system) | | - ...[0].pmem | X | X | | process memory % | | - ...[0].priority | X | X | | process priotity | | - ...[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].state | X | X | | process state (e.g. sleeping) | | - ...[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 | | - proc | X | X | | process name | | - pid | X | X | | PID | @@ -402,7 +404,7 @@ Written by Sebastian Hildebrandt [sebhildebrandt](https://github.com/sebhildebra OSX Temperature: Credits here are going to: - 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 diff --git a/lib/battery.js b/lib/battery.js index fff2f06..be546e9 100644 --- a/lib/battery.js +++ b/lib/battery.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; module.exports = function (callback) { @@ -54,7 +54,7 @@ module.exports = function (callback) { exec("cat " + battery_path + "status", function (error, stdout) { if (!error) { 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) { if (!error) { @@ -91,11 +91,11 @@ module.exports = function (callback) { if (!error) { let lines = stdout.toString().replace(/ +/g, "").replace(/"+/g, "").split('\n'); lines.forEach(function (line) { - if (line.indexOf('=') != -1) { - 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('maxcapacity') != -1) result.maxcapacity = parseFloat(line.split('=')[1].trim()); - if (line.toLowerCase().indexOf('currentcapacity') != -1) result.currentcapacity = parseFloat(line.split('=')[1].trim()); + if (line.indexOf('=') !== -1) { + 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('maxcapacity') !== -1) result.maxcapacity = parseFloat(line.split('=')[1].trim()); + if (line.toLowerCase().indexOf('currentcapacity') !== -1) result.currentcapacity = parseFloat(line.split('=')[1].trim()); } }); } diff --git a/lib/cpu.js b/lib/cpu.js index 7124edf..90273ec 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; let _cpu_speed = '0.00'; @@ -89,9 +89,9 @@ function getCpu() { let line = lines[0].split(':')[1]; result.brand = line.split('@')[0].trim(); 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(); - if (current != '0.00') result.speed = current; + if (current !== '0.00') result.speed = current; } _cpu_speed = result.speed; } @@ -102,7 +102,7 @@ function getCpu() { if (_windows) { exec("wmic cpu get name", function (error, stdout) { 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] : ''; result.brand = line.split('@')[0].trim(); result.speed = line.split('@')[1].trim(); @@ -172,7 +172,7 @@ function cpuCurrentspeed(callback) { return new Promise((resolve) => { process.nextTick(() => { 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) } resolve(result); @@ -202,10 +202,10 @@ function cpuTemperature(callback) { lines.forEach(function (line) { let regex = /\+([^°]*)/g; 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); } - if (line.split(':')[0].toUpperCase().indexOf('CORE ') != -1) { + if (line.split(':')[0].toUpperCase().indexOf('CORE ') !== -1) { result.cores.push(parseFloat(temps)); } }); @@ -217,7 +217,7 @@ function cpuTemperature(callback) { resolve(result); } else { 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) { if (!error) { let lines = stdout.toString().split('\n'); @@ -255,7 +255,7 @@ function cpuTemperature(callback) { let id = 0; cores.forEach(function(key) { let value = smc.get(key); - if (id == 0) { + if (id === 0) { if (value > 0) { result.main = value; result.max = value; @@ -323,7 +323,7 @@ function cpuFlags(callback) { if (!error) { let lines = stdout.toString().split('\n'); 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(); } }); @@ -336,7 +336,7 @@ function cpuFlags(callback) { exec("sysctl machdep.cpu.features", function (error, stdout) { if (!error) { 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(); } } @@ -370,17 +370,17 @@ function cpuCache(callback) { let lines = stdout.toString().split('\n'); lines.forEach(function (line) { let parts = line.split(':'); - if (parts[0].toUpperCase().indexOf('L1D CACHE') != -1) { - result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toUpperCase().indexOf('L1D CACHE') !== -1) { + result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); } - if (parts[0].toUpperCase().indexOf('L1I CACHE') != -1) { - result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toUpperCase().indexOf('L1I CACHE') !== -1) { + result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); } - if (parts[0].toUpperCase().indexOf('L2 CACHE') != -1) { - result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toUpperCase().indexOf('L2 CACHE') !== -1) { + result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); } - if (parts[0].toUpperCase().indexOf('L3 CACHE') != -1) { - result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toUpperCase().indexOf('L3 CACHE') !== -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'); lines.forEach(function (line) { let parts = line.split(':'); - if (parts[0].toLowerCase().indexOf('hw.l1icachesize') != -1) { - result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toLowerCase().indexOf('hw.l1icachesize') !== -1) { + result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); } - if (parts[0].toLowerCase().indexOf('hw.l1dcachesize') != -1) { - result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toLowerCase().indexOf('hw.l1dcachesize') !== -1) { + result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); } - if (parts[0].toLowerCase().indexOf('hw.l2cachesize') != -1) { - result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toLowerCase().indexOf('hw.l2cachesize') !== -1) { + result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); } - if (parts[0].toLowerCase().indexOf('hw.l3cachesize') != -1) { - result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') != -1 ? 1024 : 1); + if (parts[0].toLowerCase().indexOf('hw.l3cachesize') !== -1) { + result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); } }); } diff --git a/lib/docker.js b/lib/docker.js index 1360582..5a17414 100644 --- a/lib/docker.js +++ b/lib/docker.js @@ -18,7 +18,7 @@ const DockerSocket = require('./dockerSocket'); let _platform = os.type(); -const _windows = (_platform == 'Windows_NT'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; let _docker_container_stats = {}; @@ -192,10 +192,10 @@ function docker_calcBlockIO(blkio_stats) { * @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; } - if (element.op && element.op.toLowerCase() == 'write' && element.value) { + if (element.op && element.op.toLowerCase() === 'write' && element.value) { result.w += element.value; } }) @@ -395,7 +395,7 @@ function dockerAll(callback) { element.processes = processes; l -= 1; - if (l == 0) { + if (l === 0) { if (callback) { callback(result) } resolve(result); } diff --git a/lib/filesystem.js b/lib/filesystem.js index 08e7ec4..b9ed3d0 100644 --- a/lib/filesystem.js +++ b/lib/filesystem.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; let _fs_speed = {}; @@ -34,15 +34,15 @@ function fsSize(callback) { return new Promise((resolve, reject) => { process.nextTick(() => { + let data = []; if (_linux || _darwin) { let cmd = (_darwin ? "df -lkP | grep ^/" : "df -lkPT | grep ^/"); exec(cmd, function (error, stdout) { - let data = []; if (!error) { let lines = stdout.toString().split('\n'); //lines.splice(0, 1); lines.forEach(function (line) { - if (line != '') { + if (line !== '') { line = line.replace(/ +/g, " ").split(' '); data.push({ 'fs': line[0], @@ -63,9 +63,9 @@ function fsSize(callback) { } if (_windows) { 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) { - if (line != '') { + if (line !== '') { line = line.trim().split(/\s\s+/); data.push({ 'fs': line[0], @@ -101,7 +101,7 @@ function parseDevices(lines) { let i = 0; lines.forEach(line => { if (line.length > 0) { - if (line[0] == '*') { + if (line[0] === '*') { i++; } else { let parts = line.split(':'); @@ -123,22 +123,22 @@ function parseDevices(lines) { }; parts[0] = parts[0].trim().toUpperCase().replace(/ +/g, ''); parts[1] = parts[1].trim(); - if ('DEVICEIDENTIFIER' == parts[0]) devices[i].identifier = parts[1]; - if ('DEVICENODE' == parts[0]) devices[i].name = parts[1]; - if ('VOLUMENAME' == parts[0]) { - if (parts[1].indexOf('Not applicable') == -1) devices[i].label = parts[1]; + if ('DEVICEIDENTIFIER' === parts[0]) devices[i].identifier = parts[1]; + if ('DEVICENODE' === parts[0]) devices[i].name = parts[1]; + if ('VOLUMENAME' === parts[0]) { + if (parts[1].indexOf('Not applicable') === -1) devices[i].label = parts[1]; } - if ('PROTOCOL' == parts[0]) devices[i].protocol = parts[1]; - if ('DISKSIZE' == parts[0]) devices[i].size = parseBytes(parts[1]); - if ('FILESYSTEMPERSONALITY' == parts[0]) devices[i].fstype = parts[1]; - if ('MOUNTPOINT' == parts[0]) devices[i].mount = 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 ('SOLIDSTATE' == parts[0] && parts[1] == 'Yes') devices[i].physical = 'SSD'; - if ('VIRTUAL' == parts[0]) devices[i].type = 'virtual'; - if ('REMOVABLEMEDIA' == parts[0]) devices[i].removable = (parts[1] == 'Removable'); - if ('PARTITIONTYPE' == parts[0]) devices[i].type = 'part'; - if ('DEVICE/MEDIANAME' == parts[0]) devices[i].model = parts[1]; + if ('PROTOCOL' === parts[0]) devices[i].protocol = parts[1]; + if ('DISKSIZE' === parts[0]) devices[i].size = parseBytes(parts[1]); + if ('FILESYSTEMPERSONALITY' === parts[0]) devices[i].fstype = parts[1]; + if ('MOUNTPOINT' === parts[0]) devices[i].mount = 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 ('SOLIDSTATE' === parts[0] && parts[1] === 'Yes') devices[i].physical = 'SSD'; + if ('VIRTUAL' === parts[0]) devices[i].type = 'virtual'; + if ('REMOVABLEMEDIA' === parts[0]) devices[i].removable = (parts[1] === 'Removable'); + if ('PARTITIONTYPE' === parts[0]) devices[i].type = 'part'; + if ('DEVICE/MEDIANAME' === parts[0]) devices[i].model = parts[1]; } } } @@ -149,7 +149,7 @@ function parseDevices(lines) { function parseBlk(lines) { let data = []; - lines.filter(line => line != '').forEach((line) => { + lines.filter(line => line !== '').forEach((line) => { let disk = JSON.parse(line); data.push({ 'name': disk.name, @@ -157,12 +157,12 @@ function parseBlk(lines) { 'fstype': disk.fstype, 'mount': disk.mountpoint, '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, 'label': disk.label, 'model': disk.model, 'serial': disk.serial, - 'removable': disk.rm == '1', + 'removable': disk.rm === '1', 'protocol': disk.tran }) }); @@ -238,9 +238,9 @@ function blockDevices(callback) { if (_windows) { exec('wmic logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /format:csv', function (error, stdout) { 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) { - if (line != '') { + if (line !== '') { line = line.replace('\r', '').split(','); data.push({ name: line[7], @@ -249,12 +249,12 @@ function blockDevices(callback) { fstype: line[5].toLowerCase(), mount: line[1], size: line[8], - physical: line[4] == '5' ? 'CD/DVD' : 'HDD', + physical: line[4] === '5' ? 'CD/DVD' : 'HDD', uuid: line[10], label: line[9], model: '', serial: line[10], - removable: line[4] == '2', + removable: line[4] === '2', protocol: '' }); } @@ -350,9 +350,9 @@ function fsStats(callback) { let lines = stdout.toString().split('\n'); let fs_filter = []; lines.forEach(function (line) { - if (line != '') { + if (line !== '') { 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'); lines.forEach(function (line) { line = line.trim(); - if (line != '') { + if (line !== '') { line = line.replace(/ +/g, " ").split(' '); rx += parseInt(line[5]) * 512; @@ -390,7 +390,7 @@ function fsStats(callback) { let lines = stdout.toString().split('\n'); lines.forEach(function (line) { line = line.trim(); - if (line != '') { + if (line !== '') { line = line.split(' '); rx += parseInt(line[0]); @@ -527,7 +527,7 @@ function disksIO(callback) { let lines = stdout.toString().split('\n'); lines.forEach(function (line) { line = line.trim(); - if (line != '') { + if (line !== '') { line = line.split(' '); rIO += parseInt(line[1]); diff --git a/lib/graphics.js b/lib/graphics.js index c019d8b..3ee111e 100644 --- a/lib/graphics.js +++ b/lib/graphics.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; function graphics(callback) { @@ -35,9 +35,9 @@ function graphics(callback) { let currentController = {}; let currentDisplay = {}; for (let i = 0; i < lines.length; i++) { - if ('' != lines[i].trim()) { + if ('' !== lines[i].trim()) { let start = lines[i].search(/\S|$/); - if (-1 == starts.indexOf(start)) { + if (-1 === starts.indexOf(start)) { starts.push(start); } level = starts.indexOf(start); @@ -53,21 +53,21 @@ function graphics(callback) { } lastlevel = level; let parts = lines[i].split(':'); - 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('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('vram(total)') != -1) { + 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('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('vram(total)') !== -1) { currentController.vram = parseInt(parts[1]); // in MB 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.vramDynamic = true; } } - if (3 == level) { // display controller level - if (parts.length > 1 && '' == parts[1]) { + if (3 === level) { // display controller level + if (parts.length > 1 && '' === parts[1]) { currentDisplay.model = parts[0].trim(); currentDisplay.main = false; currentDisplay.builtin = false; @@ -76,19 +76,19 @@ function graphics(callback) { currentDisplay.sizey = -1; } } - if (4 == level) { // display controller details level - if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('resolution') != -1) { + if (4 === level) { // display controller details level + if (parts.length > 1 && parts[0].replace(/ +/g, "").toLowerCase().indexOf('resolution') !== -1) { let resolution = parts[1].split('x'); currentDisplay.resolutionx = (resolution.length > 1 ? parseInt(resolution[0]) : 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('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('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('built-in') !== -1 && parts[1].replace(/ +/g, "").toLowerCase() === 'yes') { currentDisplay.builtin = true; 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.connection = parts[1].trim(); } @@ -112,10 +112,10 @@ function graphics(callback) { let currentController = {}; let is_vga = false; for (let i = 0; i < lines.length; i++) { - if ('' != lines[i].trim()) { - if (' ' != lines[i][0] && '\t' != lines[i][0]) { // first line of new entry + if ('' !== lines[i].trim()) { + if (' ' !== lines[i][0] && '\t' !== lines[i][0]) { // first line of new entry 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 controllers.push(currentController); currentController = {}; @@ -140,8 +140,8 @@ function graphics(callback) { } if (is_vga) { // within VGA details 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('region') != -1 && parts[1].toLowerCase().indexOf('memory') != -1) { + 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) { let memparts = parts[1].split("="); if (memparts.length > 1) { currentController.vram = parseInt(memparts[1]); @@ -168,16 +168,16 @@ function graphics(callback) { let result = {}; // find first "Detailed Timing Description" let start = 108; - if (edid.substr(start, 6) == '000000') { + if (edid.substr(start, 6) === '000000') { start += 36; } - if (edid.substr(start, 6) == '000000') { + if (edid.substr(start, 6) === '000000') { start += 36; } - if (edid.substr(start, 6) == '000000') { + if (edid.substr(start, 6) === '000000') { start += 36; } - if (edid.substr(start, 6) == '000000') { + if (edid.substr(start, 6) === '000000') { start += 36; } 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" if (start >= 0) { 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')) } result.model = model_raw.match(/.{1,2}/g).map(function (v) { @@ -207,15 +207,15 @@ function graphics(callback) { let edid_raw = ''; let start = 0; for (let i = 1; i < lines.length; i++) { // start with second line - 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].trim()) { + 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 displays.push(currentDisplay); currentDisplay = {}; } let parts = lines[i].split(' '); currentDisplay.connection = parts[0]; - currentDisplay.main = (parts[2] == 'primary'); + currentDisplay.main = (parts[2] === 'primary'); currentDisplay.builtin = (parts[0].toLowerCase().indexOf('edp') >= 0) } @@ -235,7 +235,7 @@ function graphics(callback) { is_edid = false; } } - if (lines[i].toLowerCase().indexOf('edid:') != -1) { + if (lines[i].toLowerCase().indexOf('edid:') !== -1) { is_edid = true; start = lines[i].search(/\S|$/); } diff --git a/lib/index.js b/lib/index.js index 8318ed8..d01e725 100644 --- a/lib/index.js +++ b/lib/index.js @@ -82,6 +82,7 @@ // -------------------------------- // // 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.16.0 2017-01-19 blockDevices: added removable attribute + fix // 3.15.1 2017-01-17 minor cpuTemperature fix (OSX) @@ -158,7 +159,7 @@ const internet = require('./internet'); const docker = require('./docker'); let _platform = os.type(); -let _windows = (_platform == 'Windows_NT'); +let _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; diff --git a/lib/internet.js b/lib/internet.js index 3fe9b0e..cbad25c 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -18,9 +18,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; // -------------------------- @@ -49,7 +49,7 @@ function inetChecksite(url, callback) { exec(cmd + args, function (error, stdout) { let statusCode = parseInt(stdout.toString()); 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); if (callback) { callback(result) } resolve(result); diff --git a/lib/memory.js b/lib/memory.js index b586839..7d01d1a 100644 --- a/lib/memory.js +++ b/lib/memory.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; // _______________________________________________________________________________________ @@ -138,9 +138,9 @@ module.exports = function (callback) { let line = lines[0].replace(/,/g, ".").replace(/M/g, ""); line = line.trim().split(' '); 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('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('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('free') !== -1) result.swapfree = parseFloat(line[i].split('=')[1].trim()) * 1024 * 1024; } } diff --git a/lib/network.js b/lib/network.js index f3a45c9..4108326 100644 --- a/lib/network.js +++ b/lib/network.js @@ -20,9 +20,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; let _network = {}; @@ -44,7 +44,7 @@ function getDefaultNetworkInterface() { for (let dev in ifaces) { if (ifaces.hasOwnProperty(dev)) { ifaces[dev].forEach(function (details) { - if (details && details.internal == false) { + if (details && details.internal === false) { ifacename = ifacename || dev; } }) @@ -93,10 +93,10 @@ function networkInterfaces(callback) { let mac = ''; if (ifaces.hasOwnProperty(dev)) { ifaces[dev].forEach(function (details) { - if (details.family == 'IPv4') { + if (details.family === 'IPv4') { ip4 = details.address } - if (details.family == 'IPv6') { + if (details.family === 'IPv6') { ip6 = details.address } mac = details.mac @@ -217,13 +217,13 @@ function networkStats(iface, callback) { exec(cmd, function (error, stdout) { result.operstate = (stdout.toString().split(':')[1] || '').trim(); 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; exec(cmd, function (error, stdout) { if (!error) { lines = stdout.toString().split('\n'); // 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 // use the second line because it is tied to the NIC instead of the ipv4 or ipv6 address stats = lines[1].replace(/ +/g, " ").split(' '); @@ -292,7 +292,7 @@ function networkConnections(callback) { peerip = peeraddress.join(':'); } let connstate = line[5]; - if (connstate == 'VERBUNDEN') connstate = 'ESTABLISHED'; + if (connstate === 'VERBUNDEN') connstate = 'ESTABLISHED'; if (connstate) { result.push({ protocol: line[0], @@ -335,8 +335,8 @@ function networkConnections(callback) { peerip = peeraddress.join(':'); } let connstate = line[1]; - if (connstate == 'ESTAB') connstate = 'ESTABLISHED'; - if (connstate == 'TIME-WAIT') connstate = 'TIME_WAIT'; + if (connstate === 'ESTAB') connstate = 'ESTABLISHED'; + if (connstate === 'TIME-WAIT') connstate = 'TIME_WAIT'; if (connstate) { result.push({ protocol: line[0], diff --git a/lib/osinfo.js b/lib/osinfo.js index 5d3d80a..855ecc1 100644 --- a/lib/osinfo.js +++ b/lib/osinfo.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; // -------------------------- @@ -40,90 +40,91 @@ exports.time = time; // Get logo filename of OS distribution function getLogoFile(distro) { + distro = distro || ''; distro = distro.toLowerCase(); let result = 'linux'; if (_windows) { result = 'windows' } - else if (distro.indexOf('mac os') != -1) { + else if (distro.indexOf('mac os') !== -1) { result = 'apple' } - else if (distro.indexOf('arch') != -1) { + else if (distro.indexOf('arch') !== -1) { result = 'arch' } - else if (distro.indexOf('centos') != -1) { + else if (distro.indexOf('centos') !== -1) { result = 'centos' } - else if (distro.indexOf('coreos') != -1) { + else if (distro.indexOf('coreos') !== -1) { result = 'coreos' } - else if (distro.indexOf('debian') != -1) { + else if (distro.indexOf('debian') !== -1) { result = 'debian' } - else if (distro.indexOf('elementary') != -1) { + else if (distro.indexOf('elementary') !== -1) { result = 'elementary' } - else if (distro.indexOf('fedora') != -1) { + else if (distro.indexOf('fedora') !== -1) { result = 'fedora' } - else if (distro.indexOf('gentoo') != -1) { + else if (distro.indexOf('gentoo') !== -1) { result = 'gentoo' } - else if (distro.indexOf('mageia') != -1) { + else if (distro.indexOf('mageia') !== -1) { result = 'mageia' } - else if (distro.indexOf('mandriva') != -1) { + else if (distro.indexOf('mandriva') !== -1) { result = 'mandriva' } - else if (distro.indexOf('manjaro') != -1) { + else if (distro.indexOf('manjaro') !== -1) { result = 'manjaro' } - else if (distro.indexOf('mint') != -1) { + else if (distro.indexOf('mint') !== -1) { result = 'mint' } - else if (distro.indexOf('openbsd') != -1) { + else if (distro.indexOf('openbsd') !== -1) { result = 'openbsd' } - else if (distro.indexOf('opensuse') != -1) { + else if (distro.indexOf('opensuse') !== -1) { result = 'opensuse' } - else if (distro.indexOf('pclinuxos') != -1) { + else if (distro.indexOf('pclinuxos') !== -1) { result = 'pclinuxos' } - else if (distro.indexOf('puppy') != -1) { + else if (distro.indexOf('puppy') !== -1) { result = 'puppy' } - else if (distro.indexOf('raspbian') != -1) { + else if (distro.indexOf('raspbian') !== -1) { result = 'raspbian' } - else if (distro.indexOf('reactos') != -1) { + else if (distro.indexOf('reactos') !== -1) { result = 'reactos' } - else if (distro.indexOf('redhat') != -1) { + else if (distro.indexOf('redhat') !== -1) { result = 'redhat' } - else if (distro.indexOf('slackware') != -1) { + else if (distro.indexOf('slackware') !== -1) { result = 'slackware' } - else if (distro.indexOf('sugar') != -1) { + else if (distro.indexOf('sugar') !== -1) { result = 'sugar' } - else if (distro.indexOf('steam') != -1) { + else if (distro.indexOf('steam') !== -1) { result = 'steam' } - else if (distro.indexOf('suse') != -1) { + else if (distro.indexOf('suse') !== -1) { result = 'suse' } - else if (distro.indexOf('mate') != -1) { + else if (distro.indexOf('mate') !== -1) { result = 'ubuntu-mate' } - else if (distro.indexOf('lubuntu') != -1) { + else if (distro.indexOf('lubuntu') !== -1) { result = 'lubuntu' } - else if (distro.indexOf('xubuntu') != -1) { + else if (distro.indexOf('xubuntu') !== -1) { result = 'xubuntu' } - else if (distro.indexOf('ubuntu') != -1) { + else if (distro.indexOf('ubuntu') !== -1) { result = 'ubuntu' } return result; @@ -138,7 +139,7 @@ function osInfo(callback) { process.nextTick(() => { let result = { - platform: (_platform == 'Windows_NT' ? 'Windows' : _platform), + platform: (_platform === 'Windows_NT' ? 'Windows' : _platform), distro: 'unknown', release: 'unknown', codename: '', @@ -163,7 +164,7 @@ function osInfo(callback) { let release = {}; let lines = stdout.toString().split('\n'); lines.forEach(function (line) { - if (line.indexOf('=') != -1) { + if (line.indexOf('=') !== -1) { release[line.split('=')[0].trim().toUpperCase()] = line.split('=')[1].trim(); } }); @@ -182,11 +183,11 @@ function osInfo(callback) { exec("sw_vers", function (error, stdout) { let lines = stdout.toString().split('\n'); lines.forEach(function (line) { - if (line.indexOf('ProductName') != -1) { + if (line.indexOf('ProductName') !== -1) { result.distro = line.split(':')[1].trim(); 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) { callback(result) diff --git a/lib/processes.js b/lib/processes.js index e7490b2..8a8dcfa 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; let _process_cpu = { @@ -56,13 +56,13 @@ function services(srv, callback) { let srvs = srv.split('|'); let comm = (_darwin) ? "ps -caxm -o pcpu,pmem,comm" : "ps axo pcpu,pmem,comm"; let data = []; - if (srv != '' && srvs.length > 0) { + if (srv !== '' && srvs.length > 0) { exec(comm + " | grep -v grep | egrep '" + srv + "'", function (error, stdout) { if (!error) { let lines = stdout.toString().replace(/ +/g, " ").replace(/,+/g, ".").split('\n'); srvs.forEach(function (srv) { let ps = lines.filter(function (e) { - return e.indexOf(srv) != -1 + return e.indexOf(srv) !== -1 }); data.push({ 'name': srv, @@ -115,7 +115,7 @@ function processes(callback) { let result = []; for (let i = 0; i < head.length; i++) { if (count <= rights) { - if (head[i] == ' ' && !space) { + if (head[i] === ' ' && !space) { to = i - 1; result.push({ from: from, @@ -125,9 +125,9 @@ function processes(callback) { from = to + 2; count++; } - space = head[i] == ' '; + space = head[i] === ' '; } else { - if (head[i] != ' ' && space) { + if (head[i] !== ' ' && space) { to = i - 1; if (from < to) { result.push({ @@ -139,7 +139,7 @@ function processes(callback) { from = to + 1; count++; } - space = head[i] == ' '; + space = head[i] === ' '; } } to = 1000; @@ -153,20 +153,43 @@ function processes(callback) { } function parseLine(line) { - let pid = parseInt(line.substring(parsedhead[0].from, parsedhead[0].to)); - let pcpu = parseFloat(line.substring(parsedhead[1].from, parsedhead[1].to).replace(/,/g, ".")); - let pmem = parseFloat(line.substring(parsedhead[2].from, parsedhead[2].to).replace(/,/g, ".")); - let priority = parseInt(line.substring(parsedhead[3].from, parsedhead[3].to)); - let vsz = parseInt(line.substring(parsedhead[4].from, parsedhead[4].to)); - let rss = parseInt(line.substring(parsedhead[5].from, parsedhead[5].to)); - let nice = parseInt(line.substring(parsedhead[6].from, parsedhead[6].to)); - let started = line.substring(parsedhead[7].from, parsedhead[7].to).trim(); - 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 = ''; - let user = line.substring(parsedhead[10].from, parsedhead[10].to).trim(); - let command = line.substring(parsedhead[11].from, parsedhead[11].to).trim().replace(/\[/g, "").replace(/]/g, ""); + let offset = 0; + let offset2 = 0; + + function checkColumn(i) { + offset = offset2; + offset2 = line.substring(parsedhead[i].to + offset, 1000).indexOf(' ') +// if (line.substring(parsedhead[i].to + offset, parsedhead[i].to + offset + 1) !== ' ') { +// offset2++; +// } + } + + checkColumn(0) + let pid = parseInt(line.substring(parsedhead[0].from + offset, parsedhead[0].to + offset2)); + 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 ({ pid: pid, @@ -190,10 +213,11 @@ function processes(callback) { let result = []; if (lines.length > 1) { let head = lines[0]; - parsedhead = parseHead(head, 7); + parsedhead = parseHead(head, 8); + console.log(parsedhead) lines.shift(); lines.forEach(function (line) { - if (line.trim() != '') { + if (line.trim() !== '') { result.push(parseLine(line)); } }); @@ -287,7 +311,7 @@ function processes(callback) { 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 (_darwin) cmd = "ps acxo pid,pcpu,pmem,pri,vsz,rss,nice,start,state,tty,user,command -r"; exec(cmd, function (error, stdout) { @@ -295,13 +319,13 @@ function processes(callback) { result.list = parseProcesses(stdout.toString().split('\n')); result.all = result.list.length; result.running = result.list.filter(function (e) { - return e.state == 'running' + return e.state === 'running' }).length; result.blocked = result.list.filter(function (e) { - return e.state == 'blocked' + return e.state === 'blocked' }).length; result.sleeping = result.list.filter(function (e) { - return e.state == 'sleeping' + return e.state === 'sleeping' }).length; if (_linux) { diff --git a/lib/system.js b/lib/system.js index 43a2e2b..702534c 100644 --- a/lib/system.js +++ b/lib/system.js @@ -19,9 +19,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; module.exports = function (callback) { @@ -42,39 +42,39 @@ module.exports = function (callback) { if (!error) { let lines = stdout.toString().split('\n'); lines.forEach(function (line) { - if (line.indexOf(':') != -1) { - 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('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('uuid') != -1) result.uuid = line.split(':')[1].trim(); + if (line.indexOf(':') !== -1) { + 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('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('uuid') !== -1) result.uuid = line.split(':')[1].trim(); } }); - if (result.serial.toLowerCase().indexOf('o.e.m.') != -1) result.serial = '-'; - 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.version.toLowerCase().indexOf('o.e.m.') != -1) result.version = '-'; + if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; + 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.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 exec("grep Hardware /proc/cpuinfo; grep Serial /proc/cpuinfo; grep Revision /proc/cpuinfo", function (error, stdout) { if (!error) { let lines = stdout.toString().split('\n'); lines.forEach(function (line) { - if (line.indexOf(':') != -1) { - 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('serial') != -1) result.serial = line.split(':')[1].trim(); + if (line.indexOf(':') !== -1) { + 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('serial') !== -1) result.serial = line.split(':')[1].trim(); } }); - if (result.model == 'BCM2709') { + if (result.model === 'BCM2709') { result.manufacturer = 'Raspberry Pi Foundation'; result.model = result.model + ' - Pi 2 Model B'; if (['a01041', 'a21041'].indexOf(result.version) >= 0) { result.version = result.version + ' - Rev. 1.1' } } - if (result.model == 'BCM2708') { + if (result.model === 'BCM2708') { result.manufacturer = 'Raspberry Pi Foundation'; if (['0002', '0003'].indexOf(result.version) >= 0) { result.model = result.model + ' - Pi Model B'; @@ -130,12 +130,12 @@ module.exports = function (callback) { let lines = stdout.toString().split('\n'); lines.forEach(function (line) { line = line.replace(/[<>"]/g, ""); - if (line.indexOf('=') != -1) { - 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('version') != -1) result.version = 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.indexOf('=') !== -1) { + 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('version') !== -1) result.version = 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(); } }); } @@ -146,7 +146,7 @@ module.exports = function (callback) { if (_windows) { exec("wmic csproduct get", function (error, stdout) { 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.model = lines[3]; result.version = lines[6]; diff --git a/lib/users.js b/lib/users.js index eb69971..6ec19a4 100644 --- a/lib/users.js +++ b/lib/users.js @@ -18,9 +18,9 @@ const util = require('./util'); let _platform = os.type(); -const _linux = (_platform == 'Linux'); -const _darwin = (_platform == 'Darwin'); -const _windows = (_platform == 'Windows_NT'); +const _linux = (_platform === 'Linux'); +const _darwin = (_platform === 'Darwin'); +const _windows = (_platform === 'Windows_NT'); const NOT_SUPPORTED = 'not supported'; // -------------------------- @@ -38,7 +38,7 @@ function parseUsers1(lines) { let is_whopart = true; lines.forEach(function (line) { - if (line == '---') { + if (line === '---') { is_whopart = false; } else { let l = line.replace(/ +/g, " ").split(' '); @@ -69,9 +69,9 @@ function parseUsers1(lines) { result_w.command = line.substring(w_pos[7], 1000).trim(); // find corresponding 'who' line 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({ user: who_line[0].user, tty: who_line[0].tty, @@ -96,7 +96,7 @@ function parseUsers2(lines) { let is_whopart = true; lines.forEach(function (line) { - if (line == '---') { + if (line === '---') { is_whopart = false; } else { let l = line.replace(/ +/g, " ").split(' '); @@ -114,13 +114,13 @@ function parseUsers2(lines) { // split by w_pos result_w.user = l[0]; 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(' '); // find corresponding 'who' line 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({ user: who_line[0].user, tty: who_line[0].tty, @@ -155,7 +155,7 @@ function users(callback) { // lines / split let lines = stdout.toString().split('\n'); result = parseUsers1(lines); - if (result.length == 0) { + if (result.length === 0) { exec("who; echo '---'; w | tail -n +2", function (error, stdout) { if (!error) { // lines / split diff --git a/lib/util.js b/lib/util.js index 3bc4a8a..c069922 100644 --- a/lib/util.js +++ b/lib/util.js @@ -51,7 +51,7 @@ function sortByKey(array, keys) { } function cores() { - if (_cores == 0) { + if (_cores === 0) { _cores = os.cpus().length; } return _cores;