diff options
Diffstat (limited to 'node_modules/systeminformation/lib/virtualbox.js')
-rw-r--r-- | node_modules/systeminformation/lib/virtualbox.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/node_modules/systeminformation/lib/virtualbox.js b/node_modules/systeminformation/lib/virtualbox.js new file mode 100644 index 0000000..61268b6 --- /dev/null +++ b/node_modules/systeminformation/lib/virtualbox.js @@ -0,0 +1,107 @@ +'use strict'; +// @ts-check +// ================================================================================== +// virtualbox.js +// ---------------------------------------------------------------------------------- +// Description: System Information - library +// for Node.js +// Copyright: (c) 2014 - 2022 +// Author: Sebastian Hildebrandt +// ---------------------------------------------------------------------------------- +// License: MIT +// ================================================================================== +// 14. Docker +// ---------------------------------------------------------------------------------- + +const os = require('os'); +const exec = require('child_process').exec; +const util = require('./util'); + +function vboxInfo(callback) { + + // fallback - if only callback is given + let result = []; + return new Promise((resolve) => { + process.nextTick(() => { + try { + exec(util.getVboxmanage() + ' list vms --long', function (error, stdout) { + let parts = (os.EOL + stdout.toString()).split(os.EOL + 'Name:'); + parts.shift(); + parts.forEach(part => { + const lines = ('Name:' + part).split(os.EOL); + const state = util.getValue(lines, 'State'); + const running = state.startsWith('running'); + const runningSinceString = running ? state.replace('running (since ', '').replace(')', '').trim() : ''; + let runningSince = 0; + try { + if (running) { + const sinceDateObj = new Date(runningSinceString); + const offset = sinceDateObj.getTimezoneOffset(); + runningSince = Math.round((Date.now() - Date.parse(sinceDateObj)) / 1000) + offset * 60; + } + } catch (e) { + util.noop(); + } + const stoppedSinceString = !running ? state.replace('powered off (since', '').replace(')', '').trim() : ''; + let stoppedSince = 0; + try { + if (!running) { + const sinceDateObj = new Date(stoppedSinceString); + const offset = sinceDateObj.getTimezoneOffset(); + stoppedSince = Math.round((Date.now() - Date.parse(sinceDateObj)) / 1000) + offset * 60; + } + } catch (e) { + util.noop(); + } + result.push({ + id: util.getValue(lines, 'UUID'), + name: util.getValue(lines, 'Name'), + running, + started: runningSinceString, + runningSince, + stopped: stoppedSinceString, + stoppedSince, + guestOS: util.getValue(lines, 'Guest OS'), + hardwareUUID: util.getValue(lines, 'Hardware UUID'), + memory: parseInt(util.getValue(lines, 'Memory size', ' '), 10), + vram: parseInt(util.getValue(lines, 'VRAM size'), 10), + cpus: parseInt(util.getValue(lines, 'Number of CPUs'), 10), + cpuExepCap: util.getValue(lines, 'CPU exec cap'), + cpuProfile: util.getValue(lines, 'CPUProfile'), + chipset: util.getValue(lines, 'Chipset'), + firmware: util.getValue(lines, 'Firmware'), + pageFusion: util.getValue(lines, 'Page Fusion') === 'enabled', + configFile: util.getValue(lines, 'Config file'), + snapshotFolder: util.getValue(lines, 'Snapshot folder'), + logFolder: util.getValue(lines, 'Log folder'), + hpet: util.getValue(lines, 'HPET') === 'enabled', + pae: util.getValue(lines, 'PAE') === 'enabled', + longMode: util.getValue(lines, 'Long Mode') === 'enabled', + tripleFaultReset: util.getValue(lines, 'Triple Fault Reset') === 'enabled', + apic: util.getValue(lines, 'APIC') === 'enabled', + x2Apic: util.getValue(lines, 'X2APIC') === 'enabled', + acpi: util.getValue(lines, 'ACPI') === 'enabled', + ioApic: util.getValue(lines, 'IOAPIC') === 'enabled', + biosApicMode: util.getValue(lines, 'BIOS APIC mode'), + bootMenuMode: util.getValue(lines, 'Boot menu mode'), + bootDevice1: util.getValue(lines, 'Boot Device 1'), + bootDevice2: util.getValue(lines, 'Boot Device 2'), + bootDevice3: util.getValue(lines, 'Boot Device 3'), + bootDevice4: util.getValue(lines, 'Boot Device 4'), + timeOffset: util.getValue(lines, 'Time offset'), + rtc: util.getValue(lines, 'RTC'), + }); + }); + + if (callback) { callback(result); } + resolve(result); + }); + } catch (e) { + if (callback) { callback(result); } + resolve(result); + } + }); + }); +} + +exports.vboxInfo = vboxInfo; |