systeminformation 5.31.17 → 5.32.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 +12 -7
- package/lib/audio.js +6 -5
- package/lib/battery.js +6 -2
- package/lib/bluetooth.js +6 -2
- package/lib/cpu.js +47 -39
- package/lib/docker.js +49 -62
- package/lib/dockerSocket.js +56 -261
- package/lib/filesystem.js +15 -12
- package/lib/graphics.js +134 -65
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -2
- package/lib/memory.js +6 -3
- package/lib/network.js +19 -5
- package/lib/osinfo.js +20 -9
- package/lib/printer.js +5 -5
- package/lib/processes.js +49 -15
- package/lib/system.js +3 -4
- package/lib/usb.js +0 -4
- package/lib/util.js +32 -14
- package/lib/virtualbox.js +10 -4
- package/lib/wifi.js +19 -8
- package/package.json +4 -3
package/lib/dockerSocket.js
CHANGED
|
@@ -15,307 +15,102 @@
|
|
|
15
15
|
|
|
16
16
|
const net = require('net');
|
|
17
17
|
const isWin = require('os').type() === 'Windows_NT';
|
|
18
|
-
const socketPath = isWin ? '//./pipe/docker_engine' : '/var/run/docker.sock';
|
|
18
|
+
const socketPath = process.env.DOCKER_SOCKET || (isWin ? '//./pipe/docker_engine' : '/var/run/docker.sock');
|
|
19
|
+
const socketTimeout = +process.env.DOCKER_SOCKET_TIMEOUT || 30000;
|
|
20
|
+
|
|
21
|
+
function fetchJson(path, callback) {
|
|
22
|
+
let done = false;
|
|
23
|
+
const finish = (result) => {
|
|
24
|
+
if (!done) {
|
|
25
|
+
done = true;
|
|
26
|
+
callback(result);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
try {
|
|
30
|
+
const socket = net.createConnection({ path: socketPath });
|
|
31
|
+
let alldata = '';
|
|
32
|
+
|
|
33
|
+
socket.setTimeout(socketTimeout, () => {
|
|
34
|
+
socket.destroy();
|
|
35
|
+
finish({});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
socket.on('connect', () => {
|
|
39
|
+
socket.write(`GET ${path} HTTP/1.0\r\n\r\n`);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
socket.on('data', (data) => {
|
|
43
|
+
alldata = alldata + data.toString();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
socket.on('error', () => {
|
|
47
|
+
finish({});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
socket.on('end', () => {
|
|
51
|
+
const startbody = alldata.indexOf('\r\n\r\n');
|
|
52
|
+
const status = parseInt(alldata.split(' ')[1], 10);
|
|
53
|
+
if (startbody < 0 || isNaN(status) || status < 200 || status >= 300) {
|
|
54
|
+
return finish({});
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
finish(JSON.parse(alldata.substring(startbody + 4)));
|
|
58
|
+
} catch {
|
|
59
|
+
finish({});
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
} catch {
|
|
63
|
+
finish({});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
19
66
|
|
|
20
67
|
class DockerSocket {
|
|
21
68
|
getInfo(callback) {
|
|
22
|
-
|
|
23
|
-
let socket = net.createConnection({ path: socketPath });
|
|
24
|
-
let alldata = '';
|
|
25
|
-
let data;
|
|
26
|
-
|
|
27
|
-
socket.on('connect', () => {
|
|
28
|
-
socket.write('GET http:/info HTTP/1.0\r\n\r\n');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
socket.on('data', (data) => {
|
|
32
|
-
alldata = alldata + data.toString();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
socket.on('error', () => {
|
|
36
|
-
socket = false;
|
|
37
|
-
callback({});
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
socket.on('end', () => {
|
|
41
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
42
|
-
alldata = alldata.substring(startbody + 4);
|
|
43
|
-
socket = false;
|
|
44
|
-
try {
|
|
45
|
-
data = JSON.parse(alldata);
|
|
46
|
-
callback(data);
|
|
47
|
-
} catch {
|
|
48
|
-
callback({});
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
} catch {
|
|
52
|
-
callback({});
|
|
53
|
-
}
|
|
69
|
+
fetchJson('http:/info', callback);
|
|
54
70
|
}
|
|
55
71
|
|
|
56
72
|
listImages(all, callback) {
|
|
57
|
-
|
|
58
|
-
let socket = net.createConnection({ path: socketPath });
|
|
59
|
-
let alldata = '';
|
|
60
|
-
let data;
|
|
61
|
-
|
|
62
|
-
socket.on('connect', () => {
|
|
63
|
-
socket.write('GET http:/images/json' + (all ? '?all=1' : '') + ' HTTP/1.0\r\n\r\n');
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
socket.on('data', (data) => {
|
|
67
|
-
alldata = alldata + data.toString();
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
socket.on('error', () => {
|
|
71
|
-
socket = false;
|
|
72
|
-
callback({});
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
socket.on('end', () => {
|
|
76
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
77
|
-
alldata = alldata.substring(startbody + 4);
|
|
78
|
-
socket = false;
|
|
79
|
-
try {
|
|
80
|
-
data = JSON.parse(alldata);
|
|
81
|
-
callback(data);
|
|
82
|
-
} catch {
|
|
83
|
-
callback({});
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
} catch {
|
|
87
|
-
callback({});
|
|
88
|
-
}
|
|
73
|
+
fetchJson(`http:/images/json${all ? '?all=1' : ''}`, callback);
|
|
89
74
|
}
|
|
90
75
|
|
|
91
76
|
inspectImage(id, callback) {
|
|
92
|
-
id = id || '';
|
|
93
77
|
if (id) {
|
|
94
|
-
|
|
95
|
-
let socket = net.createConnection({ path: socketPath });
|
|
96
|
-
let alldata = '';
|
|
97
|
-
let data;
|
|
98
|
-
|
|
99
|
-
socket.on('connect', () => {
|
|
100
|
-
socket.write('GET http:/images/' + id + '/json?stream=0 HTTP/1.0\r\n\r\n');
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
socket.on('data', (data) => {
|
|
104
|
-
alldata = alldata + data.toString();
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
socket.on('error', () => {
|
|
108
|
-
socket = false;
|
|
109
|
-
callback({});
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
socket.on('end', () => {
|
|
113
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
114
|
-
alldata = alldata.substring(startbody + 4);
|
|
115
|
-
socket = false;
|
|
116
|
-
try {
|
|
117
|
-
data = JSON.parse(alldata);
|
|
118
|
-
callback(data);
|
|
119
|
-
} catch {
|
|
120
|
-
callback({});
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
} catch {
|
|
124
|
-
callback({});
|
|
125
|
-
}
|
|
78
|
+
fetchJson(`http:/images/${id}/json?stream=0`, callback);
|
|
126
79
|
} else {
|
|
127
80
|
callback({});
|
|
128
81
|
}
|
|
129
82
|
}
|
|
130
83
|
|
|
131
84
|
listContainers(all, callback) {
|
|
132
|
-
|
|
133
|
-
let socket = net.createConnection({ path: socketPath });
|
|
134
|
-
let alldata = '';
|
|
135
|
-
let data;
|
|
136
|
-
|
|
137
|
-
socket.on('connect', () => {
|
|
138
|
-
socket.write('GET http:/containers/json' + (all ? '?all=1' : '') + ' HTTP/1.0\r\n\r\n');
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
socket.on('data', (data) => {
|
|
142
|
-
alldata = alldata + data.toString();
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
socket.on('error', () => {
|
|
146
|
-
socket = false;
|
|
147
|
-
callback({});
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
socket.on('end', () => {
|
|
151
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
152
|
-
alldata = alldata.substring(startbody + 4);
|
|
153
|
-
socket = false;
|
|
154
|
-
try {
|
|
155
|
-
data = JSON.parse(alldata);
|
|
156
|
-
callback(data);
|
|
157
|
-
} catch {
|
|
158
|
-
callback({});
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
} catch {
|
|
162
|
-
callback({});
|
|
163
|
-
}
|
|
85
|
+
fetchJson(`http:/containers/json${all ? '?all=1' : ''}`, callback);
|
|
164
86
|
}
|
|
165
87
|
|
|
166
88
|
getStats(id, callback) {
|
|
167
|
-
id = id || '';
|
|
168
89
|
if (id) {
|
|
169
|
-
|
|
170
|
-
let socket = net.createConnection({ path: socketPath });
|
|
171
|
-
let alldata = '';
|
|
172
|
-
let data;
|
|
173
|
-
|
|
174
|
-
socket.on('connect', () => {
|
|
175
|
-
socket.write('GET http:/containers/' + id + '/stats?stream=0 HTTP/1.0\r\n\r\n');
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
socket.on('data', (data) => {
|
|
179
|
-
alldata = alldata + data.toString();
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
socket.on('error', () => {
|
|
183
|
-
socket = false;
|
|
184
|
-
callback({});
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
socket.on('end', () => {
|
|
188
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
189
|
-
alldata = alldata.substring(startbody + 4);
|
|
190
|
-
socket = false;
|
|
191
|
-
try {
|
|
192
|
-
data = JSON.parse(alldata);
|
|
193
|
-
callback(data);
|
|
194
|
-
} catch {
|
|
195
|
-
callback({});
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
} catch {
|
|
199
|
-
callback({});
|
|
200
|
-
}
|
|
90
|
+
fetchJson(`http:/containers/${id}/stats?stream=0`, callback);
|
|
201
91
|
} else {
|
|
202
92
|
callback({});
|
|
203
93
|
}
|
|
204
94
|
}
|
|
205
95
|
|
|
206
96
|
getInspect(id, callback) {
|
|
207
|
-
id = id || '';
|
|
208
97
|
if (id) {
|
|
209
|
-
|
|
210
|
-
let socket = net.createConnection({ path: socketPath });
|
|
211
|
-
let alldata = '';
|
|
212
|
-
let data;
|
|
213
|
-
|
|
214
|
-
socket.on('connect', () => {
|
|
215
|
-
socket.write('GET http:/containers/' + id + '/json?stream=0 HTTP/1.0\r\n\r\n');
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
socket.on('data', (data) => {
|
|
219
|
-
alldata = alldata + data.toString();
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
socket.on('error', () => {
|
|
223
|
-
socket = false;
|
|
224
|
-
callback({});
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
socket.on('end', () => {
|
|
228
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
229
|
-
alldata = alldata.substring(startbody + 4);
|
|
230
|
-
socket = false;
|
|
231
|
-
try {
|
|
232
|
-
data = JSON.parse(alldata);
|
|
233
|
-
callback(data);
|
|
234
|
-
} catch {
|
|
235
|
-
callback({});
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
} catch {
|
|
239
|
-
callback({});
|
|
240
|
-
}
|
|
98
|
+
fetchJson(`http:/containers/${id}/json?stream=0`, callback);
|
|
241
99
|
} else {
|
|
242
100
|
callback({});
|
|
243
101
|
}
|
|
244
102
|
}
|
|
245
103
|
|
|
246
104
|
getProcesses(id, callback) {
|
|
247
|
-
id = id || '';
|
|
248
105
|
if (id) {
|
|
249
|
-
|
|
250
|
-
let socket = net.createConnection({ path: socketPath });
|
|
251
|
-
let alldata = '';
|
|
252
|
-
let data;
|
|
253
|
-
|
|
254
|
-
socket.on('connect', () => {
|
|
255
|
-
socket.write('GET http:/containers/' + id + '/top?ps_args=-opid,ppid,pgid,vsz,time,etime,nice,ruser,user,rgroup,group,stat,rss,args HTTP/1.0\r\n\r\n');
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
socket.on('data', (data) => {
|
|
259
|
-
alldata = alldata + data.toString();
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
socket.on('error', () => {
|
|
263
|
-
socket = false;
|
|
264
|
-
callback({});
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
socket.on('end', () => {
|
|
268
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
269
|
-
alldata = alldata.substring(startbody + 4);
|
|
270
|
-
socket = false;
|
|
271
|
-
try {
|
|
272
|
-
data = JSON.parse(alldata);
|
|
273
|
-
callback(data);
|
|
274
|
-
} catch {
|
|
275
|
-
callback({});
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
} catch {
|
|
279
|
-
callback({});
|
|
280
|
-
}
|
|
106
|
+
fetchJson(`http:/containers/${id}/top?ps_args=-opid,ppid,pgid,vsz,time,etime,nice,ruser,user,rgroup,group,stat,rss,args`, callback);
|
|
281
107
|
} else {
|
|
282
108
|
callback({});
|
|
283
109
|
}
|
|
284
110
|
}
|
|
285
111
|
|
|
286
112
|
listVolumes(callback) {
|
|
287
|
-
|
|
288
|
-
let socket = net.createConnection({ path: socketPath });
|
|
289
|
-
let alldata = '';
|
|
290
|
-
let data;
|
|
291
|
-
|
|
292
|
-
socket.on('connect', () => {
|
|
293
|
-
socket.write('GET http:/volumes HTTP/1.0\r\n\r\n');
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
socket.on('data', (data) => {
|
|
297
|
-
alldata = alldata + data.toString();
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
socket.on('error', () => {
|
|
301
|
-
socket = false;
|
|
302
|
-
callback({});
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
socket.on('end', () => {
|
|
306
|
-
const startbody = alldata.indexOf('\r\n\r\n');
|
|
307
|
-
alldata = alldata.substring(startbody + 4);
|
|
308
|
-
socket = false;
|
|
309
|
-
try {
|
|
310
|
-
data = JSON.parse(alldata);
|
|
311
|
-
callback(data);
|
|
312
|
-
} catch {
|
|
313
|
-
callback({});
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
} catch {
|
|
317
|
-
callback({});
|
|
318
|
-
}
|
|
113
|
+
fetchJson('http:/volumes', callback);
|
|
319
114
|
}
|
|
320
115
|
}
|
|
321
116
|
|
package/lib/filesystem.js
CHANGED
|
@@ -72,7 +72,7 @@ function fsSize(drive, callback) {
|
|
|
72
72
|
function filterLines(stdout) {
|
|
73
73
|
const lines = stdout.toString().split('\n');
|
|
74
74
|
lines.shift();
|
|
75
|
-
if (stdout.toString().toLowerCase().indexOf('filesystem')) {
|
|
75
|
+
if (stdout.toString().toLowerCase().indexOf('filesystem') >= 0) {
|
|
76
76
|
let removeLines = 0;
|
|
77
77
|
for (let i = 0; i < lines.length; i++) {
|
|
78
78
|
if (lines[i] && lines[i].toLowerCase().startsWith('filesystem')) {
|
|
@@ -347,7 +347,9 @@ exports.fsOpenFiles = fsOpenFiles;
|
|
|
347
347
|
// disks
|
|
348
348
|
|
|
349
349
|
function parseBytes(s) {
|
|
350
|
-
|
|
350
|
+
const start = s.indexOf(' (') + 2;
|
|
351
|
+
const end = s.indexOf(' Bytes)');
|
|
352
|
+
return parseInt(s.substr(start, end - start), 10);
|
|
351
353
|
}
|
|
352
354
|
|
|
353
355
|
function parseDevices(lines) {
|
|
@@ -842,8 +844,9 @@ function fsStats(callback) {
|
|
|
842
844
|
lines.forEach((line) => {
|
|
843
845
|
if (line !== '') {
|
|
844
846
|
line = line.trim().split(' ');
|
|
845
|
-
|
|
846
|
-
|
|
847
|
+
const dev = util.sanitizeShellString(line[0], true);
|
|
848
|
+
if (dev && fs_filter.indexOf(dev) === -1) {
|
|
849
|
+
fs_filter.push(dev);
|
|
847
850
|
}
|
|
848
851
|
}
|
|
849
852
|
});
|
|
@@ -1199,7 +1202,7 @@ function diskLayout(callback) {
|
|
|
1199
1202
|
let devices = [];
|
|
1200
1203
|
try {
|
|
1201
1204
|
const outJSON = JSON.parse(out);
|
|
1202
|
-
if (outJSON &&
|
|
1205
|
+
if (outJSON && {}.hasOwnProperty.call(outJSON, 'blockdevices')) {
|
|
1203
1206
|
devices = outJSON.blockdevices.filter((item) => {
|
|
1204
1207
|
return (
|
|
1205
1208
|
item.type === 'disk' &&
|
|
@@ -1235,8 +1238,8 @@ function diskLayout(callback) {
|
|
|
1235
1238
|
}
|
|
1236
1239
|
devices.forEach((device) => {
|
|
1237
1240
|
let mediumType = '';
|
|
1238
|
-
const
|
|
1239
|
-
const
|
|
1241
|
+
const logical = util.sanitizeShellString(device.name, true);
|
|
1242
|
+
const BSDName = '/dev/' + logical;
|
|
1240
1243
|
try {
|
|
1241
1244
|
mediumType = execSync('cat /sys/block/' + logical + '/queue/rotational 2>/dev/null', util.execOptsLinux)
|
|
1242
1245
|
.toString()
|
|
@@ -1393,7 +1396,7 @@ function diskLayout(callback) {
|
|
|
1393
1396
|
const lines = device.split('\n');
|
|
1394
1397
|
const mediumType = util.getValue(lines, 'Medium Type', ':', true).trim();
|
|
1395
1398
|
const sizeStr = util.getValue(lines, 'capacity', ':', true).trim();
|
|
1396
|
-
const BSDName = util.getValue(lines, 'BSD Name', ':', true).trim();
|
|
1399
|
+
const BSDName = util.sanitizeShellString(util.getValue(lines, 'BSD Name', ':', true).trim(), true);
|
|
1397
1400
|
if (sizeStr) {
|
|
1398
1401
|
let sizeValue = 0;
|
|
1399
1402
|
if (sizeStr.indexOf('(') >= 0) {
|
|
@@ -1449,7 +1452,7 @@ function diskLayout(callback) {
|
|
|
1449
1452
|
const lines = device.split('\n');
|
|
1450
1453
|
const linkWidth = util.getValue(lines, 'link width', ':', true).trim();
|
|
1451
1454
|
const sizeStr = util.getValue(lines, '!capacity', ':', true).trim();
|
|
1452
|
-
const BSDName = util.getValue(lines, 'BSD Name', ':', true).trim();
|
|
1455
|
+
const BSDName = util.sanitizeShellString(util.getValue(lines, 'BSD Name', ':', true).trim(), true);
|
|
1453
1456
|
if (sizeStr) {
|
|
1454
1457
|
let sizeValue = 0;
|
|
1455
1458
|
if (sizeStr.indexOf('(') >= 0) {
|
|
@@ -1497,12 +1500,12 @@ function diskLayout(callback) {
|
|
|
1497
1500
|
}
|
|
1498
1501
|
// USB Drives (older macOS report storage devices under SPUSBDataType)
|
|
1499
1502
|
try {
|
|
1500
|
-
const devices = linesUSB.join('\n').
|
|
1503
|
+
const devices = linesUSB.join('\n').replace(/Media:\n /g, 'Model:').split('\n\n Product ID:');
|
|
1501
1504
|
devices.shift();
|
|
1502
1505
|
devices.forEach((device) => {
|
|
1503
1506
|
const lines = device.split('\n');
|
|
1504
1507
|
const sizeStr = util.getValue(lines, 'Capacity', ':', true).trim();
|
|
1505
|
-
const BSDName = util.getValue(lines, 'BSD Name', ':', true).trim();
|
|
1508
|
+
const BSDName = util.sanitizeShellString(util.getValue(lines, 'BSD Name', ':', true).trim(), true);
|
|
1506
1509
|
if (sizeStr) {
|
|
1507
1510
|
let sizeValue = 0;
|
|
1508
1511
|
if (sizeStr.indexOf('(') >= 0) {
|
|
@@ -1523,7 +1526,7 @@ function diskLayout(callback) {
|
|
|
1523
1526
|
result.push({
|
|
1524
1527
|
device: BSDName,
|
|
1525
1528
|
type: 'USB',
|
|
1526
|
-
name: util.getValue(lines, 'Model', ':', true).trim().
|
|
1529
|
+
name: util.getValue(lines, 'Model', ':', true).trim().replace(/:/g, ''),
|
|
1527
1530
|
vendor: getVendorFromModel(util.getValue(lines, 'Model', ':', true).trim()),
|
|
1528
1531
|
size: sizeValue,
|
|
1529
1532
|
bytesPerSector: null,
|