123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 'use strict';
- // @ts-check
- // ==================================================================================
- // virtualbox.js
- // ----------------------------------------------------------------------------------
- // Description: System Information - library
- // for Node.js
- // Copyright: (c) 2014 - 2020
- // 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;
|