added system uuid() (os specific), versions() added postgresql
This commit is contained in:
parent
98bc6a401e
commit
831c50d8c9
@ -100,6 +100,7 @@ Other changes
|
||||
|
||||
| Version | Date | Comment |
|
||||
| -------------- | -------------- | -------- |
|
||||
| 3.49.0 | 2018-11-19 | added system `uuid()` (os specific), `versions()` added postgresql |
|
||||
| 3.48.4 | 2018-11-18 | windows: garbled output because of codepage |
|
||||
| 3.48.3 | 2018-11-18 | `dockerContainerStats()` fixed issue `cpu_percent` win |
|
||||
| 3.48.2 | 2018-11-18 | `dockerContainerStats()` fixed issue `cpu_percent`, win exec |
|
||||
|
||||
@ -243,6 +243,8 @@ I also created a nice little command line tool called [mmon][mmon-github-url] (
|
||||
| | logofile | X | X | X | X | X | e.g. 'apple', 'debian', 'fedora', ... |
|
||||
| | serial | | X | X | X | | OS/Host serial number |
|
||||
| | build | | | X | X | | OS build version |
|
||||
| | codepage | X | X | X | X | | OS build version |
|
||||
| si.uuid(cb) | : string | X | X | X | X| | device ID (based on OS install) |
|
||||
| si.versions(cb) | {...} | X | X | X | X | X | version information (kernel, ssl, node, ...) |
|
||||
| si.shell(cb) | : string | X | X | X | | | standard shell |
|
||||
| si.users(cb) | [{...}] | X | X | X | X | X | array of users online |
|
||||
|
||||
@ -260,7 +260,7 @@ function blockDevices(callback) {
|
||||
if (_windows) {
|
||||
let drivetypes = ['Unknown', 'NoRoot', 'Removable', 'Local', 'Network', 'CD/DVD', 'RAM'];
|
||||
try {
|
||||
exec(util.getWmic() + ' logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /value', util.execOptsWin, function (error, stdout) {
|
||||
util.execWin(util.getWmic() + ' logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /value', util.execOptsWin, function (error, stdout) {
|
||||
if (!error) {
|
||||
let devices = stdout.toString().split(/\n\s*\n/);
|
||||
devices.forEach(function (device) {
|
||||
|
||||
@ -335,11 +335,11 @@ function graphics(callback) {
|
||||
if (_windows) {
|
||||
// https://blogs.technet.microsoft.com/heyscriptingguy/2013/10/03/use-powershell-to-discover-multi-monitor-information/
|
||||
try {
|
||||
exec(util.getWmic() + ' path win32_VideoController get AdapterCompatibility, AdapterDACType, name, PNPDeviceID, CurrentVerticalResolution, CurrentHorizontalResolution, CurrentNumberOfColors, AdapterRAM, CurrentBitsPerPixel, CurrentRefreshRate, MinRefreshRate, MaxRefreshRate, VideoMemoryType /value', util.execOptsWin, function (error, stdout) {
|
||||
util.execWin(util.getWmic() + ' path win32_VideoController get AdapterCompatibility, AdapterDACType, name, PNPDeviceID, CurrentVerticalResolution, CurrentHorizontalResolution, CurrentNumberOfColors, AdapterRAM, CurrentBitsPerPixel, CurrentRefreshRate, MinRefreshRate, MaxRefreshRate, VideoMemoryType /value', util.execOptsWin, function (error, stdout) {
|
||||
if (!error) {
|
||||
let csections = stdout.split(/\n\s*\n/);
|
||||
result.controllers = parseLinesWindowsControllers(csections);
|
||||
exec(util.getWmic() + ' path win32_desktopmonitor get Caption, MonitorManufacturer, MonitorType, ScreenWidth, ScreenHeight /value', util.execOptsWin, function (error, stdout) {
|
||||
util.execWin(util.getWmic() + ' path win32_desktopmonitor get Caption, MonitorManufacturer, MonitorType, ScreenWidth, ScreenHeight /value', util.execOptsWin, function (error, stdout) {
|
||||
let dsections = stdout.split(/\n\s*\n/);
|
||||
if (!error) {
|
||||
result.displays = parseLinesWindowsDisplays(dsections);
|
||||
|
||||
19
lib/index.js
19
lib/index.js
@ -46,7 +46,7 @@ const _sunos = (_platform === 'sunos');
|
||||
// ----------------------------------------------------------------------------------
|
||||
|
||||
if (_windows) {
|
||||
util.getWinCodepage();
|
||||
util.getCodepage();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
@ -78,6 +78,7 @@ function getStaticData(callback) {
|
||||
system.bios(),
|
||||
system.baseboard(),
|
||||
osInfo.osInfo(),
|
||||
osInfo.uuid(),
|
||||
osInfo.versions(),
|
||||
cpu.cpu(),
|
||||
cpu.cpuFlags(),
|
||||
@ -90,13 +91,14 @@ function getStaticData(callback) {
|
||||
data.bios = res[1];
|
||||
data.baseboard = res[2];
|
||||
data.os = res[3];
|
||||
data.versions = res[4];
|
||||
data.cpu = res[5];
|
||||
data.cpu.flags = res[6];
|
||||
data.graphics = res[7];
|
||||
data.net = res[8];
|
||||
data.memLayout = res[9];
|
||||
data.diskLayout = res[10];
|
||||
data.uuid = res[4];
|
||||
data.versions = res[5];
|
||||
data.cpu = res[6];
|
||||
data.cpu.flags = res[7];
|
||||
data.graphics = res[8];
|
||||
data.net = res[9];
|
||||
data.memLayout = res[10];
|
||||
data.diskLayout = res[11];
|
||||
if (callback) { callback(data); }
|
||||
resolve(data);
|
||||
});
|
||||
@ -312,6 +314,7 @@ exports.time = osInfo.time;
|
||||
exports.osInfo = osInfo.osInfo;
|
||||
exports.versions = osInfo.versions;
|
||||
exports.shell = osInfo.shell;
|
||||
exports.uuid = osInfo.uuid;
|
||||
|
||||
exports.cpu = cpu.cpu;
|
||||
exports.cpuFlags = cpu.cpuFlags;
|
||||
|
||||
@ -169,6 +169,7 @@ function osInfo(callback) {
|
||||
kernel: os.release(),
|
||||
arch: os.arch(),
|
||||
hostname: os.hostname(),
|
||||
codepage: '',
|
||||
logofile: '',
|
||||
serial: '',
|
||||
build: ''
|
||||
@ -197,6 +198,7 @@ function osInfo(callback) {
|
||||
result.logofile = getLogoFile(result.distro);
|
||||
result.release = (release.DISTRIB_RELEASE || release.VERSION_ID || 'unknown').replace(/"/g, '');
|
||||
result.codename = (release.DISTRIB_CODENAME || '').replace(/"/g, '');
|
||||
result.codepage = util.getCodepage();
|
||||
//}
|
||||
if (callback) {
|
||||
callback(result);
|
||||
@ -214,6 +216,7 @@ function osInfo(callback) {
|
||||
result.release = util.getValue(lines, 'kern.osrelease').split('-')[0];
|
||||
result.serial = util.getValue(lines, 'kern.uuid');
|
||||
result.codename = '';
|
||||
result.codepage = util.getCodepage();
|
||||
}
|
||||
if (callback) {
|
||||
callback(result);
|
||||
@ -229,6 +232,7 @@ function osInfo(callback) {
|
||||
result.release = util.getValue(lines, 'ProductVersion');
|
||||
result.build = util.getValue(lines, 'BuildVersion');
|
||||
result.logofile = getLogoFile(result.distro);
|
||||
result.codepage = util.getCodepage();
|
||||
if (callback) {
|
||||
callback(result);
|
||||
}
|
||||
@ -254,6 +258,7 @@ function osInfo(callback) {
|
||||
result.distro = util.getValue(lines, 'Caption', '=').trim();
|
||||
result.serial = util.getValue(lines, 'SerialNumber', '=').trim();
|
||||
result.build = util.getValue(lines, 'BuildNumber', '=').trim();
|
||||
result.codepage = util.getCodepage();
|
||||
if (callback) {
|
||||
callback(result);
|
||||
}
|
||||
@ -495,3 +500,61 @@ function shell(callback) {
|
||||
}
|
||||
|
||||
exports.shell = shell;
|
||||
|
||||
function uuid(callback) {
|
||||
return new Promise((resolve) => {
|
||||
process.nextTick(() => {
|
||||
|
||||
let result = '';
|
||||
let parts;
|
||||
|
||||
if (_darwin) {
|
||||
exec('ioreg -rd1 -c IOPlatformExpertDevice | grep IOPlatformUUID', function (error, stdout) {
|
||||
if (!error) {
|
||||
parts = stdout.toString().split('\n')[0].replace(/"/g, '').split('=');
|
||||
result = parts.length > 1 ? parts[1].trim().toLowerCase() : '';
|
||||
}
|
||||
if (callback) {
|
||||
callback(result);
|
||||
}
|
||||
resolve(result);
|
||||
});
|
||||
}
|
||||
if (_linux) {
|
||||
exec('( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname ) | head -n 1 || :', function (error, stdout) {
|
||||
if (!error) {
|
||||
result = stdout.toString().split('\n')[0].trim().toLowerCase();
|
||||
}
|
||||
if (callback) {
|
||||
callback(result);
|
||||
}
|
||||
resolve(result);
|
||||
});
|
||||
}
|
||||
if (_freebsd || _openbsd) {
|
||||
exec('kenv -q smbios.system.uuid', function (error, stdout) {
|
||||
if (!error) {
|
||||
result = stdout.toString().split('\n')[0].trim().toLowerCase();
|
||||
}
|
||||
if (callback) {
|
||||
callback(result);
|
||||
}
|
||||
resolve(result);
|
||||
});
|
||||
}
|
||||
if (_windows) {
|
||||
exec('%windir%\\System32\\reg query "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography" /v MachineGuid', util.execOptsWin, function (error, stdout) {
|
||||
if (!error) {
|
||||
result = stdout.toString().split('\n')[0].split('REG_SZ')[1].replace(/\r+|\n+|\s+/ig, '').toLowerCase();
|
||||
}
|
||||
if (callback) {
|
||||
callback(result);
|
||||
}
|
||||
resolve(result);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
exports.uuid = uuid;
|
||||
|
||||
38
lib/util.js
38
lib/util.js
@ -19,11 +19,16 @@ const exec = require('child_process').exec;
|
||||
const execSync = require('child_process').execSync;
|
||||
|
||||
let _platform = process.platform;
|
||||
const _linux = (_platform === 'linux');
|
||||
const _darwin = (_platform === 'darwin');
|
||||
const _windows = (_platform === 'win32');
|
||||
const _freebsd = (_platform === 'freebsd');
|
||||
const _openbsd = (_platform === 'openbsd');
|
||||
// const _sunos = (_platform === 'sunos');
|
||||
|
||||
let _cores = 0;
|
||||
let wmic = '';
|
||||
let codepageWin = '';
|
||||
let codepage = '';
|
||||
|
||||
const execOptsWin = {
|
||||
windowsHide: true,
|
||||
@ -182,19 +187,32 @@ function powerShell(cmd) {
|
||||
});
|
||||
}
|
||||
|
||||
function getWinCodepage() {
|
||||
function getCodepage() {
|
||||
if (_windows) {
|
||||
if (!codepageWin) {
|
||||
if (!codepage) {
|
||||
try {
|
||||
const stdout = execSync('chcp');
|
||||
const lines = stdout.toString().split('\r\n');
|
||||
const parts = lines[0].split(':');
|
||||
codepageWin = parts.length > 1 ? parts[1].replace('.', '') : '';
|
||||
codepage = parts.length > 1 ? parts[1].replace('.', '') : '';
|
||||
} catch (err) {
|
||||
codepageWin = '437';
|
||||
codepage = '437';
|
||||
}
|
||||
}
|
||||
return codepageWin;
|
||||
return codepage;
|
||||
}
|
||||
if (_linux || _darwin || _freebsd || _openbsd) {
|
||||
if (!codepage) {
|
||||
try {
|
||||
const stdout = execSync('echo $LANG');
|
||||
const lines = stdout.toString().split('\r\n');
|
||||
const parts = lines[0].split('.');
|
||||
codepage = parts.length > 1 ? parts[1].trim : '';
|
||||
} catch (err) {
|
||||
codepage = 'UTF-8';
|
||||
}
|
||||
}
|
||||
return codepage;
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,10 +221,10 @@ function execWin(cmd, opts, callback) {
|
||||
callback = opts;
|
||||
opts = execOptsWin;
|
||||
}
|
||||
let newCmd = 'chcp 65001 > nul && cmd /C ' + cmd + ' && chcp ' + codepageWin + ' > nul';
|
||||
let newCmd = 'chcp 65001 > nul && cmd /C ' + cmd + ' && chcp ' + codepage + ' > nul';
|
||||
exec(newCmd, execOptsWin, function (error, stdout) {
|
||||
callback(error, stdout)
|
||||
})
|
||||
callback(error, stdout);
|
||||
});
|
||||
}
|
||||
|
||||
function nanoSeconds() {
|
||||
@ -220,7 +238,7 @@ function nanoSeconds() {
|
||||
function noop() { }
|
||||
|
||||
exports.execOptsWin = execOptsWin;
|
||||
exports.getWinCodepage = getWinCodepage;
|
||||
exports.getCodepage = getCodepage;
|
||||
exports.execWin = execWin;
|
||||
exports.isFunction = isFunction;
|
||||
exports.unique = unique;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user