mirror of
https://github.com/xuxiaobo-bobo/boda_jsEnv.git
synced 2025-04-20 03:19:56 +08:00
108 lines
4.7 KiB
JavaScript
108 lines
4.7 KiB
JavaScript
'use strict';
|
|
// @ts-check
|
|
// ==================================================================================
|
|
// virtualbox.js
|
|
// ----------------------------------------------------------------------------------
|
|
// Description: System Information - library
|
|
// for Node.js
|
|
// Copyright: (c) 2014 - 2024
|
|
// 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;
|