Major and Breaking Changes
-To see detaild information on major und breaking changes for version 5.x, refer to the Version 5 - Changes page.
Be aware version 5 is NOT fully backward compatible to version 4.x ...
To see detaild information on major und breaking changes for version 5.x, refer to the Version 5 - Changes page.
Be aware version 5 is NOT fully backward compatible to version 4.x ...
Full version history
| si.printer(cb) | -{...} | +[{...}] | X | X | @@ -78,7 +78,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | id | +[0].id | X | X | @@ -88,7 +88,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | name | +[0].name | X | X | @@ -98,7 +98,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | model | +[0].model | X | X | @@ -108,7 +108,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | uri | +[0].uri | X | X | @@ -118,7 +118,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | uuid | +[0].uuid | X | X | @@ -128,7 +128,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | status | +[0].status | X | X | @@ -138,7 +138,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | local | +[0].local | X | X | @@ -148,7 +148,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | default | +[0].default | X | X | @@ -158,7 +158,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - | shared | +[0].shared | X | X | @@ -223,7 +223,7 @@ si.printer().then(data => console.log(data));|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Function | +Result object | +Linux | +BSD | +Mac | +Win | +Sun | +Comments | +
|---|---|---|---|---|---|---|---|
| si.usb(cb) | +[{...}] | +X | ++ | X | +X | ++ | array detected USB devices | +
| + | [0].bus | +X | ++ | X | +X | ++ | USB bus | +
| + | [0].deviceId | +X | ++ | X | +X | ++ | Bus device ID | +
| + | [0].id | +X | ++ | X | +X | ++ | ID e.g. 0bda:8821 | +
| + | [0].name | +X | ++ | X | +X | ++ | name, e.g. root hub | +
| + | [0].type | +X | ++ | X | +X | ++ | type e.g. keyboard or mouse | +
| + | [0].removable | +X | ++ | X | +X | ++ | is removable | +
| + | [0].vendor | +X | ++ | X | +X | ++ | vendor e.g. Realtek | +
| + | [0].manufacturer | +X | ++ | X | +X | ++ | manufacturer e.g. Chicony | +
| + | [0].maxPower | +X | ++ | X | +X | ++ | max power e.g. 100mA | +
| + | [0].serialNumber | +X | ++ | X | +X | ++ | serial number if available | +
| + |
+ Example+
+
+[
+ {
+ bus: 1,
+ deviceId: 2,
+ id: '8087:8001',
+ name: '',
+ type: 'Hub',
+ removable: null,
+ vendor: 'Intel Corp.',
+ manufacturer: '',
+ maxPower: '0mA',
+ serialNumber: null
+ },
+ {
+ bus: 1,
+ deviceId: 1,
+ id: '1d6b:0002',
+ name: '2.0 root hub',
+ type: 'Hub',
+ removable: null,
+ vendor: 'Linux Foundation',
+ manufacturer: 'Linux 4.4.0-169-generic ehci_hcd',
+ maxPower: '0mA',
+ serialNumber: null
+ },
+ {
+ bus: 2,
+ deviceId: 4,
+ id: '04f2:0402',
+ name: 'Genius LuxeMate i200 Keyboard',
+ type: 'Keyboard',
+ removable: null,
+ vendor: 'Chicony Electronics Co., Ltd',
+ manufacturer: 'Chicony',
+ maxPower: '100mA',
+ serialNumber: null
+ },
+ {
+ bus: 2,
+ deviceId: 3,
+ id: '093a:2510',
+ name: 'Optical Mouse',
+ type: 'Mouse',
+ removable: null,
+ vendor: 'Pixart Imaging, Inc.',
+ manufacturer: 'PIXART',
+ maxPower: '100mA',
+ serialNumber: null }
+]
+ | ||||||
- Quick Start -
- Version 5 Changes +
- Version 5 Changes
- Full Version history
- Known Issues
- Stats Functions diff --git a/docs/wifi.html b/docs/wifi.html index 51f35bf..405b730 100644 --- a/docs/wifi.html +++ b/docs/wifi.html @@ -237,7 +237,7 @@ si.wifiNetworks().then(data => console.log(data));
- Quick Start -
- Version 5 Changes +
- Version 5 Changes
- Full Version history
- Known Issues
- Stats Functions diff --git a/lib/internet.js b/lib/internet.js index 1cc520c..1d815ba 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -163,11 +163,13 @@ function inetLatency(host, callback) { }); } if (_sunos) { - const params = '-s -a ' + hostSanitized + ' 56 2 | grep avg'; + const params = '-s -a ' + hostSanitized + ' 56 2'; + const filt = 'avg'; execFile('ping', params.split(' '), { timeout: 3000 }, function (error, stdout) { let result = null; if (!error) { - const line = stdout.toString().split('='); + const lines = stdout.toString().split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); + const line = lines.split('='); if (line.length > 1) { const parts = line[1].split('/'); if (parts.length > 1) { diff --git a/lib/usb.js b/lib/usb.js index ef0143f..f4fdb7c 100644 --- a/lib/usb.js +++ b/lib/usb.js @@ -117,6 +117,7 @@ function getDarwinUsbType(name) { else if (name.indexOf(' hub') >= 0) { result = 'Hub'; } else if (name.indexOf('mouse') >= 0) { result = 'Mouse'; } else if (name.indexOf('mic') >= 0) { result = 'Microphone'; } + else if (name.indexOf('removable') >= 0) { result = 'Storage'; } return result; } @@ -140,13 +141,14 @@ function parseDarwinUsb(usb, id) { lines[i] = lines[i].replace(': No,', ': "No",'); } const usbObj = JSON.parse(lines.join('\n')); + const removableDrive = usbObj['Built-In'].toLowerCase() !== 'yes' && usbObj['non-removable'].toLowerCase() === 'no'; result.bus = null; result.deviceId = null; result.id = usbObj['USB Address'] || null; result.name = usbObj['kUSBProductString'] || usbObj['USB Product Name'] || null; - result.type = getDarwinUsbType((usbObj['kUSBProductString'] || usbObj['USB Product Name'] || '').toLowerCase()); - result.removable = usbObj['Built-In'].toLowerCase() !== 'yes'; + result.type = getDarwinUsbType((usbObj['kUSBProductString'] || usbObj['USB Product Name'] || '').toLowerCase() + (removableDrive ? ' removable' : '')); + result.removable = usbObj['non-removable'].toLowerCase() === 'no'; result.vendor = usbObj['kUSBVendorString'] || usbObj['USB Vendor Name'] || null; result.manufacturer = usbObj['kUSBVendorString'] || usbObj['USB Vendor Name'] || null; result.maxPower = null; diff --git a/test/si.js b/test/si.js index b49ad6a..e9cfad0 100644 --- a/test/si.js +++ b/test/si.js @@ -3,6 +3,7 @@ const si = require('../lib/index'); function test(f) { return new Promise((resolve) => { process.nextTick(() => { + // console.log(f); if (f === 'a') { si.audio().then(data => resolve({ data, title: 'Audio' }) )} else if (f === 'b') { si.bios().then(data => resolve({ data, title: 'BIOS' })) } else if (f === 'B') { si.baseboard().then(data => resolve({ data, title: 'Baseboard' })) } @@ -37,12 +38,34 @@ function test(f) { else if (f === 'w') { si.wifiNetworks().then(data => resolve({ data, title: 'WIFI Networks' })) } else if (f === 'y') { si.battery().then(data => resolve({ data, title: 'Battery' })) } else if (f === 'z') { si.users().then(data => resolve({ data, title: 'Users' })) } - else resolve(); + else if (f === '1') { si.networkInterfaceDefault().then(data => resolve({ data, title: 'NET Iface Default' })) } + else if (f === '2') { si.networkGatewayDefault().then(data => resolve({ data, title: 'NET Gateway Default' })) } + else if (f === '3') { si.networkInterfaces().then(data => resolve({ data, title: 'NET Interfaces' })) } + else if (f === '4') { si.networkStats().then(data => resolve({ data, title: 'NET Stats' })) } + else if (f === '5') { si.networkConnections().then(data => resolve({ data, title: 'NET Connections' })) } + else if (f === '6') { si.dockerInfo().then(data => resolve({ data, title: 'Docker Info' })) } + else if (f === '7') { si.dockerContainers(true).then(data => resolve({ data, title: 'Docker Containers' })) } + else if (f === '8') { si.dockerContainerStats('1').then(data => resolve({ data, title: 'Docker Cont Stats' })) } + else if (f === '9') { si.dockerContainerProcesses('1').then(data => resolve({ data, title: 'Docker Cont Processes' })) } + else if (f === '0') { si.dockerAll().then(data => resolve({ data, title: 'Docker All' })) } + else if (f === '+') { si.getStaticData().then(data => resolve({ data, title: 'All Static Data' })) } + else if (f === '-') { si.getDynamicData('apache2, postgres').then(data => resolve({ data, title: 'All Dynamic Data' })) } + else if (f === '#') { si.getAllData('apache2, postgres').then(data => resolve({ data, title: 'All Data' })) } + else if (f === ',') { + const valueObject = { + cpu: '*', + osInfo: 'platform, release', + system: 'model, manufacturer' + } + si.get(valueObject).then(data => resolve({ data, title: 'Get Object' })) + } + else resolve('no_key'); }) }) } const key = process.argv[2]; +// console.log(process.argv) // console.log(process.argv); diff --git a/test/test.js b/test/test.js index 9462f06..9b45f4d 100644 --- a/test/test.js +++ b/test/test.js @@ -2,6 +2,9 @@ const readline = require('readline'); const util = require('util'); const { exec } = require('child_process'); +let waiting = false; +let timer; + function printMenu() { console.log(''); console.log('-----------------------------------------------------------------------------------------------------------------------------------'); @@ -29,28 +32,66 @@ function EnableUserInput() { // } function noop() { } -process.stdin.on('keypress', (key, data) => { - // console.log(data); - if (data.name === 'q' && !data.shift) { - // shut down - process.exit() - } +function dot() { + process.stdout.write('.'); +} - exec('node si.js ' + key, (error, stdout) => { - try { - if (stdout.toString()) { - data = JSON.parse(stdout.toString()); +function startDots() { + dot(); + timer = setInterval(() => { + dot(); + }, 500) +} + +function stopDots() { + clearInterval(timer); +} + +function printTitle(title) { + title = '||' + (' ' + title + ' ').substr(0, 36) + '||' + console.log('========================================'); + console.log(title); + console.log('========================================'); + +} + +process.stdin.on('keypress', (key, data) => { + // console.log(data); + if (data.name === 'q' && !data.shift) { + // shut down + process.exit() + } + + if (!waiting) { + waiting = true; + startDots(); + exec(`node si.js '${key}'`, {timeout: 30000}, (error, stdout) => { + waiting = false; + stopDots(); + if (error && error.signal) { console.log(); - console.log('==============================='); - console.log('[ ' + data.title + ' ]'); - console.log('==============================='); - console.log(util.inspect(data.data, { colors: true, depth: 4 })); - printMenu(); + console.log('TIMEOUT!'); + } else { + try { + if (stdout.toString().startsWith('"no_key')) { + console.log() + console.log('menu item not found - select valid menu item') + } else if (stdout.toString()) { + data = JSON.parse(stdout.toString()); + console.log(); + console.log(); + printTitle(data.title); + console.log(util.inspect(data.data, { colors: true, depth: 4 })); + printMenu(); + } + } catch (e) { + console.log(); + console.log('Key: ' + key); + console.log('ERROR - UNSUPPORTET'); + } } - } catch (e) { - noop(); - } }) + } }); printMenu();