windows exec WMIC in try catch

This commit is contained in:
Sebastian Hildebrandt 2018-05-28 23:01:42 +02:00
parent fe9925ec99
commit 2ae03047ce
12 changed files with 791 additions and 681 deletions

View File

@ -100,6 +100,7 @@ Other changes
| Version | Date | Comment | | Version | Date | Comment |
| -------------- | -------------- | -------- | | -------------- | -------------- | -------- |
| 3.41.4 | 2018-05-28 | windows exec WMIC in try catch |
| 3.41.3 | 2018-05-13 | improved SunOS support `getStaticData()`, `getDynamicData()` | | 3.41.3 | 2018-05-13 | improved SunOS support `getStaticData()`, `getDynamicData()` |
| 3.41.2 | 2018-05-13 | bugfix `system()` and `flags()` Raspberry Pi | | 3.41.2 | 2018-05-13 | bugfix `system()` and `flags()` Raspberry Pi |
| 3.41.1 | 2018-05-11 | updated docs | | 3.41.1 | 2018-05-11 | updated docs |

View File

@ -141,23 +141,28 @@ module.exports = function (callback) {
resolve(result); resolve(result);
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' Path Win32_Battery Get BatteryStatus, DesignCapacity, EstimatedChargeRemaining /value', opts, function (error, stdout) { try {
if (stdout) { exec(util.getWmic() + ' Path Win32_Battery Get BatteryStatus, DesignCapacity, EstimatedChargeRemaining /value', opts, function (error, stdout) {
let lines = stdout.split('\r\n'); if (stdout) {
let status = util.getValue(lines, 'BatteryStatus', '=').trim(); let lines = stdout.split('\r\n');
if (status) { let status = util.getValue(lines, 'BatteryStatus', '=').trim();
status = parseInt(status || '2'); if (status) {
result.hasbattery = true; status = parseInt(status || '2');
result.maxcapacity = parseInt(util.getValue(lines, 'DesignCapacity', '=') || 0); result.hasbattery = true;
result.percent = parseInt(util.getValue(lines, 'EstimatedChargeRemaining', '=') || 0); result.maxcapacity = parseInt(util.getValue(lines, 'DesignCapacity', '=') || 0);
result.currentcapacity = parseInt(result.maxcapacity * result.percent / 100); result.percent = parseInt(util.getValue(lines, 'EstimatedChargeRemaining', '=') || 0);
result.ischarging = (status >= 6 && status <= 9) || (!(status === 3) && !(status === 1) && result.percent < 100); result.currentcapacity = parseInt(result.maxcapacity * result.percent / 100);
result.acconnected = result.ischarging; result.ischarging = (status >= 6 && status <= 9) || (!(status === 3) && !(status === 1) && result.percent < 100);
result.acconnected = result.ischarging;
}
} }
} if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });

View File

@ -306,70 +306,74 @@ function getCpu() {
resolve(result); resolve(result);
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' cpu get name, description, revision, l2cachesize, l3cachesize, manufacturer, currentclockspeed, maxclockspeed /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' cpu get name, description, revision, l2cachesize, l3cachesize, manufacturer, currentclockspeed, maxclockspeed /value', opts, function (error, stdout) {
let lines = stdout.split('\r\n');
let name = util.getValue(lines, 'name', '=') || '';
if (name.indexOf('@') >= 0) {
result.brand = name.split('@')[0].trim();
result.speed = name.split('@')[1].trim();
result.speed = parseFloat(result.speed.replace(/GHz+/g, '').trim()).toFixed(2);
_cpu_speed = result.speed;
} else {
result.brand = name.trim();
result.speed = 0;
}
result = cpuBrandManufacturer(result);
result.revision = util.getValue(lines, 'revision', '=');
result.cache.l1d = 0;
result.cache.l1i = 0;
result.cache.l2 = util.getValue(lines, 'l2cachesize', '=');
result.cache.l3 = util.getValue(lines, 'l3cachesize', '=');
if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2, 10) * 1024; }
if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3, 10) * 1024; }
result.vendor = util.getValue(lines, 'manufacturer', '=');
result.speedmax = Math.round(parseFloat(util.getValue(lines, 'maxclockspeed', '=').replace(/,/g, '.')) / 10.0) / 100;
result.speedmax = result.speedmax ? parseFloat(result.speedmax).toFixed(2) : '';
if (!result.speed && result.brand.indexOf('AMD') > -1) {
result.speed = getAMDSpeed(result.brand);
}
if (!result.speed) {
result.speed = result.speedmax;
}
let description = util.getValue(lines, 'description', '=').split(' ');
for (let i = 0; i < description.length; i++) {
if (description[i].toLowerCase().startsWith('family') && (i+1) < description.length && description[i+1]) {
result.family = description[i+1];
}
if (description[i].toLowerCase().startsWith('model') && (i+1) < description.length && description[i+1]) {
result.model = description[i+1];
}
if (description[i].toLowerCase().startsWith('stepping') && (i+1) < description.length && description[i+1]) {
result.stepping = description[i+1];
}
}
}
exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', 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');
lines.forEach(function (line) { let name = util.getValue(lines, 'name', '=') || '';
if (line !== '') { if (name.indexOf('@') >= 0) {
line = line.trim().split(/\s\s+/); result.brand = name.split('@')[0].trim();
// L1 Instructions result.speed = name.split('@')[1].trim();
if (line[2] === 'L1 Cache' && line[0] === '3') { result.speed = parseFloat(result.speed.replace(/GHz+/g, '').trim()).toFixed(2);
result.cache.l1i = parseInt(line[1], 10); _cpu_speed = result.speed;
} } else {
// L1 Data result.brand = name.trim();
if (line[2] === 'L1 Cache' && line[0] === '4') { result.speed = 0;
result.cache.l1d = parseInt(line[1], 10); }
} result = cpuBrandManufacturer(result);
result.revision = util.getValue(lines, 'revision', '=');
result.cache.l1d = 0;
result.cache.l1i = 0;
result.cache.l2 = util.getValue(lines, 'l2cachesize', '=');
result.cache.l3 = util.getValue(lines, 'l3cachesize', '=');
if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2, 10) * 1024; }
if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3, 10) * 1024; }
result.vendor = util.getValue(lines, 'manufacturer', '=');
result.speedmax = Math.round(parseFloat(util.getValue(lines, 'maxclockspeed', '=').replace(/,/g, '.')) / 10.0) / 100;
result.speedmax = result.speedmax ? parseFloat(result.speedmax).toFixed(2) : '';
if (!result.speed && result.brand.indexOf('AMD') > -1) {
result.speed = getAMDSpeed(result.brand);
}
if (!result.speed) {
result.speed = result.speedmax;
}
let description = util.getValue(lines, 'description', '=').split(' ');
for (let i = 0; i < description.length; i++) {
if (description[i].toLowerCase().startsWith('family') && (i+1) < description.length && description[i+1]) {
result.family = description[i+1];
} }
}); if (description[i].toLowerCase().startsWith('model') && (i+1) < description.length && description[i+1]) {
result.model = description[i+1];
}
if (description[i].toLowerCase().startsWith('stepping') && (i+1) < description.length && description[i+1]) {
result.stepping = description[i+1];
}
}
} }
resolve(result); exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) {
if (!error) {
let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
lines.forEach(function (line) {
if (line !== '') {
line = line.trim().split(/\s\s+/);
// L1 Instructions
if (line[2] === 'L1 Cache' && line[0] === '3') {
result.cache.l1i = parseInt(line[1], 10);
}
// L1 Data
if (line[2] === 'L1 Cache' && line[0] === '4') {
result.cache.l1d = parseInt(line[1], 10);
}
}
});
}
resolve(result);
});
}); });
}); } catch (e) {
resolve(result);
}
} }
}); });
}); });
@ -546,23 +550,28 @@ function cpuTemperature(callback) {
resolve(result); resolve(result);
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature', opts, function (error, stdout) {
let sum = 0; if (!error) {
let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); let sum = 0;
lines.forEach(function (line) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
let value = (parseInt(line) - 2732) / 10; lines.forEach(function (line) {
sum = sum + value; let value = (parseInt(line) - 2732) / 10;
if (value > result.max) result.max = value; sum = sum + value;
result.cores.push(value); if (value > result.max) result.max = value;
}); result.cores.push(value);
if (result.cores.length) { });
result.main = sum / result.cores.length; if (result.cores.length) {
result.main = sum / result.cores.length;
}
} }
} if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });
@ -579,29 +588,34 @@ function cpuFlags(callback) {
process.nextTick(() => { process.nextTick(() => {
let result = ''; let result = '';
if (_windows) { if (_windows) {
exec('reg query "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0" /v FeatureSet', opts, function (error, stdout) { try {
if (!error) { exec('reg query "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0" /v FeatureSet', opts, function (error, stdout) {
let flag_hex = stdout.split('0x').pop().trim(); if (!error) {
let flag_bin_unpadded = parseInt(flag_hex, 16).toString(2); let flag_hex = stdout.split('0x').pop().trim();
let flag_bin = '0'.repeat(32 - flag_bin_unpadded.length) + flag_bin_unpadded; let flag_bin_unpadded = parseInt(flag_hex, 16).toString(2);
// empty flags are the reserved fields in the CPUID feature bit list let flag_bin = '0'.repeat(32 - flag_bin_unpadded.length) + flag_bin_unpadded;
// as found on wikipedia: // empty flags are the reserved fields in the CPUID feature bit list
// https://en.wikipedia.org/wiki/CPUID // as found on wikipedia:
let all_flags = [ // https://en.wikipedia.org/wiki/CPUID
'fpu', 'vme', 'de', 'pse', 'tsc', 'msr', 'pae', 'mce', 'cx8', 'apic', let all_flags = [
'', 'sep', 'mtrr', 'pge', 'mca', 'cmov', 'pat', 'pse-36', 'psn', 'clfsh', 'fpu', 'vme', 'de', 'pse', 'tsc', 'msr', 'pae', 'mce', 'cx8', 'apic',
'', 'ds', 'acpi', 'mmx', 'fxsr', 'sse', 'sse2', 'ss', 'htt', 'tm', 'ia64', 'pbe' '', 'sep', 'mtrr', 'pge', 'mca', 'cmov', 'pat', 'pse-36', 'psn', 'clfsh',
]; '', 'ds', 'acpi', 'mmx', 'fxsr', 'sse', 'sse2', 'ss', 'htt', 'tm', 'ia64', 'pbe'
for (let f = 0; f < all_flags.length; f++) { ];
if (flag_bin[f] === '1' && all_flags[f] !== '') { for (let f = 0; f < all_flags.length; f++) {
result += ' ' + all_flags[f]; if (flag_bin[f] === '1' && all_flags[f] !== '') {
result += ' ' + all_flags[f];
}
} }
result = result.trim();
} }
result = result.trim(); if (callback) { callback(result); }
} resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
if (_linux) { if (_linux) {
exec('lscpu', function (error, stdout) { exec('lscpu', function (error, stdout) {
@ -764,37 +778,42 @@ function cpuCache(callback) {
resolve(result); resolve(result);
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' cpu get l2cachesize, l3cachesize /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' cpu get l2cachesize, l3cachesize /value', opts, function (error, stdout) {
let lines = stdout.split('\r\n');
result.l1d = 0;
result.l1i = 0;
result.l2 = util.getValue(lines, 'l2cachesize', '=');
result.l3 = util.getValue(lines, 'l3cachesize', '=');
if (result.l2) { result.l2 = parseInt(result.l2) * 1024; }
if (result.l3) { result.l3 = parseInt(result.l3) * 1024; }
}
exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', 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');
lines.forEach(function (line) { result.l1d = 0;
if (line !== '') { result.l1i = 0;
line = line.trim().split(/\s\s+/); result.l2 = util.getValue(lines, 'l2cachesize', '=');
// L1 Instructions result.l3 = util.getValue(lines, 'l3cachesize', '=');
if (line[2] === 'L1 Cache' && line[0] === '3') { if (result.l2) { result.l2 = parseInt(result.l2) * 1024; }
result.l1i = parseInt(line[1], 10); if (result.l3) { result.l3 = parseInt(result.l3) * 1024; }
}
// L1 Data
if (line[2] === 'L1 Cache' && line[0] === '4') {
result.l1d = parseInt(line[1], 10);
}
}
});
} }
if (callback) { callback(result); } exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) {
resolve(result); if (!error) {
let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
lines.forEach(function (line) {
if (line !== '') {
line = line.trim().split(/\s\s+/);
// L1 Instructions
if (line[2] === 'L1 Cache' && line[0] === '3') {
result.l1i = parseInt(line[1], 10);
}
// L1 Data
if (line[2] === 'L1 Cache' && line[0] === '4') {
result.l1d = parseInt(line[1], 10);
}
}
});
}
if (callback) { callback(result); }
resolve(result);
});
}); });
}); } catch (e) {
if (callback) { callback(result); }
resolve(result);
}
} }
}); });
}); });

View File

@ -78,26 +78,31 @@ function fsSize(callback) {
resolve(data); resolve(data);
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' logicaldisk get Caption,FileSystem,FreeSpace,Size', opts, function (error, stdout) { try {
let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); exec(util.getWmic() + ' logicaldisk get Caption,FileSystem,FreeSpace,Size', opts, function (error, stdout) {
lines.forEach(function (line) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
if (line !== '') { lines.forEach(function (line) {
line = line.trim().split(/\s\s+/); if (line !== '') {
data.push({ line = line.trim().split(/\s\s+/);
'fs': line[0], data.push({
'type': line[1], 'fs': line[0],
'size': line[3], 'type': line[1],
'used': parseInt(line[3]) - parseInt(line[2]), 'size': line[3],
'use': parseFloat((100.0 * (parseInt(line[3]) - parseInt(line[2]))) / parseInt(line[3])), 'used': parseInt(line[3]) - parseInt(line[2]),
'mount': line[0] 'use': parseFloat((100.0 * (parseInt(line[3]) - parseInt(line[2]))) / parseInt(line[3])),
}); 'mount': line[0]
});
}
});
if (callback) {
callback(data);
} }
resolve(data);
}); });
if (callback) { } catch (e) {
callback(data); if (callback) { callback(data); }
}
resolve(data); resolve(data);
}); }
} }
}); });
}); });
@ -167,7 +172,7 @@ function parseBlk(lines) {
lines.filter(line => line !== '').forEach((line) => { lines.filter(line => line !== '').forEach((line) => {
line = util.decodeEscapeSequence(line); line = util.decodeEscapeSequence(line);
line = line.replace(/\\/g,'\\\\'); line = line.replace(/\\/g, '\\\\');
let disk = JSON.parse(line); let disk = JSON.parse(line);
data.push({ data.push({
'name': disk.name, 'name': disk.name,
@ -258,36 +263,42 @@ function blockDevices(callback) {
} }
if (_windows) { if (_windows) {
let drivetypes = ['Unknown', 'NoRoot', 'Removable', 'HDD', 'Network', 'CD/DVD', 'RAM']; let drivetypes = ['Unknown', 'NoRoot', 'Removable', 'HDD', 'Network', 'CD/DVD', 'RAM'];
exec(util.getWmic() + ' logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /value', opts, function (error, stdout) {
let devices = stdout.toString().split(/\n\s*\n/); if (!error) {
devices.forEach(function (device) { let devices = stdout.toString().split(/\n\s*\n/);
let lines = device.split('\r\n'); devices.forEach(function (device) {
let drivetype = util.getValue(lines, 'drivetype', '='); let lines = device.split('\r\n');
if (drivetype) { let drivetype = util.getValue(lines, 'drivetype', '=');
data.push({ if (drivetype) {
name: util.getValue(lines, 'name', '='), data.push({
identifier: util.getValue(lines, 'caption', '='), name: util.getValue(lines, 'name', '='),
type: 'disk', identifier: util.getValue(lines, 'caption', '='),
fstype: util.getValue(lines, 'filesystem', '=').toLowerCase(), type: 'disk',
mount: util.getValue(lines, 'caption', '='), fstype: util.getValue(lines, 'filesystem', '=').toLowerCase(),
size: util.getValue(lines, 'size', '='), mount: util.getValue(lines, 'caption', '='),
physical: (drivetype >= 0 && drivetype <= 6) ? drivetypes[drivetype] : drivetypes[0], size: util.getValue(lines, 'size', '='),
uuid: util.getValue(lines, 'volumeserialnumber', '='), physical: (drivetype >= 0 && drivetype <= 6) ? drivetypes[drivetype] : drivetypes[0],
label: util.getValue(lines, 'volumename', '='), uuid: util.getValue(lines, 'volumeserialnumber', '='),
model: '', label: util.getValue(lines, 'volumename', '='),
serial: util.getValue(lines, 'volumeserialnumber', '='), model: '',
removable: drivetype === '2', serial: util.getValue(lines, 'volumeserialnumber', '='),
protocol: '' removable: drivetype === '2',
}); protocol: ''
} });
}); }
} });
if (callback) { }
callback(data); if (callback) {
} callback(data);
}
resolve(data);
});
} catch (e) {
if (callback) { callback(data); }
resolve(data); resolve(data);
}); }
} }
}); });
}); });
@ -735,38 +746,42 @@ function diskLayout(callback) {
}); });
} }
if (_windows) { if (_windows) {
try {
exec(util.getWmic() + ' diskdrive get /value', {encoding: 'utf8', windowsHide: true}, function (error, stdout) { exec(util.getWmic() + ' diskdrive get /value', { encoding: 'utf8', windowsHide: true }, function (error, stdout) {
if (!error) { if (!error) {
let devices = stdout.toString().split(/\n\s*\n/); let devices = stdout.toString().split(/\n\s*\n/);
devices.forEach(function (device) { devices.forEach(function (device) {
let lines = device.split('\r\n'); let lines = device.split('\r\n');
const size = util.getValue(lines, 'Size', '=').trim(); const size = util.getValue(lines, 'Size', '=').trim();
if (size) { if (size) {
result.push({ result.push({
type: device.indexOf('SSD') > -1 ? 'SSD' : 'HD', // not really correct(!) ... maybe this one is better: MSFT_PhysicalDisk - Media Type?? type: device.indexOf('SSD') > -1 ? 'SSD' : 'HD', // not really correct(!) ... maybe this one is better: MSFT_PhysicalDisk - Media Type??
name: util.getValue(lines, 'Caption', '='), name: util.getValue(lines, 'Caption', '='),
vendor: util.getValue(lines, 'Manufacturer', '='), vendor: util.getValue(lines, 'Manufacturer', '='),
size: parseInt(size), size: parseInt(size),
bytesPerSector: parseInt(util.getValue(lines, 'BytesPerSector', '=')), bytesPerSector: parseInt(util.getValue(lines, 'BytesPerSector', '=')),
totalCylinders: parseInt(util.getValue(lines, 'TotalCylinders', '=')), totalCylinders: parseInt(util.getValue(lines, 'TotalCylinders', '=')),
totalHeads: parseInt(util.getValue(lines, 'TotalHeads', '=')), totalHeads: parseInt(util.getValue(lines, 'TotalHeads', '=')),
totalSectors: parseInt(util.getValue(lines, 'TotalSectors', '=')), totalSectors: parseInt(util.getValue(lines, 'TotalSectors', '=')),
totalTracks: parseInt(util.getValue(lines, 'TotalTracks', '=')), totalTracks: parseInt(util.getValue(lines, 'TotalTracks', '=')),
tracksPerCylinder: parseInt(util.getValue(lines, 'TracksPerCylinder', '=')), tracksPerCylinder: parseInt(util.getValue(lines, 'TracksPerCylinder', '=')),
sectorsPerTrack: parseInt(util.getValue(lines, 'SectorsPerTrack', '=')), sectorsPerTrack: parseInt(util.getValue(lines, 'SectorsPerTrack', '=')),
firmwareRevision: util.getValue(lines, 'FirmwareRevision', '=').trim(), firmwareRevision: util.getValue(lines, 'FirmwareRevision', '=').trim(),
serialNum: util.getValue(lines, 'SerialNumber', '=').trim(), serialNum: util.getValue(lines, 'SerialNumber', '=').trim(),
interfaceType: util.getValue(lines, 'InterfaceType', '=').trim() interfaceType: util.getValue(lines, 'InterfaceType', '=').trim()
}); });
} }
}); });
} }
if (callback) { if (callback) {
callback(result); callback(result);
} }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });

View File

@ -338,33 +338,38 @@ function graphics(callback) {
} }
if (_windows) { if (_windows) {
// https://blogs.technet.microsoft.com/heyscriptingguy/2013/10/03/use-powershell-to-discover-multi-monitor-information/ // https://blogs.technet.microsoft.com/heyscriptingguy/2013/10/03/use-powershell-to-discover-multi-monitor-information/
exec(util.getWmic() + ' path win32_VideoController get AdapterCompatibility, AdapterDACType, name, PNPDeviceID, CurrentVerticalResolution, CurrentHorizontalResolution, CurrentNumberOfColors, AdapterRAM, CurrentBitsPerPixel, CurrentRefreshRate, MinRefreshRate, MaxRefreshRate, VideoMemoryType /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' path win32_VideoController get AdapterCompatibility, AdapterDACType, name, PNPDeviceID, CurrentVerticalResolution, CurrentHorizontalResolution, CurrentNumberOfColors, AdapterRAM, CurrentBitsPerPixel, CurrentRefreshRate, MinRefreshRate, MaxRefreshRate, VideoMemoryType /value', opts, function (error, stdout) {
let csections = stdout.split(/\n\s*\n/); if (!error) {
result.controllers = parseLinesWindowsControllers(csections); let csections = stdout.split(/\n\s*\n/);
exec(util.getWmic() + ' path win32_desktopmonitor get Caption, MonitorManufacturer, MonitorType, ScreenWidth, ScreenHeight /value', opts, function (error, stdout) { result.controllers = parseLinesWindowsControllers(csections);
let dsections = stdout.split(/\n\s*\n/); exec(util.getWmic() + ' path win32_desktopmonitor get Caption, MonitorManufacturer, MonitorType, ScreenWidth, ScreenHeight /value', opts, function (error, stdout) {
if (!error) { let dsections = stdout.split(/\n\s*\n/);
result.displays = parseLinesWindowsDisplays(dsections); if (!error) {
if (result.controllers.length === 1 && result.displays.length === 1) { result.displays = parseLinesWindowsDisplays(dsections);
if (_resolutionx && !result.displays[0].resolutionx) { if (result.controllers.length === 1 && result.displays.length === 1) {
result.displays[0].resolutionx = _resolutionx; if (_resolutionx && !result.displays[0].resolutionx) {
} result.displays[0].resolutionx = _resolutionx;
if (_resolutiony && !result.displays[0].resolutiony) { }
result.displays[0].resolutiony = _resolutiony; if (_resolutiony && !result.displays[0].resolutiony) {
} result.displays[0].resolutiony = _resolutiony;
if (_pixeldepth) { }
result.displays[0].pixeldepth = _pixeldepth; if (_pixeldepth) {
result.displays[0].pixeldepth = _pixeldepth;
}
} }
} }
} if (callback) {
if (callback) { callback(result);
callback(result); }
} resolve(result);
resolve(result); });
}); }
} });
}); } catch (e) {
if (callback) { callback(result); }
resolve(result);
}
} }
}); });
}); });

View File

@ -157,23 +157,28 @@ function inetLatency(host, callback) {
}); });
} }
if (_windows) { if (_windows) {
exec('ping ' + host + ' -n 1', opts, function (error, stdout) { let result = -1;
let result = -1; try {
if (!error) { exec('ping ' + host + ' -n 1', opts, function (error, stdout) {
let lines = stdout.toString().split('\r\n'); if (!error) {
lines.shift(); let lines = stdout.toString().split('\r\n');
lines.forEach(function (line) { lines.shift();
if (line.toLowerCase().startsWith(' min')) { lines.forEach(function (line) {
let l = line.replace(/ +/g, ' ').split(' '); if (line.toLowerCase().startsWith(' min')) {
if (l.length > 8) { let l = line.replace(/ +/g, ' ').split(' ');
result = parseFloat(l[9]); if (l.length > 8) {
result = parseFloat(l[9]);
}
} }
} });
}); }
} if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });

View File

@ -199,24 +199,29 @@ function mem(callback) {
if (_windows) { if (_windows) {
let swaptotal = 0; let swaptotal = 0;
let swapused = 0; let swapused = 0;
exec(util.getWmic() + ' pagefile get AllocatedBaseSize, CurrentUsage', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' pagefile get AllocatedBaseSize, CurrentUsage', opts, function (error, stdout) {
let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); if (!error) {
lines.forEach(function (line) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0);
if (line !== '') { lines.forEach(function (line) {
line = line.trim().split(/\s\s+/); if (line !== '') {
swaptotal = swaptotal + parseInt(line[0], 10); line = line.trim().split(/\s\s+/);
swapused = swapused + parseInt(line[1], 10); swaptotal = swaptotal + parseInt(line[0], 10);
} swapused = swapused + parseInt(line[1], 10);
}); }
} });
result.swaptotal = swaptotal * 1024 * 1024; }
result.swapused = swapused * 1024 * 1024; result.swaptotal = swaptotal * 1024 * 1024;
result.swapfree = result.swaptotal - result.swapused; result.swapused = swapused * 1024 * 1024;
result.swapfree = result.swaptotal - result.swapused;
if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });
@ -228,7 +233,7 @@ function memLayout(callback) {
function getManufacturer(manId) { function getManufacturer(manId) {
if (OSX_RAM_manufacturers.hasOwnProperty(manId)) { if (OSX_RAM_manufacturers.hasOwnProperty(manId)) {
return(OSX_RAM_manufacturers[manId]); return (OSX_RAM_manufacturers[manId]);
} }
return manId; return manId;
} }
@ -247,7 +252,7 @@ function memLayout(callback) {
let lines = device.split('\n'); let lines = device.split('\n');
if (parseInt(util.getValue(lines, 'Size'), 10) > 0) { if (parseInt(util.getValue(lines, 'Size'), 10) > 0) {
result.push({ result.push({
size: parseInt(util.getValue(lines, 'Size'), 10)*1024*1024, size: parseInt(util.getValue(lines, 'Size'), 10) * 1024 * 1024,
bank: util.getValue(lines, 'Bank Locator'), bank: util.getValue(lines, 'Bank Locator'),
type: util.getValue(lines, 'Type:'), type: util.getValue(lines, 'Type:'),
clockSpeed: (util.getValue(lines, 'Configured Clock Speed:') ? parseInt(util.getValue(lines, 'Configured Clock Speed:'), 10) : (util.getValue(lines, 'Speed:') ? parseInt(util.getValue(lines, 'Speed:'), 10) : -1)), clockSpeed: (util.getValue(lines, 'Configured Clock Speed:') ? parseInt(util.getValue(lines, 'Configured Clock Speed:'), 10) : (util.getValue(lines, 'Speed:') ? parseInt(util.getValue(lines, 'Speed:'), 10) : -1)),
@ -332,30 +337,35 @@ function memLayout(callback) {
const memoryTypes = 'Unknown|Other|DRAM|Synchronous DRAM|Cache DRAM|EDO|EDRAM|VRAM|SRAM|RAM|ROM|FLASH|EEPROM|FEPROM|EPROM|CDRAM|3DRAM|SDRAM|SGRAM|RDRAM|DDR|DDR2|DDR2 FB-DIMM|Reserved|DDR3|FBD2|DDR4|LPDDR|LPDDR2|LPDDR3|LPDDR4'.split('|'); const memoryTypes = 'Unknown|Other|DRAM|Synchronous DRAM|Cache DRAM|EDO|EDRAM|VRAM|SRAM|RAM|ROM|FLASH|EEPROM|FEPROM|EPROM|CDRAM|3DRAM|SDRAM|SGRAM|RDRAM|DDR|DDR2|DDR2 FB-DIMM|Reserved|DDR3|FBD2|DDR4|LPDDR|LPDDR2|LPDDR3|LPDDR4'.split('|');
const FormFactors = 'Unknown|Other|SIP|DIP|ZIP|SOJ|Proprietary|SIMM|DIMM|TSOP|PGA|RIMM|SODIMM|SRIMM|SMD|SSMP|QFP|TQFP|SOIC|LCC|PLCC|BGA|FPBGA|LGA'.split('|'); const FormFactors = 'Unknown|Other|SIP|DIP|ZIP|SOJ|Proprietary|SIMM|DIMM|TSOP|PGA|RIMM|SODIMM|SRIMM|SMD|SSMP|QFP|TQFP|SOIC|LCC|PLCC|BGA|FPBGA|LGA'.split('|');
exec(util.getWmic() + ' memorychip get BankLabel, Capacity, ConfiguredClockSpeed, ConfiguredVoltage, MaxVoltage, MinVoltage, DataWidth, FormFactor, Manufacturer, MemoryType, PartNumber, SerialNumber, Speed, Tag /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' memorychip get BankLabel, Capacity, ConfiguredClockSpeed, ConfiguredVoltage, MaxVoltage, MinVoltage, DataWidth, FormFactor, Manufacturer, MemoryType, PartNumber, SerialNumber, Speed, Tag /value', opts, function (error, stdout) {
let devices = stdout.toString().split('BankL'); if (!error) {
devices.shift(); let devices = stdout.toString().split('BankL');
devices.forEach(function (device) { devices.shift();
let lines = device.split('\r\n'); devices.forEach(function (device) {
result.push({ let lines = device.split('\r\n');
size: parseInt(util.getValue(lines, 'Capacity', '='), 10), result.push({
bank: util.getValue(lines, 'abel', '='), // BankLabel size: parseInt(util.getValue(lines, 'Capacity', '='), 10),
type: memoryTypes[parseInt(util.getValue(lines, 'MemoryType', '='), 10)], bank: util.getValue(lines, 'abel', '='), // BankLabel
clockSpeed: parseInt(util.getValue(lines, 'ConfiguredClockSpeed', '='), 10), type: memoryTypes[parseInt(util.getValue(lines, 'MemoryType', '='), 10)],
formFactor: FormFactors[parseInt(util.getValue(lines, 'FormFactor', '='), 10)], clockSpeed: parseInt(util.getValue(lines, 'ConfiguredClockSpeed', '='), 10),
manufacturer: util.getValue(lines, 'Manufacturer', '='), formFactor: FormFactors[parseInt(util.getValue(lines, 'FormFactor', '='), 10)],
partNum: util.getValue(lines, 'PartNumber', '='), manufacturer: util.getValue(lines, 'Manufacturer', '='),
serialNum: util.getValue(lines, 'SerialNumber', '='), partNum: util.getValue(lines, 'PartNumber', '='),
voltageConfigured: parseInt(util.getValue(lines, 'ConfiguredVoltage', '='), 10) / 1000.0, serialNum: util.getValue(lines, 'SerialNumber', '='),
voltageMin: parseInt(util.getValue(lines, 'MinVoltage', '='), 10) / 1000.0, voltageConfigured: parseInt(util.getValue(lines, 'ConfiguredVoltage', '='), 10) / 1000.0,
voltageMax: parseInt(util.getValue(lines, 'MaxVoltage', '='), 10) / 1000.0, voltageMin: parseInt(util.getValue(lines, 'MinVoltage', '='), 10) / 1000.0,
voltageMax: parseInt(util.getValue(lines, 'MaxVoltage', '='), 10) / 1000.0,
});
}); });
}); }
} if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });

View File

@ -366,57 +366,62 @@ function networkStats(iface, callback) {
let perfData = []; let perfData = [];
let nics = []; let nics = [];
cmd = util.getWmic() + ' nic get MACAddress, name, NetEnabled /value'; cmd = util.getWmic() + ' nic get MACAddress, name, NetEnabled /value';
exec(cmd, opts, function (error, stdout) { try {
if (!error) { exec(cmd, opts, function (error, stdout) {
const nsections = stdout.split(/\n\s*\n/); if (!error) {
nics = parseLinesWindowsNics(nsections); const nsections = stdout.split(/\n\s*\n/);
nics = parseLinesWindowsNics(nsections);
// Performance Data // Performance Data
cmd = util.getWmic() + ' path Win32_PerfRawData_Tcpip_NetworkInterface Get name,BytesReceivedPersec,BytesSentPersec,BytesTotalPersec /value'; cmd = util.getWmic() + ' path Win32_PerfRawData_Tcpip_NetworkInterface Get name,BytesReceivedPersec,BytesSentPersec,BytesTotalPersec /value';
exec(cmd, opts, function (error, stdout) { exec(cmd, opts, function (error, stdout) {
if (!error) { if (!error) {
const psections = stdout.split(/\n\s*\n/); const psections = stdout.split(/\n\s*\n/);
perfData = parseLinesWindowsPerfData(psections); perfData = parseLinesWindowsPerfData(psections);
}
// Network Interfaces
networkInterfaces().then(interfaces => {
// get mac from 'interfaces' by interfacename
let mac = '';
interfaces.forEach(detail => {
if (detail.iface === iface) {
mac = detail.mac;
}
});
// get name from 'nics' (by macadress)
let name = '';
nics.forEach(detail => {
if (detail.mac === mac) {
name = detail.name;
operstate = (detail.netEnabled ? 'up' : 'down');
}
});
// get bytes sent, received from perfData by name
rx = 0;
tx = 0;
perfData.forEach(detail => {
if (detail.name === name) {
rx = detail.rx;
tx = detail.tx;
}
});
if (rx && tx) {
result = calcNetworkSpeed(iface, parseInt(rx), parseInt(tx), operstate);
} }
if (callback) { callback(result); }
resolve(result); // Network Interfaces
networkInterfaces().then(interfaces => {
// get mac from 'interfaces' by interfacename
let mac = '';
interfaces.forEach(detail => {
if (detail.iface === iface) {
mac = detail.mac;
}
});
// get name from 'nics' (by macadress)
let name = '';
nics.forEach(detail => {
if (detail.mac === mac) {
name = detail.name;
operstate = (detail.netEnabled ? 'up' : 'down');
}
});
// get bytes sent, received from perfData by name
rx = 0;
tx = 0;
perfData.forEach(detail => {
if (detail.name === name) {
rx = detail.rx;
tx = detail.tx;
}
});
if (rx && tx) {
result = calcNetworkSpeed(iface, parseInt(rx), parseInt(tx), operstate);
}
if (callback) { callback(result); }
resolve(result);
});
}); });
}); }
} });
}); } catch (e) {
if (callback) { callback(result); }
resolve(result);
}
} }
} else { } else {
result.rx = _network[iface].rx; result.rx = _network[iface].rx;
@ -582,59 +587,64 @@ function networkConnections(callback) {
} }
if (_windows) { if (_windows) {
let cmd = 'netstat -na'; let cmd = 'netstat -na';
exec(cmd, opts, function (error, stdout) { try {
if (!error) { exec(cmd, opts, function (error, stdout) {
if (!error) {
let lines = stdout.toString().split('\r\n'); let lines = stdout.toString().split('\r\n');
lines.forEach(function (line) { lines.forEach(function (line) {
line = line.trim().replace(/ +/g, ' ').split(' '); line = line.trim().replace(/ +/g, ' ').split(' ');
if (line.length >= 4) { if (line.length >= 4) {
let localip = line[1]; let localip = line[1];
let localport = ''; let localport = '';
let localaddress = line[1].split(':'); let localaddress = line[1].split(':');
if (localaddress.length > 1) { if (localaddress.length > 1) {
localport = localaddress[localaddress.length - 1]; localport = localaddress[localaddress.length - 1];
localaddress.pop(); localaddress.pop();
localip = localaddress.join(':'); localip = localaddress.join(':');
} }
let peerip = line[2]; let peerip = line[2];
let peerport = ''; let peerport = '';
let peeraddress = line[2].split(':'); let peeraddress = line[2].split(':');
if (peeraddress.length > 1) { if (peeraddress.length > 1) {
peerport = peeraddress[peeraddress.length - 1]; peerport = peeraddress[peeraddress.length - 1];
peeraddress.pop(); peeraddress.pop();
peerip = peeraddress.join(':'); peerip = peeraddress.join(':');
} }
let connstate = line[3]; let connstate = line[3];
if (connstate === 'HERGESTELLT') connstate = 'ESTABLISHED'; if (connstate === 'HERGESTELLT') connstate = 'ESTABLISHED';
if (connstate.startsWith('ABH')) connstate = 'LISTEN'; if (connstate.startsWith('ABH')) connstate = 'LISTEN';
if (connstate === 'SCHLIESSEN_WARTEN') connstate = 'CLOSE_WAIT'; if (connstate === 'SCHLIESSEN_WARTEN') connstate = 'CLOSE_WAIT';
if (connstate === 'WARTEND') connstate = 'TIME_WAIT'; if (connstate === 'WARTEND') connstate = 'TIME_WAIT';
if (connstate === 'SYN_GESENDET') connstate = 'SYN_SENT'; if (connstate === 'SYN_GESENDET') connstate = 'SYN_SENT';
if (connstate === 'LISTENING') connstate = 'LISTEN'; if (connstate === 'LISTENING') connstate = 'LISTEN';
if (connstate === 'SYN_RECEIVED') connstate = 'SYN_RECV'; if (connstate === 'SYN_RECEIVED') connstate = 'SYN_RECV';
if (connstate === 'FIN_WAIT_1') connstate = 'FIN_WAIT1'; if (connstate === 'FIN_WAIT_1') connstate = 'FIN_WAIT1';
if (connstate === 'FIN_WAIT_2') connstate = 'FIN_WAIT2'; if (connstate === 'FIN_WAIT_2') connstate = 'FIN_WAIT2';
if (connstate) { if (connstate) {
result.push({ result.push({
protocol: line[0].toLowerCase(), protocol: line[0].toLowerCase(),
localaddress: localip, localaddress: localip,
localport: localport, localport: localport,
peeraddress: peerip, peeraddress: peerip,
peerport: peerport, peerport: peerport,
state: connstate state: connstate
}); });
}
} }
});
if (callback) {
callback(result);
} }
}); resolve(result);
if (callback) {
callback(result);
} }
resolve(result); });
} } catch (e) {
}); if (callback) { callback(result); }
resolve(result);
}
} }
}); });
}); });

View File

@ -244,13 +244,18 @@ function osInfo(callback) {
if (_windows) { if (_windows) {
result.logofile = getLogoFile(); result.logofile = getLogoFile();
result.release = result.kernel; result.release = result.kernel;
exec(util.getWmic() + ' os get Caption', opts, function (error, stdout) { try {
result.distro = result.codename = stdout.slice(stdout.indexOf('\r\n') + 2).trim(); exec(util.getWmic() + ' os get Caption', opts, function (error, stdout) {
if (callback) { result.distro = result.codename = stdout.slice(stdout.indexOf('\r\n') + 2).trim();
callback(result); if (callback) {
} callback(result);
}
resolve(result);
});
} catch (e) {
if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });
@ -292,95 +297,100 @@ function versions(callback) {
}; };
})(); })();
exec('npm -v', function (error, stdout) { try {
if (!error) { exec('npm -v', function (error, stdout) {
result.npm = stdout.toString().split('\n')[0]; if (!error) {
} result.npm = stdout.toString().split('\n')[0];
functionProcessed();
});
exec('pm2 -v', function (error, stdout) {
if (!error) {
result.pm2 = stdout.toString().split('\n')[0].trim();
}
functionProcessed();
});
exec('yarn --version', function (error, stdout) {
if (!error) {
result.yarn = stdout.toString().split('\n')[0];
}
functionProcessed();
});
exec('gulp --version', function (error, stdout) {
if (!error) {
result.gulp = stdout.toString().split('\n')[0] || '';
result.gulp = (result.gulp.toLowerCase().split('version')[1] || '').trim();
}
functionProcessed();
});
exec('tsc --version', function (error, stdout) {
if (!error) {
result.tsc = stdout.toString().split('\n')[0] || '';
result.tsc = (result.tsc.toLowerCase().split('version')[1] || '').trim();
}
functionProcessed();
});
exec('grunt --version', function (error, stdout) {
if (!error) {
result.grunt = stdout.toString().split('\n')[0] || '';
result.grunt = (result.grunt.toLowerCase().split('cli v')[1] || '').trim();
}
functionProcessed();
});
exec('git --version', function (error, stdout) {
if (!error) {
result.git = stdout.toString().split('\n')[0] || '';
result.git = (result.git.toLowerCase().split('version')[1] || '').trim();
result.git = (result.git.split(' ')[0] || '').trim();
}
functionProcessed();
});
exec('nginx -v', function (error, stdout) {
if (!error) {
result.nginx = stdout.toString().split('\n')[0] || '';
result.nginx = (result.nginx.toLowerCase().split('/')[1] || '').trim();
}
functionProcessed();
});
exec('mysql -V', function (error, stdout) {
if (!error) {
result.mysql = stdout.toString().split('\n')[0] || '';
result.mysql = (result.mysql.toLowerCase().split(',')[0] || '').trim();
const parts = result.mysql.split(' ');
result.mysql = (parts[parts.length - 1] || '').trim();
}
functionProcessed();
});
exec('php -v', function (error, stdout) {
if (!error) {
result.php = stdout.toString().split('\n')[0] || '';
let parts = result.php.split('(');
if (parts[0].indexOf('-')) {
parts = parts[0].split('-');
} }
result.php = parts[0].replace(/[^0-9.]/g, ''); functionProcessed();
} });
functionProcessed(); exec('pm2 -v', function (error, stdout) {
}); if (!error) {
exec('redis-server --version', function (error, stdout) { result.pm2 = stdout.toString().split('\n')[0].trim();
if (!error) { }
result.redis = stdout.toString().split('\n')[0] || ''; functionProcessed();
const parts = result.redis.split(' '); });
result.redis = util.getValue(parts, 'v', '=', true); exec('yarn --version', function (error, stdout) {
} if (!error) {
functionProcessed(); result.yarn = stdout.toString().split('\n')[0];
}); }
exec('mongod --version', function (error, stdout) { functionProcessed();
if (!error) { });
result.mongodb = stdout.toString().split('\n')[0] || ''; exec('gulp --version', function (error, stdout) {
result.mongodb = (result.mongodb.toLowerCase().split(',')[0] || '').replace(/[^0-9.]/g, ''); if (!error) {
} result.gulp = stdout.toString().split('\n')[0] || '';
functionProcessed(); result.gulp = (result.gulp.toLowerCase().split('version')[1] || '').trim();
}); }
functionProcessed();
});
exec('tsc --version', function (error, stdout) {
if (!error) {
result.tsc = stdout.toString().split('\n')[0] || '';
result.tsc = (result.tsc.toLowerCase().split('version')[1] || '').trim();
}
functionProcessed();
});
exec('grunt --version', function (error, stdout) {
if (!error) {
result.grunt = stdout.toString().split('\n')[0] || '';
result.grunt = (result.grunt.toLowerCase().split('cli v')[1] || '').trim();
}
functionProcessed();
});
exec('git --version', function (error, stdout) {
if (!error) {
result.git = stdout.toString().split('\n')[0] || '';
result.git = (result.git.toLowerCase().split('version')[1] || '').trim();
result.git = (result.git.split(' ')[0] || '').trim();
}
functionProcessed();
});
exec('nginx -v', function (error, stdout) {
if (!error) {
result.nginx = stdout.toString().split('\n')[0] || '';
result.nginx = (result.nginx.toLowerCase().split('/')[1] || '').trim();
}
functionProcessed();
});
exec('mysql -V', function (error, stdout) {
if (!error) {
result.mysql = stdout.toString().split('\n')[0] || '';
result.mysql = (result.mysql.toLowerCase().split(',')[0] || '').trim();
const parts = result.mysql.split(' ');
result.mysql = (parts[parts.length - 1] || '').trim();
}
functionProcessed();
});
exec('php -v', function (error, stdout) {
if (!error) {
result.php = stdout.toString().split('\n')[0] || '';
let parts = result.php.split('(');
if (parts[0].indexOf('-')) {
parts = parts[0].split('-');
}
result.php = parts[0].replace(/[^0-9.]/g, '');
}
functionProcessed();
});
exec('redis-server --version', function (error, stdout) {
if (!error) {
result.redis = stdout.toString().split('\n')[0] || '';
const parts = result.redis.split(' ');
result.redis = util.getValue(parts, 'v', '=', true);
}
functionProcessed();
});
exec('mongod --version', function (error, stdout) {
if (!error) {
result.mongodb = stdout.toString().split('\n')[0] || '';
result.mongodb = (result.mongodb.toLowerCase().split(',')[0] || '').replace(/[^0-9.]/g, '');
}
functionProcessed();
});
} catch (e) {
if (callback) { callback(result); }
resolve(result);
}
}); });
}); });
} }

View File

@ -140,52 +140,57 @@ function services(srv, callback) {
} }
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' service get /value', { maxBuffer: 1024 * 1000, windowsHide: true }, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' service get /value', { maxBuffer: 1024 * 1000, windowsHide: true }, function (error, stdout) {
let serviceSections = stdout.split(/\n\s*\n/); if (!error) {
for (let i = 0; i < serviceSections.length; i++) { let serviceSections = stdout.split(/\n\s*\n/);
if (serviceSections[i].trim() !== '') { for (let i = 0; i < serviceSections.length; i++) {
let lines = serviceSections[i].trim().split('\r\n'); if (serviceSections[i].trim() !== '') {
let srv = util.getValue(lines, 'Name', '=', true).toLowerCase(); let lines = serviceSections[i].trim().split('\r\n');
let started = util.getValue(lines, 'Started', '=', true); let srv = util.getValue(lines, 'Name', '=', true).toLowerCase();
if (srvs.indexOf(srv) >= 0) { let started = util.getValue(lines, 'Started', '=', true);
data.push({ if (srvs.indexOf(srv) >= 0) {
'name': srv, data.push({
'running': (started === 'TRUE'), 'name': srv,
'pcpu': 0, 'running': (started === 'TRUE'),
'pmem': 0 'pcpu': 0,
}); 'pmem': 0
dataSrv.push(srv); });
dataSrv.push(srv);
}
} }
} }
} let srvsMissing = srvs.filter(function (e) {
let srvsMissing = srvs.filter(function (e) { return dataSrv.indexOf(e) === -1;
return dataSrv.indexOf(e) === -1; });
}); srvsMissing.forEach(function (srv) {
srvsMissing.forEach(function (srv) { data.push({
data.push({ 'name': srv,
'name': srv, 'running': false,
'running': false, 'pcpu': 0,
'pcpu': 0, 'pmem': 0
'pmem': 0 });
}); });
});
if (callback) { callback(data); } if (callback) { callback(data); }
resolve(data); resolve(data);
} else { } else {
srvs.forEach(function (srv) { srvs.forEach(function (srv) {
data.push({ data.push({
'name': srv, 'name': srv,
'running': false, 'running': false,
'pcpu': 0, 'pcpu': 0,
'pmem': 0 'pmem': 0
});
}); });
}); if (callback) { callback(data); }
if (callback) { callback(data); } resolve(data);
resolve(data); }
} });
}); } catch (e) {
if (callback) { callback(data); }
resolve(data);
}
} }
} else { } else {
if (callback) { callback({}); } if (callback) { callback({}); }
@ -582,90 +587,95 @@ function processes(callback) {
}); });
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' process get /value', { maxBuffer: 1024 * 1000, windowsHide: true }, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' process get /value', { maxBuffer: 1024 * 1000, windowsHide: true }, function (error, stdout) {
let processSections = stdout.split(/\n\s*\n/); if (!error) {
let procs = []; let processSections = stdout.split(/\n\s*\n/);
let procStats = []; let procs = [];
let list_new = {}; let procStats = [];
let allcpuu = 0; let list_new = {};
let allcpus = 0; let allcpuu = 0;
for (let i = 0; i < processSections.length; i++) { let allcpus = 0;
if (processSections[i].trim() !== '') { for (let i = 0; i < processSections.length; i++) {
let lines = processSections[i].trim().split('\r\n'); if (processSections[i].trim() !== '') {
let pid = parseInt(util.getValue(lines, 'ProcessId', '=', true), 10); let lines = processSections[i].trim().split('\r\n');
let statusValue = util.getValue(lines, 'ExecutionState', '='); let pid = parseInt(util.getValue(lines, 'ProcessId', '=', true), 10);
let name = util.getValue(lines, 'Caption', '=', true); let statusValue = util.getValue(lines, 'ExecutionState', '=');
let commandLine = util.getValue(lines, 'CommandLine', '=', true); let name = util.getValue(lines, 'Caption', '=', true);
let utime = parseInt(util.getValue(lines, 'UserModeTime', '=', true), 10); let commandLine = util.getValue(lines, 'CommandLine', '=', true);
let stime = parseInt(util.getValue(lines, 'KernelModeTime', '=', true), 10); let utime = parseInt(util.getValue(lines, 'UserModeTime', '=', true), 10);
let mem = parseInt(util.getValue(lines, 'WorkingSetSize', '=', true), 10); let stime = parseInt(util.getValue(lines, 'KernelModeTime', '=', true), 10);
allcpuu = allcpuu + utime; let mem = parseInt(util.getValue(lines, 'WorkingSetSize', '=', true), 10);
allcpus = allcpus + stime; allcpuu = allcpuu + utime;
result.all++; allcpus = allcpus + stime;
if (!statusValue) { result.unknown++; } result.all++;
if (statusValue === '3') { result.running++; } if (!statusValue) { result.unknown++; }
if (statusValue === '4' || statusValue === '5') { result.blocked++; } if (statusValue === '3') { result.running++; }
if (statusValue === '4' || statusValue === '5') { result.blocked++; }
procStats.push({ procStats.push({
pid: pid, pid: pid,
utime: utime, utime: utime,
stime: stime, stime: stime,
pcpu: 0, pcpu: 0,
pcpuu: 0, pcpuu: 0,
pcpus: 0, pcpus: 0,
}); });
procs.push({ procs.push({
pid: pid, pid: pid,
name: name, name: name,
pcpu: 0, pcpu: 0,
pcpuu: 0, pcpuu: 0,
pcpus: 0, pcpus: 0,
pmem: mem / os.totalmem() * 100, pmem: mem / os.totalmem() * 100,
priority: parseInt(util.getValue(lines, 'Priority', '=', true), 10), priority: parseInt(util.getValue(lines, 'Priority', '=', true), 10),
mem_vsz: parseInt(util.getValue(lines, 'PageFileUsage', '=', true), 10), mem_vsz: parseInt(util.getValue(lines, 'PageFileUsage', '=', true), 10),
mem_rss: Math.floor(parseInt(util.getValue(lines, 'WorkingSetSize', '=', true), 10) / 1024), mem_rss: Math.floor(parseInt(util.getValue(lines, 'WorkingSetSize', '=', true), 10) / 1024),
nice: 0, nice: 0,
started: parseTimeWin(util.getValue(lines, 'CreationDate', '=', true)), started: parseTimeWin(util.getValue(lines, 'CreationDate', '=', true)),
state: (!statusValue ? _winStatusValues[0] : _winStatusValues[statusValue]), state: (!statusValue ? _winStatusValues[0] : _winStatusValues[statusValue]),
tty: '', tty: '',
user: '', user: '',
command: commandLine || name command: commandLine || name
}); });
}
} }
} result.sleeping = result.all - result.running - result.blocked - result.unknown;
result.sleeping = result.all - result.running - result.blocked - result.unknown; result.list = procs;
result.list = procs; for (let i = 0; i < procStats.length; i++) {
for (let i = 0; i < procStats.length; i++) { let resultProcess = calcProcPidStat(procStats[i], allcpuu + allcpus);
let resultProcess = calcProcPidStat(procStats[i], allcpuu + allcpus);
// store pcpu in outer array // store pcpu in outer array
let listPos = result.list.map(function (e) { return e.pid; }).indexOf(resultProcess.pid); let listPos = result.list.map(function (e) { return e.pid; }).indexOf(resultProcess.pid);
if (listPos >= 0) { if (listPos >= 0) {
result.list[listPos].pcpu = resultProcess.pcpuu + resultProcess.pcpus; result.list[listPos].pcpu = resultProcess.pcpuu + resultProcess.pcpus;
result.list[listPos].pcpuu = resultProcess.pcpuu; result.list[listPos].pcpuu = resultProcess.pcpuu;
result.list[listPos].pcpus = resultProcess.pcpus; result.list[listPos].pcpus = resultProcess.pcpus;
}
// save new values
list_new[resultProcess.pid] = {
pcpuu: resultProcess.pcpuu,
pcpus: resultProcess.pcpus,
utime: resultProcess.utime,
stime: resultProcess.stime
};
} }
// store old values
// save new values _process_cpu.all = allcpuu + allcpus;
list_new[resultProcess.pid] = { _process_cpu.list = list_new;
pcpuu: resultProcess.pcpuu, _process_cpu.ms = Date.now() - _process_cpu.ms;
pcpus: resultProcess.pcpus, _process_cpu.result = result;
utime: resultProcess.utime,
stime: resultProcess.stime
};
} }
// store old values if (callback) {
_process_cpu.all = allcpuu + allcpus; callback(result);
_process_cpu.list = list_new; }
_process_cpu.ms = Date.now() - _process_cpu.ms; resolve(result);
_process_cpu.result = result; });
} } catch (e) {
if (callback) { if (callback) { callback(result); }
callback(result);
}
resolve(result); resolve(result);
}); }
} }
} else { } else {
if (callback) { callback(_process_cpu.result); } if (callback) { callback(_process_cpu.result); }

View File

@ -188,27 +188,32 @@ function system(callback) {
resolve(result); resolve(result);
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' csproduct get /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' csproduct get /value', opts, function (error, stdout) {
// let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0)[0].trim().split(/\s\s+/); if (!error) {
let lines = stdout.split('\r\n'); // let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0)[0].trim().split(/\s\s+/);
result.manufacturer = util.getValue(lines, 'vendor', '='); let lines = stdout.split('\r\n');
result.model = util.getValue(lines, 'name', '='); result.manufacturer = util.getValue(lines, 'vendor', '=');
result.version = util.getValue(lines, 'version', '='); result.model = util.getValue(lines, 'name', '=');
result.serial = util.getValue(lines, 'identifyingnumber', '='); result.version = util.getValue(lines, 'version', '=');
result.uuid = util.getValue(lines, 'uuid', '='); result.serial = util.getValue(lines, 'identifyingnumber', '=');
exec(util.getWmic() + ' /namespace:\\\\root\\wmi path MS_SystemInformation get /value', opts, function (error, stdout) { result.uuid = util.getValue(lines, 'uuid', '=');
if (!error) { exec(util.getWmic() + ' /namespace:\\\\root\\wmi path MS_SystemInformation get /value', opts, function (error, stdout) {
let lines = stdout.split('\r\n'); if (!error) {
result.sku = util.getValue(lines, 'systemsku', '='); let lines = stdout.split('\r\n');
} result.sku = util.getValue(lines, 'systemsku', '=');
if (callback) { callback(result); } }
resolve(result); if (callback) { callback(result); }
}); resolve(result);
} });
}
if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });
@ -261,32 +266,37 @@ function bios(callback) {
} }
if (_windows) { if (_windows) {
// TODO: check BIOS windows // TODO: check BIOS windows
exec(util.getWmic() + ' bios get /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' bios get /value', opts, function (error, stdout) {
let lines = stdout.toString().split('\r\n'); if (!error) {
const description = util.getValue(lines, 'description', '='); let lines = stdout.toString().split('\r\n');
if (description.indexOf(' Version ') !== -1) { const description = util.getValue(lines, 'description', '=');
// ... Phoenix ROM BIOS PLUS Version 1.10 A04 if (description.indexOf(' Version ') !== -1) {
result.vendor = description.split(' Version ')[0].trim(); // ... Phoenix ROM BIOS PLUS Version 1.10 A04
result.version = description.split(' Version ')[1].trim(); result.vendor = description.split(' Version ')[0].trim();
} else if (description.indexOf(' Ver: ') !== -1) { result.version = description.split(' Version ')[1].trim();
// ... BIOS Date: 06/27/16 17:50:16 Ver: 1.4.5 } else if (description.indexOf(' Ver: ') !== -1) {
result.vendor = util.getValue(lines, 'manufacturer', '='); // ... BIOS Date: 06/27/16 17:50:16 Ver: 1.4.5
result.version = description.split(' Ver: ')[1].trim(); result.vendor = util.getValue(lines, 'manufacturer', '=');
} else { result.version = description.split(' Ver: ')[1].trim();
result.vendor = util.getValue(lines, 'manufacturer', '='); } else {
result.version = util.getValue(lines, 'version', '='); result.vendor = util.getValue(lines, 'manufacturer', '=');
result.version = util.getValue(lines, 'version', '=');
}
result.releaseDate = util.getValue(lines, 'releasedate', '=');
if (result.releaseDate.length >= 10) {
result.releaseDate = result.releaseDate.substr(0, 4) + '-' + result.releaseDate.substr(4, 2) + '-' + result.releaseDate.substr(6, 2);
}
result.revision = util.getValue(lines, 'buildnumber', '=');
} }
result.releaseDate = util.getValue(lines, 'releasedate', '=');
if (result.releaseDate.length >= 10) {
result.releaseDate = result.releaseDate.substr(0, 4) + '-' + result.releaseDate.substr(4, 2) + '-' + result.releaseDate.substr(6, 2);
}
result.revision = util.getValue(lines, 'buildnumber', '=');
}
if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });
@ -350,26 +360,31 @@ function baseboard(callback) {
resolve(result); resolve(result);
} }
if (_windows) { if (_windows) {
exec(util.getWmic() + ' baseboard get /value', opts, function (error, stdout) { try {
if (!error) { exec(util.getWmic() + ' baseboard get /value', opts, function (error, stdout) {
let lines = stdout.toString().split('\r\n'); if (!error) {
let lines = stdout.toString().split('\r\n');
result.manufacturer = util.getValue(lines, 'manufacturer', '='); result.manufacturer = util.getValue(lines, 'manufacturer', '=');
result.model = util.getValue(lines, 'model', '='); result.model = util.getValue(lines, 'model', '=');
if (!result.model) { if (!result.model) {
result.model = util.getValue(lines, 'product', '='); result.model = util.getValue(lines, 'product', '=');
}
result.version = util.getValue(lines, 'version', '=');
result.serial = util.getValue(lines, 'serialnumber', '=');
result.assetTag = util.getValue(lines, 'partnumber', '=');
if (!result.assetTag) {
result.assetTag = util.getValue(lines, 'sku', '=');
}
} }
result.version = util.getValue(lines, 'version', '=');
result.serial = util.getValue(lines, 'serialnumber', '=');
result.assetTag = util.getValue(lines, 'partnumber', '=');
if (!result.assetTag) {
result.assetTag = util.getValue(lines, 'sku', '=');
}
}
if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });
}); });

View File

@ -245,15 +245,20 @@ function users(callback) {
}); });
} }
if (_windows) { if (_windows) {
exec('query user', opts, function (error, stdout) { try {
if (stdout) { exec('query user', opts, function (error, stdout) {
// lines / split if (stdout) {
let lines = stdout.toString().split('\r\n'); // lines / split
result = parseUsersWin(lines); let lines = stdout.toString().split('\r\n');
} result = parseUsersWin(lines);
}
if (callback) { callback(result); }
resolve(result);
});
} catch (e) {
if (callback) { callback(result); } if (callback) { callback(result); }
resolve(result); resolve(result);
}); }
} }
}); });