systeminformation 5.13.4 → 5.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/lib/filesystem.js +42 -3
- package/lib/index.d.ts +1 -0
- package/lib/users.js +2 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -112,6 +112,7 @@ si.cpu()
|
|
|
112
112
|
|
|
113
113
|
(last 7 major and minor version releases)
|
|
114
114
|
|
|
115
|
+
- Version 5.14.0: `blockDevices()` added raid group member (linux)
|
|
115
116
|
- Version 5.13.0: `networkConnections()` added process name (mac OS)
|
|
116
117
|
- Version 5.12.0: `cpu()` added performance and efficiency cores
|
|
117
118
|
- Version 5.11.0: `networkInterfaces()` added default property and default parameter
|
|
@@ -464,6 +465,7 @@ Full function reference with examples can be found at [https://systeminformation
|
|
|
464
465
|
| | [0].serial | X | | | X | | serial |
|
|
465
466
|
| | [0].removable | X | | X | X | | serial |
|
|
466
467
|
| | [0].protocol | X | | X | | | protocol (SATA, PCI-Express, ...) |
|
|
468
|
+
| | [0].group | X | | | | | Raid group member (e.g. md1) |
|
|
467
469
|
| si.disksIO(cb) | {...} | X | | X | | | current transfer stats |
|
|
468
470
|
| | rIO | X | | X | | | read IOs on all mounted drives |
|
|
469
471
|
| | wIO | X | | X | | | write IOs on all mounted drives |
|
package/lib/filesystem.js
CHANGED
|
@@ -88,7 +88,6 @@ function fsSize(callback) {
|
|
|
88
88
|
const use = parseFloat((100.0 * (used / (used + available))).toFixed(2));
|
|
89
89
|
line.splice(0, (_linux || _freebsd || _openbsd || _netbsd) ? 6 : 5);
|
|
90
90
|
const mount = line.join(' ');
|
|
91
|
-
// const mount = line[line.length - 1];
|
|
92
91
|
if (!data.find(el => (el.fs === fs && el.type === fsType))) {
|
|
93
92
|
data.push({
|
|
94
93
|
fs,
|
|
@@ -121,7 +120,7 @@ function fsSize(callback) {
|
|
|
121
120
|
macOsDisks = [];
|
|
122
121
|
}
|
|
123
122
|
}
|
|
124
|
-
if (_linux) { cmd = 'df -lkPTx squashfs'; }
|
|
123
|
+
if (_linux) { cmd = 'df -lkPTx squashfs'; }
|
|
125
124
|
if (_freebsd || _openbsd || _netbsd) { cmd = 'df -lkPT'; }
|
|
126
125
|
exec(cmd, { maxBuffer: 1024 * 1024 }, function (error, stdout) {
|
|
127
126
|
let lines = filterLines(stdout);
|
|
@@ -343,7 +342,7 @@ function parseBlk(lines) {
|
|
|
343
342
|
'serial': disk.serial,
|
|
344
343
|
'removable': disk.rm === '1',
|
|
345
344
|
'protocol': disk.tran,
|
|
346
|
-
'group': disk.group,
|
|
345
|
+
'group': disk.group || '',
|
|
347
346
|
});
|
|
348
347
|
} catch (e) {
|
|
349
348
|
util.noop();
|
|
@@ -354,6 +353,44 @@ function parseBlk(lines) {
|
|
|
354
353
|
return data;
|
|
355
354
|
}
|
|
356
355
|
|
|
356
|
+
function decodeMdabmData(lines) {
|
|
357
|
+
const raid = util.getValue(lines, 'md_level', '=');
|
|
358
|
+
const members = [];
|
|
359
|
+
lines.forEach(line => {
|
|
360
|
+
if (line.toLowerCase().startsWith('md_device_ev') && line.toLowerCase().indexOf('/dev/') > 0) {
|
|
361
|
+
members.push(line.split('/dev/')[1]);
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
return {
|
|
365
|
+
raid,
|
|
366
|
+
members
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function raidMatchLunix(data) {
|
|
371
|
+
// for all block devices of type "raid%"
|
|
372
|
+
let result = data;
|
|
373
|
+
try {
|
|
374
|
+
data.forEach(element => {
|
|
375
|
+
if (element.type.startsWith('raid')) {
|
|
376
|
+
const lines = execSync(`mdadm --export --detail /dev/${element.name}`).toString().split('\n');
|
|
377
|
+
const mdData = decodeMdabmData(lines);
|
|
378
|
+
if (mdData.members && mdData.members.length && mdData.raid === element.type) {
|
|
379
|
+
result = result.map(blockdevice => {
|
|
380
|
+
if (blockdevice.fsType === 'linux_raid_member' && mdData.members.indexOf(blockdevice.name) >= 0) {
|
|
381
|
+
blockdevice.group = element.name;
|
|
382
|
+
}
|
|
383
|
+
return blockdevice;
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
} catch (e) {
|
|
389
|
+
util.noop();
|
|
390
|
+
}
|
|
391
|
+
return result;
|
|
392
|
+
}
|
|
393
|
+
|
|
357
394
|
function blkStdoutToObject(stdout) {
|
|
358
395
|
return stdout.toString()
|
|
359
396
|
.replace(/NAME=/g, '{"name":')
|
|
@@ -386,6 +423,7 @@ function blockDevices(callback) {
|
|
|
386
423
|
if (!error) {
|
|
387
424
|
let lines = blkStdoutToObject(stdout).split('\n');
|
|
388
425
|
data = parseBlk(lines);
|
|
426
|
+
data = raidMatchLunix(data);
|
|
389
427
|
if (callback) {
|
|
390
428
|
callback(data);
|
|
391
429
|
}
|
|
@@ -395,6 +433,7 @@ function blockDevices(callback) {
|
|
|
395
433
|
if (!error) {
|
|
396
434
|
let lines = blkStdoutToObject(stdout).split('\n');
|
|
397
435
|
data = parseBlk(lines);
|
|
436
|
+
data = raidMatchLunix(data);
|
|
398
437
|
}
|
|
399
438
|
if (callback) {
|
|
400
439
|
callback(data);
|
package/lib/index.d.ts
CHANGED
package/lib/users.js
CHANGED
|
@@ -209,8 +209,7 @@ function users(callback) {
|
|
|
209
209
|
try {
|
|
210
210
|
let cmd = 'Get-CimInstance Win32_LogonSession | select LogonId,@{n="StartTime";e={$_.StartTime.ToString("yyyy-MM-dd HH:mm:ss")}} | fl' + '; echo \'#-#-#-#\';';
|
|
211
211
|
cmd += 'Get-CimInstance Win32_LoggedOnUser | select antecedent,dependent | fl ' + '; echo \'#-#-#-#\';';
|
|
212
|
-
|
|
213
|
-
cmd += '$process = (Get-CimInstance Win32_Process -Filter "name = \'explorer.exe\'"); Invoke-CimMethod -InputObject $process -MethodName GetOwner | select user, domain | fl; get-process -name explorer | select-object sessionid | fl; echo \'# -# -# -#\';';
|
|
212
|
+
cmd += '$process = (Get-CimInstance Win32_Process -Filter "name = \'explorer.exe\'"); Invoke-CimMethod -InputObject $process -MethodName GetOwner | select user, domain | fl; get-process -name explorer | select-object sessionid | fl; echo \'#-#-#-#\';';
|
|
214
213
|
cmd += 'query user';
|
|
215
214
|
util.powerShell(cmd).then((data) => {
|
|
216
215
|
if (data) {
|
|
@@ -257,17 +256,6 @@ function users(callback) {
|
|
|
257
256
|
});
|
|
258
257
|
}
|
|
259
258
|
|
|
260
|
-
// function parseWinAccounts(accountParts) {
|
|
261
|
-
// const accounts = [];
|
|
262
|
-
// accountParts.forEach(account => {
|
|
263
|
-
// const lines = account.split('\r\n');
|
|
264
|
-
// const name = util.getValue(lines, 'name', ':', true);
|
|
265
|
-
// const domain = util.getValue(lines, 'domain', ':', true);
|
|
266
|
-
// accounts.push(`${domain}\${name}`);
|
|
267
|
-
// });
|
|
268
|
-
// return accounts;
|
|
269
|
-
// }
|
|
270
|
-
|
|
271
259
|
function parseWinSessions(sessionParts) {
|
|
272
260
|
const sessions = {};
|
|
273
261
|
sessionParts.forEach(session => {
|
|
@@ -325,7 +313,7 @@ function parseWinLoggedOn(loggedonParts) {
|
|
|
325
313
|
const antecendent = util.getValue(lines, 'antecedent', ':', true);
|
|
326
314
|
let parts = antecendent.split('=');
|
|
327
315
|
const name = parts.length > 2 ? parts[1].split(',')[0].replace(/"/g, '').trim() : '';
|
|
328
|
-
const domain = parts.length > 2 ? parts[2].replace(/"/g, '').trim() : '';
|
|
316
|
+
const domain = parts.length > 2 ? parts[2].replace(/"/g, '').replace(/\)/g, '').trim() : '';
|
|
329
317
|
const dependent = util.getValue(lines, 'dependent', ':', true);
|
|
330
318
|
parts = dependent.split('=');
|
|
331
319
|
const id = parts.length > 1 ? parts[1].replace(/"/g, '').replace(/\)/g, '').trim() : '';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "systeminformation",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.14.0",
|
|
4
4
|
"description": "Advanced, lightweight system and OS information library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Sebastian Hildebrandt <hildebrandt@plus-innovations.com> (https://plus-innovations.com)",
|