added partial SunOS support, system() Raspberry Pi bugfix and extended detection

This commit is contained in:
Sebastian Hildebrandt
2018-05-11 22:12:50 +02:00
parent 426e37ed93
commit a719e1dd3f
8 changed files with 425 additions and 390 deletions
+13 -2
View File
@@ -631,8 +631,19 @@ function cpuFlags(callback) {
});
}
result = flags.join(' ').trim();
if (callback) { callback(result); }
resolve(result);
if (!result) {
exec('cat /proc/cpuinfo', function (error, stdout) {
if (!error) {
let lines = stdout.toString().split('\n');
result = util.getValue(lines, 'features', ':', true).toLowerCase();
}
if (callback) { callback(result); }
resolve(result);
});
} else {
if (callback) { callback(result); }
resolve(result);
}
});
}
if (_darwin) {
+1 -1
View File
@@ -148,7 +148,7 @@ function inetLatency(host, callback) {
if (line.length > 1) {
const parts = line[1].split('/');
if (parts.length > 1) {
result = parseFloat(parts[1]);
result = parseFloat(parts[1].replace(',', '.'));
}
}
}
+2 -2
View File
@@ -53,11 +53,11 @@ function getDefaultNetworkInterface() {
});
}
}
if (_linux || _darwin || _freebsd || _openbsd) {
if (_linux || _darwin || _freebsd || _openbsd || _sunos) {
let cmd = '';
if (_linux) cmd = 'route 2>/dev/null | grep default | awk \'{print $8}\'';
if (_darwin) cmd = 'route get 0.0.0.0 2>/dev/null | grep interface: | awk \'{print $2}\'';
if (_freebsd || _openbsd) cmd = 'route get 0.0.0.0 | grep interface:';
if (_freebsd || _openbsd || _sunos) cmd = 'route get 0.0.0.0 | grep interface:';
let result = execSync(cmd);
ifacename = result.toString().split('\n')[0];
if (ifacename.indexOf(':') > -1) {
+7 -2
View File
@@ -53,7 +53,7 @@ exports.time = time;
function getLogoFile(distro) {
distro = distro || '';
distro = distro.toLowerCase();
let result = 'linux';
let result = _platform;
if (_windows) {
result = 'windows';
}
@@ -144,6 +144,9 @@ function getLogoFile(distro) {
else if (distro.indexOf('ubuntu') !== -1) {
result = 'ubuntu';
}
else if (distro.indexOf('solaris') !== -1) {
result = 'solaris';
}
return result;
}
@@ -229,11 +232,13 @@ function osInfo(callback) {
});
}
if (_sunos) {
result.logofile = getLogoFile();
result.release = result.kernel;
exec('uname -o', function (error, stdout) {
let lines = stdout.toString().split('\n');
result.distro = lines[0];
result.logofile = getLogoFile(result.distro);
if (callback) { callback(result); }
resolve(result);
});
}
if (_windows) {
+1 -1
View File
@@ -284,7 +284,7 @@ function processes(callback) {
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));
let nice = parseInt(line.substring(parsedhead[6].from + offset, parsedhead[6].to + offset2)) || 0;
checkColumn(7);
let started = line.substring(parsedhead[7].from + offset, parsedhead[7].to + offset2).trim();
checkColumn(8);
+98 -81
View File
@@ -58,92 +58,109 @@ function system(callback) {
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.sku.toLowerCase().indexOf('o.e.m.') !== -1) result.sku = '-';
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 (result.model === 'BCM2835') { // Pi 3
result.manufacturer = 'Raspberry Pi Foundation';
result.model = result.model + ' - Pi 3 Model B';
if (['a02082', 'a22082', 'a32082'].indexOf(result.version) >= 0) {
result.version = result.version + ' - Rev. 1.2';
}
}
if (result.model === 'BCM2709') { // Pi 2
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') { // Pi, Pi Zero
result.manufacturer = 'Raspberry Pi Foundation';
if (['0002', '0003'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B';
result.version = result.version + ' - Rev 1.0';
}
if (['900092'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Zero';
result.version = result.version + ' - Rev 1.2';
}
if (['900092', '900093', '920093'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Zero';
result.version = result.version + ' - Rev 1.3';
}
if (['0007', '0008', '0009'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model A';
result.version = result.version + ' - Rev 2.0';
}
if (['0004', '0005', '0006', '000d', '000e', '000f'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B';
result.version = result.version + ' - Rev 2.0';
}
if (['0010'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B+';
result.version = result.version + ' - Rev 1.0';
}
if (['0012'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model A+';
result.version = result.version + ' - Rev 1.0';
}
if (['0013'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B+';
result.version = result.version + ' - Rev 1.2';
}
if (['0015'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model A+';
result.version = result.version + ' - Rev 1.1';
}
}
}
if (callback) { callback(result); }
resolve(result);
});
} else {
if (callback) { callback(result); }
resolve(result);
}
} else {
exec('dmesg | grep -i virtual | grep -iE "vmware|qemu|kvm|xen"', function (error, stdout) {
}
// detect docker
if (fs.existsSync('/.dockerenv') || fs.existsSync('/.dockerinit')) {
result.model = 'Docker Container';
}
if (result.manufacturer === '' && result.model === 'Computer' && result.version === '-') { // still default values
exec('dmesg | grep -i virtual | grep -iE "vmware|qemu|kvm|xen"', function (error, stdout) {
// detect virtual machines
if (!error) {
let lines = stdout.toString().split('\n');
if (lines.length > 0) result.model = 'Virtual machine';
}
if (fs.existsSync('/.dockerenv') || fs.existsSync('/.dockerinit')) {
result.model = 'Docker Container';
if (result.manufacturer === '' && result.model === 'Computer' && result.version === '-') {
// Check Raspberry Pi
exec('cat /proc/cpuinfo', function (error, stdout) {
if (!error) {
let lines = stdout.toString().split('\n');
result.model = util.getValue(lines, 'hardware', ':', true).toUpperCase();
result.version = util.getValue(lines, 'revision', ':', true).toLowerCase();
result.serial = util.getValue(lines, 'serial', ':', true);
// reference values: https://elinux.org/RPi_HardwareHistory
if (result.model === 'BCM2835' || result.model === 'BCM2708' || result.model === 'BCM2709' || result.model === 'BCM2835' || result.model === 'BCM2837') {
// Pi 3
if (['a02082', 'a22082', 'a32082'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi 3 Model B';
result.version = result.version + ' - Rev. 1.2';
}
if (['a020d3'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi 3 Model B';
result.version = result.version + ' - Rev. 1.3';
}
// Pi 2 Model B
if (['a01040'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi 2 Model B';
result.version = result.version + ' - Rev. 1.0';
}
if (['a01041', 'a21041'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi 2 Model B';
result.version = result.version + ' - Rev. 1.1';
}
if (['a22042'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi 2 Model B';
result.version = result.version + ' - Rev. 1.2';
}
// Pi Zero
if (['900092'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Zero';
result.version = result.version + ' - Rev 1.2';
}
if (['900093', '920093'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Zero';
result.version = result.version + ' - Rev 1.3';
}
if (['9000c1'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Zero W';
result.version = result.version + ' - Rev 1.1';
}
// A, B, A+ B+
if (['0002', '0003'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B';
result.version = result.version + ' - Rev 1.0';
}
if (['0004', '0005', '0006', '000d', '000e', '000f'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B';
result.version = result.version + ' - Rev 2.0';
}
if (['0007', '0008', '0009'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model A';
result.version = result.version + ' - Rev 2.0';
}
if (['0010'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B+';
result.version = result.version + ' - Rev 1.0';
}
if (['0012'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model A+';
result.version = result.version + ' - Rev 1.0';
}
if (['0013'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model B+';
result.version = result.version + ' - Rev 1.2';
}
if (['0015'].indexOf(result.version) >= 0) {
result.model = result.model + ' - Pi Model A+';
result.version = result.version + ' - Rev 1.1';
}
if (result.model.indexOf('Pi') !== -1 && result.version) { // Pi, Pi Zero
result.manufacturer = 'Raspberry Pi Foundation';
}
}
}
if (callback) { callback(result); }
resolve(result);
});
} else {
if (callback) { callback(result); }
resolve(result);
}
if (callback) { callback(result); }
resolve(result);
});
}
});