system() added virtual flag
This commit is contained in:
parent
ad4cf33353
commit
d80e7729bc
1
lib/index.d.ts
vendored
1
lib/index.d.ts
vendored
@ -28,6 +28,7 @@ export namespace Systeminformation {
|
|||||||
serial: string;
|
serial: string;
|
||||||
uuid: string;
|
uuid: string;
|
||||||
sku: string;
|
sku: string;
|
||||||
|
virtual: boolean;
|
||||||
raspberry?: RaspberryRevisionData;
|
raspberry?: RaspberryRevisionData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -40,6 +40,7 @@ function system(callback) {
|
|||||||
serial: '-',
|
serial: '-',
|
||||||
uuid: '-',
|
uuid: '-',
|
||||||
sku: '-',
|
sku: '-',
|
||||||
|
virtual: false
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_linux || _freebsd || _openbsd || _netbsd) {
|
if (_linux || _freebsd || _openbsd || _netbsd) {
|
||||||
@ -74,18 +75,38 @@ function system(callback) {
|
|||||||
if (!result.model || result.model.toLowerCase().indexOf('o.e.m.') !== -1) result.model = 'Computer';
|
if (!result.model || result.model.toLowerCase().indexOf('o.e.m.') !== -1) result.model = 'Computer';
|
||||||
if (!result.version || result.version.toLowerCase().indexOf('o.e.m.') !== -1) result.version = '';
|
if (!result.version || result.version.toLowerCase().indexOf('o.e.m.') !== -1) result.version = '';
|
||||||
if (!result.sku || result.sku.toLowerCase().indexOf('o.e.m.') !== -1) result.sku = '-';
|
if (!result.sku || result.sku.toLowerCase().indexOf('o.e.m.') !== -1) result.sku = '-';
|
||||||
|
|
||||||
|
// detect virtual (1)
|
||||||
|
if (result.model.toLowerCase() === 'virtualbox' || result.model.toLowerCase() === 'kvm' || result.model.toLowerCase() === 'virtual machine' || result.model.toLowerCase() === 'bochs' || result.model.toLowerCase().startsWith('vmware')) {
|
||||||
|
result.virtual = true;
|
||||||
|
}
|
||||||
|
if (result.manufacturer.toLowerCase().startsWith('vmware') || result.manufacturer.toLowerCase() === 'xen') {
|
||||||
|
result.virtual = true;
|
||||||
|
}
|
||||||
|
if (!result.virtual) {
|
||||||
|
try {
|
||||||
|
const disksById = execSync('ls -1 /dev/disk/by-id/').toString();
|
||||||
|
if (disksById.indexOf('_QEMU_') >= 0 || disksById.indexOf('_VBOX_') >= 0) {
|
||||||
|
result.virtual = true;
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
util.noop();
|
||||||
|
}
|
||||||
|
}
|
||||||
// detect docker
|
// detect docker
|
||||||
if (fs.existsSync('/.dockerenv') || fs.existsSync('/.dockerinit')) {
|
if (fs.existsSync('/.dockerenv') || fs.existsSync('/.dockerinit')) {
|
||||||
result.model = 'Docker Container';
|
result.model = 'Docker Container';
|
||||||
}
|
}
|
||||||
if (result.manufacturer === '' && result.model === 'Computer' && result.version === '') { // still default values
|
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) {
|
exec('dmesg | grep -iE "virtual|hypervisor" | grep -iE "vmware|qemu|kvm|xen"', function (error, stdout) {
|
||||||
// detect virtual machines
|
// detect virtual machines
|
||||||
if (!error) {
|
if (!error) {
|
||||||
let lines = stdout.toString().split('\n');
|
let lines = stdout.toString().split('\n');
|
||||||
if (lines.length > 0) result.model = 'Virtual machine';
|
if (lines.length > 0) {
|
||||||
|
result.model = 'Virtual machine';
|
||||||
|
result.virtual = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.manufacturer === '' && result.model === 'Computer' && result.version === '') {
|
if (result.manufacturer === '' && result.model === 'Computer' && result.version === '') {
|
||||||
// Check Raspberry Pi
|
// Check Raspberry Pi
|
||||||
fs.readFile('/proc/cpuinfo', function (error, stdout) {
|
fs.readFile('/proc/cpuinfo', function (error, stdout) {
|
||||||
@ -263,13 +284,36 @@ function system(callback) {
|
|||||||
result.version = util.getValue(lines, 'version', '=');
|
result.version = util.getValue(lines, 'version', '=');
|
||||||
result.serial = util.getValue(lines, 'identifyingnumber', '=');
|
result.serial = util.getValue(lines, 'identifyingnumber', '=');
|
||||||
result.uuid = util.getValue(lines, 'uuid', '=');
|
result.uuid = util.getValue(lines, 'uuid', '=');
|
||||||
|
// detect virtual (1)
|
||||||
|
if (result.model.toLowerCase() === 'virtualbox' || result.model.toLowerCase() === 'kvm' || result.model.toLowerCase() === 'virtual machine' || result.model.toLowerCase() === 'bochs' || result.model.toLowerCase().startsWith('vmware')) {
|
||||||
|
result.virtual = true;
|
||||||
|
}
|
||||||
|
if (result.manufacturer.toLowerCase().startsWith('vmware') || result.manufacturer.toLowerCase() === 'xen') {
|
||||||
|
result.virtual = true;
|
||||||
|
}
|
||||||
util.wmic('/namespace:\\\\root\\wmi path MS_SystemInformation get /value').then((stdout, error) => {
|
util.wmic('/namespace:\\\\root\\wmi path MS_SystemInformation get /value').then((stdout, error) => {
|
||||||
if (!error) {
|
if (!error) {
|
||||||
let lines = stdout.split('\r\n');
|
let lines = stdout.split('\r\n');
|
||||||
result.sku = util.getValue(lines, 'systemsku', '=');
|
result.sku = util.getValue(lines, 'systemsku', '=');
|
||||||
}
|
}
|
||||||
if (callback) { callback(result); }
|
if (!result.virtual) {
|
||||||
resolve(result);
|
util.wmic('bios get Version, SerialNumber, SMBIOSBIOSVersion').then((stdout, error) => {
|
||||||
|
if (!error) {
|
||||||
|
let lines = stdout.split('\r\n');
|
||||||
|
if (lines.indexOf('VRTUAL') >= 0 || lines.indexOf('A M I ') >= 0 || lines.indexOf('VirtualBox') >= 0 || lines.indexOf('VMWare') >= 0 || lines.indexOf('Xen') >= 0) {
|
||||||
|
result.virtual = true;
|
||||||
|
}
|
||||||
|
if (callback) { callback(result); }
|
||||||
|
resolve(result);
|
||||||
|
} else {
|
||||||
|
if (callback) { callback(result); }
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
if (callback) { callback(result); }
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (callback) { callback(result); }
|
if (callback) { callback(result); }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user