From ad2870c0a8f8a544f67c4d1897843301c82300e4 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sun, 13 Jan 2019 17:53:33 +0100 Subject: [PATCH] added chassis() --- README.md | 12 +++++- docs/system.html | 84 ++++++++++++++++++++++++++++++++++++- lib/index.js | 2 + lib/system.js | 107 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 201 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e2bd25a..4fb0042 100644 --- a/README.md +++ b/README.md @@ -130,17 +130,25 @@ I also created a nice little command line tool called [mmon][mmon-github-url] ( | | serial | X | X | X | X | | serial number | | | uuid | X | X | X | X | | UUID | | | sku | X | X | | X | | SKU number | -| si.bios(cb) | {...} | X | X | X | X | | hardware information | +| si.bios(cb) | {...} | X | X | X | X | | bios information | | | vendor | X | X | X | X | | e.g. 'AMI' | | | version | X | X | | X | | version | | | releaseDate | X | X | | X | | release date | | | revision | X | X | | X | | revision | -| si.baseboard(cb) | {...} | X | X | X | X | | hardware information | +| si.baseboard(cb) | {...} | X | X | X | X | | baseboard information | | | manufacturer | X | X | X | X | | e.g. 'ASUS' | | | model | X | X | X | X | | model / product name | | | version | X | X | X | X | | version | | | serial | X | X | X | X | | serial number | | | assetTag | X | X | X | X | | asset tag | +| si.chassis(cb) | {...} | X | X | X | X | | chassis information | +| | manufacturer | X | X | X | X | | e.g. 'MSI' | +| | model | X | X | X | X | | model / product name | +| | type | X | X | X | X | | model / product name | +| | version | X | X | X | X | | version | +| | serial | X | X | X | X | | serial number | +| | assetTag | X | X | X | X | | asset tag | +| | sku | | | | X | | SKU number | #### 3. CPU, Memory, Disks, Battery, Graphics diff --git a/docs/system.html b/docs/system.html index 08fca04..bc8dd3c 100644 --- a/docs/system.html +++ b/docs/system.html @@ -136,7 +136,7 @@ X X - hardware information + bios information @@ -186,7 +186,7 @@ X X - hardware information + baseboard information @@ -238,6 +238,86 @@ asset tag + + si.chassis(cb) + {...} + X + X + X + X + + chassis information + + + + manufacturer + X + X + X + X + + e.g. 'ASUS' + + + + model + X + X + X + X + + model / product name + + + + type + X + X + X + X + + chassis type e.g. 'desktop' + + + + version + X + X + X + X + + version + + + + serial + X + X + X + X + + serial number + + + + assetTag + X + X + X + X + + asset tag + + + + sku + X + X + X + X + + SKU number + diff --git a/lib/index.js b/lib/index.js index 4939af0..622b3d3 100644 --- a/lib/index.js +++ b/lib/index.js @@ -77,6 +77,7 @@ function getStaticData(callback) { system.system(), system.bios(), system.baseboard(), + system.chassis(), osInfo.osInfo(), osInfo.uuid(), osInfo.versions(), @@ -309,6 +310,7 @@ exports.version = version; exports.system = system.system; exports.bios = system.bios; exports.baseboard = system.baseboard; +exports.chassis = system.chassis; exports.time = osInfo.time; exports.osInfo = osInfo.osInfo; diff --git a/lib/system.js b/lib/system.js index 75c7a1a..c732704 100644 --- a/lib/system.js +++ b/lib/system.js @@ -429,4 +429,111 @@ function baseboard(callback) { exports.baseboard = baseboard; +function chassis(callback) { + const chassisTypes = ['Other', + 'Unknown', + 'Desktop', + 'Low Profile Desktop', + 'Pizza Box', + 'Mini Tower', + 'Tower', + 'Portable', + 'Laptop', + 'Notebook', + 'Hand Held', + 'Docking Station', + 'All in One', + 'Sub Notebook', + 'Space-Saving', + 'Lunch Box', + 'Main System Chassis', + 'Expansion Chassis', + 'SubChassis', + 'Bus Expansion Chassis', + 'Peripheral Chassis', + 'Storage Chassis', + 'Rack Mount Chassis', + 'Sealed-Case PC'] + + return new Promise((resolve) => { + process.nextTick(() => { + + let result = { + manufacturer: '', + model: '', + type: '', + version: '', + serial: '-', + assetTag: '-', + sku: '', + }; + let cmd = ''; + if (_linux || _freebsd || _openbsd) { + const cmd = `echo -n "chassis_asset_tag: "; cat /sys/devices/virtual/dmi/id/chassis_asset_tag 2>&1; + echo -n "chassis_serial: "; cat /sys/devices/virtual/dmi/id/chassis_serial 2>&1; + echo -n "chassis_type: "; cat /sys/devices/virtual/dmi/id/chassis_type 2>&1; + echo -n "chassis_vendor: "; cat /sys/devices/virtual/dmi/id/chassis_vendor 2>&1; + echo -n "chassis_version: "; cat /sys/devices/virtual/dmi/id/chassis_version 2>&1;`; + exec(cmd, function (error, stdout) { + let lines = stdout.toString().split('\n'); + result.manufacturer = util.getValue(lines, 'chassis_vendor'); + result.type = util.getValue(lines, 'chassis_type'); + result.version = util.getValue(lines, 'chassis_version'); + result.serial = util.getValue(lines, 'chassis_serial'); + result.assetTag = util.getValue(lines, 'chassis_asset_tag'); + if (result.serial.toLowerCase().indexOf('o.e.m.') !== -1) result.serial = '-'; + if (result.assetTag.toLowerCase().indexOf('o.e.m.') !== -1) result.assetTag = '-'; + + if (callback) { callback(result); } + resolve(result); + }); + } + if (_darwin) { + exec('ioreg -c IOPlatformExpertDevice -d 2', function (error, stdout) { + if (!error) { + let lines = stdout.toString().replace(/[<>"]/g, '').split('\n'); + result.manufacturer = util.getValue(lines, 'manufacturer', '=', true); + result.model = util.getValue(lines, 'model', '=', true); + result.version = util.getValue(lines, 'version', '=', true); + result.serial = util.getValue(lines, 'ioplatformserialnumber', '=', true); + result.assetTag = util.getValue(lines, 'board-id', '=', true); + } + + if (callback) { callback(result); } + resolve(result); + }); + } + if (_sunos) { + if (callback) { callback(result); } + resolve(result); + } + if (_windows) { + try { + exec(util.getWmic() + ' path Win32_SystemEnclosure get /value', util.execOptsWin, function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\r\n'); + + result.manufacturer = util.getValue(lines, 'manufacturer', '='); + result.model = util.getValue(lines, 'model', '='); + const ctype = parseInt(util.getValue(lines, 'ChassisTypes', '=')); + result.type = (ctype && !isNaN(ctype) && ctype < chassisTypes.length) ? chassisTypes[ctype] : ''; + result.version = util.getValue(lines, 'version', '='); + result.serial = util.getValue(lines, 'serialnumber', '='); + result.assetTag = util.getValue(lines, 'partnumber', '='); + result.sku = util.getValue(lines, 'sku', '='); + } + + if (callback) { callback(result); } + resolve(result); + }); + } catch (e) { + if (callback) { callback(result); } + resolve(result); + } + } + }); + }); +} + +exports.chassis = chassis;