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.
@@ -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
- try {
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
- try {
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
- try {
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
- try {
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
- try {
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
- try {
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
- try {
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
- try {
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
- return parseInt(s.substr(s.indexOf(' (') + 2, s.indexOf(' Bytes)') - 10), 10);
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
- if (fs_filter.indexOf(line[0]) === -1) {
846
- fs_filter.push(line[0]);
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 && Object.hasOwn(outJSON, 'blockdevices')) {
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 BSDName = '/dev/' + device.name;
1239
- const logical = device.name;
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').replaceAll('Media:\n ', 'Model:').split('\n\n Product ID:');
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().replaceAll(':', ''),
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,