diff --git a/lib/osinfo.js b/lib/osinfo.js index 1bf76ce..10580b0 100644 --- a/lib/osinfo.js +++ b/lib/osinfo.js @@ -149,6 +149,8 @@ function getLogoFile(distro) { } else if (distro.indexOf('robolinux') !== -1) { result = 'robolinux'; + } else if (_linux && distro) { + result = distro.toLowerCase(); } return result; } @@ -177,7 +179,7 @@ function osInfo(callback) { if (_linux) { - exec('cat /etc/*-release', function (error, stdout) { + exec('cat /etc/*-release; cat /usr/lib/os-release; cat /etc/openwrt_release', function (error, stdout) { //if (!error) { /** * @namespace @@ -194,10 +196,16 @@ function osInfo(callback) { release[line.split('=')[0].trim().toUpperCase()] = line.split('=')[1].trim(); } }); + let releaseVersion = (release.VERSION || '').replace(/"/g, ''); + let codename = (release.DISTRIB_CODENAME || '').replace(/"/g, ''); + if (releaseVersion.indexOf('(')) { + codename = releaseVersion.split('(')[1].replace(/[()]/g, '').trim(); + releaseVersion = releaseVersion.split('(')[0].trim(); + } result.distro = (release.DISTRIB_ID || release.NAME || 'unknown').replace(/"/g, ''); result.logofile = getLogoFile(result.distro); - result.release = (release.DISTRIB_RELEASE || release.VERSION_ID || 'unknown').replace(/"/g, ''); - result.codename = (release.DISTRIB_CODENAME || '').replace(/"/g, ''); + result.release = (releaseVersion || release.DISTRIB_RELEASE || release.VERSION_ID || 'unknown').replace(/"/g, ''); + result.codename = codename; result.codepage = util.getCodepage(); //} if (callback) { @@ -232,6 +240,21 @@ function osInfo(callback) { result.release = util.getValue(lines, 'ProductVersion'); result.build = util.getValue(lines, 'BuildVersion'); result.logofile = getLogoFile(result.distro); + result.codename = 'macOS'; + result.codename = (result.release.indexOf('10.4') > -1 ? 'Mac OS X Tiger' : result.codename); + result.codename = (result.release.indexOf('10.4') > -1 ? 'Mac OS X Tiger' : result.codename); + result.codename = (result.release.indexOf('10.4') > -1 ? 'Mac OS X Tiger' : result.codename); + result.codename = (result.release.indexOf('10.5') > -1 ? 'Mac OS X Leopard' : result.codename); + result.codename = (result.release.indexOf('10.6') > -1 ? 'Mac OS X Snow Leopard' : result.codename); + result.codename = (result.release.indexOf('10.7') > -1 ? 'Mac OS X Lion' : result.codename); + result.codename = (result.release.indexOf('10.8') > -1 ? 'OS X Mountain Lion' : result.codename); + result.codename = (result.release.indexOf('10.9') > -1 ? 'OS X Mavericks' : result.codename); + result.codename = (result.release.indexOf('10.10') > -1 ? 'OS X Yosemite' : result.codename); + result.codename = (result.release.indexOf('10.11') > -1 ? 'OS X El Capitan' : result.codename); + result.codename = (result.release.indexOf('10.12') > -1 ? 'macOS Sierra' : result.codename); + result.codename = (result.release.indexOf('10.13') > -1 ? 'macOS High Sierra' : result.codename); + result.codename = (result.release.indexOf('10.14') > -1 ? 'macOS Mojave' : result.codename); + result.codepage = util.getCodepage(); if (callback) { callback(result); @@ -481,13 +504,32 @@ function versions(callback) { } }); } else { - exec('postgres -V', function (error, stdout) { - if (!error) { - const postgresql = stdout.toString().split('\n')[0].split(' ') || []; - result.postgresql = postgresql.length ? postgresql[postgresql.length - 1] : ''; - } - functionProcessed(); - }); + if (_windows) { + exec(util.getWmic() + ' service get /value', util.execOptsWin, function (error, stdout) { + let serviceSections = stdout.split(/\n\s*\n/); + for (let i = 0; i < serviceSections.length; i++) { + if (serviceSections[i].trim() !== '') { + let lines = serviceSections[i].trim().split('\r\n'); + let srvCaption = util.getValue(lines, 'caption', '=', true).toLowerCase(); + if (srvCaption.indexOf('postgresql') > -1) { + const parts = srvCaption.split(' server '); + if (parts.length > 1) { + result.postgresql = parts[1]; + } + } + } + } + functionProcessed(); + }); + } else { + exec('postgres -V', function (error, stdout) { + if (!error) { + const postgresql = stdout.toString().split('\n')[0].split(' ') || []; + result.postgresql = postgresql.length ? postgresql[postgresql.length - 1] : ''; + } + functionProcessed(); + }); + } } exec('perl -v', function (error, stdout) { if (!error) { diff --git a/lib/system.js b/lib/system.js index d03b7fc..1ac33a9 100644 --- a/lib/system.js +++ b/lib/system.js @@ -41,20 +41,20 @@ function system(callback) { if (_linux || _freebsd || _openbsd) { exec('dmidecode -t system 2>/dev/null', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - result.manufacturer = util.getValue(lines, 'manufacturer'); - result.model = util.getValue(lines, 'product name'); - result.version = util.getValue(lines, 'version'); - result.serial = util.getValue(lines, 'serial number'); - result.uuid = util.getValue(lines, 'uuid'); - result.sku = util.getValue(lines, 'sku number'); - if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; - if (result.manufacturer.toLowerCase().indexOf('o.e.m.') !== -1) result.manufacturer = ''; - if (result.model.toLowerCase().indexOf('o.e.m.') !== -1) result.model = 'Computer'; - if (result.version.toLowerCase().indexOf('o.e.m.') !== -1) result.version = ''; - if (result.sku.toLowerCase().indexOf('o.e.m.') !== -1) result.sku = '-'; - } + // if (!error) { + let lines = stdout.toString().split('\n'); + result.manufacturer = util.getValue(lines, 'manufacturer'); + result.model = util.getValue(lines, 'product name'); + result.version = util.getValue(lines, 'version'); + result.serial = util.getValue(lines, 'serial number'); + result.uuid = util.getValue(lines, 'uuid'); + result.sku = util.getValue(lines, 'sku number'); + if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; + if (result.manufacturer.toLowerCase().indexOf('o.e.m.') !== -1) result.manufacturer = ''; + if (result.model.toLowerCase().indexOf('o.e.m.') !== -1) result.model = 'Computer'; + if (result.version.toLowerCase().indexOf('o.e.m.') !== -1) result.version = ''; + if (result.sku.toLowerCase().indexOf('o.e.m.') !== -1) result.sku = '-'; + // } // detect docker if (fs.existsSync('/.dockerenv') || fs.existsSync('/.dockerinit')) { result.model = 'Docker Container';