systeminformation 5.28.9 → 5.29.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/LICENSE +1 -1
- package/README.md +3 -2
- package/lib/audio.js +1 -1
- package/lib/battery.js +1 -1
- package/lib/bluetooth.js +1 -1
- package/lib/cli.js +1 -1
- package/lib/cpu.js +1 -1
- package/lib/docker.js +138 -101
- package/lib/dockerSocket.js +9 -14
- package/lib/filesystem.js +1 -1
- package/lib/graphics.js +2 -2
- package/lib/index.js +1 -1
- package/lib/internet.js +67 -27
- package/lib/memory.js +249 -202
- package/lib/network.js +1 -1
- package/lib/osinfo.js +110 -77
- package/lib/printer.js +10 -11
- package/lib/processes.js +1 -1
- package/lib/system.js +2 -2
- package/lib/usb.js +79 -45
- package/lib/users.js +67 -43
- package/lib/util.js +1 -1
- package/lib/virtualbox.js +9 -6
- package/lib/wifi.js +1 -1
- package/package.json +1 -1
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2014-
|
|
3
|
+
Copyright (c) 2014-2026 Sebastian Hildebrandt
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
6
|
this software and associated documentation files (the "Software"), to deal in
|
package/README.md
CHANGED
|
@@ -185,6 +185,7 @@ si.cpu()
|
|
|
185
185
|
|
|
186
186
|
(last 7 major and minor version releases)
|
|
187
187
|
|
|
188
|
+
- Version 5.29.0: `osInfo()` added OS code name (windows)
|
|
188
189
|
- Version 5.28.0: `cpuTemperature()` added suppurt for macos-temperature-sensor (macOS)
|
|
189
190
|
- Version 5.27.0: `mem()` added reclaimable memory
|
|
190
191
|
- Version 5.26.0: `getStatic()`, `getAll()` added usb, audio, bluetooth, printer
|
|
@@ -453,7 +454,7 @@ Full function reference with examples can be found at
|
|
|
453
454
|
| | platform | X | X | X | X | X | 'linux', 'darwin', 'Windows', ... |
|
|
454
455
|
| | distro | X | X | X | X | X | |
|
|
455
456
|
| | release | X | X | X | X | X | |
|
|
456
|
-
| | codename | X | | X |
|
|
457
|
+
| | codename | X | | X | X | | |
|
|
457
458
|
| | kernel | X | X | X | X | X | kernel release - same as os.release() |
|
|
458
459
|
| | arch | X | X | X | X | X | same as os.arch() |
|
|
459
460
|
| | hostname | X | X | X | X | X | same as os.hostname() |
|
|
@@ -1177,7 +1178,7 @@ All other trademarks are the property of their respective owners.
|
|
|
1177
1178
|
|
|
1178
1179
|
> The [`MIT`][license-url] License (MIT)
|
|
1179
1180
|
>
|
|
1180
|
-
> Copyright © 2014-
|
|
1181
|
+
> Copyright © 2014-2026 Sebastian Hildebrandt,
|
|
1181
1182
|
> [+innovations](http://www.plus-innovations.com).
|
|
1182
1183
|
>
|
|
1183
1184
|
> Permission is hereby granted, free of charge, to any person obtaining a copy
|
package/lib/audio.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// ----------------------------------------------------------------------------------
|
|
6
6
|
// Description: System Information - library
|
|
7
7
|
// for Node.js
|
|
8
|
-
// Copyright: (c) 2014 -
|
|
8
|
+
// Copyright: (c) 2014 - 2026
|
|
9
9
|
// Author: Sebastian Hildebrandt
|
|
10
10
|
// ----------------------------------------------------------------------------------
|
|
11
11
|
// License: MIT
|
package/lib/battery.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// ----------------------------------------------------------------------------------
|
|
6
6
|
// Description: System Information - library
|
|
7
7
|
// for Node.js
|
|
8
|
-
// Copyright: (c) 2014 -
|
|
8
|
+
// Copyright: (c) 2014 - 2026
|
|
9
9
|
// Author: Sebastian Hildebrandt
|
|
10
10
|
// ----------------------------------------------------------------------------------
|
|
11
11
|
// License: MIT
|
package/lib/bluetooth.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// ----------------------------------------------------------------------------------
|
|
6
6
|
// Description: System Information - library
|
|
7
7
|
// for Node.js
|
|
8
|
-
// Copyright: (c) 2014 -
|
|
8
|
+
// Copyright: (c) 2014 - 2026
|
|
9
9
|
// Author: Sebastian Hildebrandt
|
|
10
10
|
// ----------------------------------------------------------------------------------
|
|
11
11
|
// License: MIT
|
package/lib/cli.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// ----------------------------------------------------------------------------------
|
|
8
8
|
// Description: System Information - library
|
|
9
9
|
// for Node.js
|
|
10
|
-
// Copyright: (c) 2014 -
|
|
10
|
+
// Copyright: (c) 2014 - 2026
|
|
11
11
|
// Author: Sebastian Hildebrandt
|
|
12
12
|
// ----------------------------------------------------------------------------------
|
|
13
13
|
// License: MIT
|
package/lib/cpu.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// ----------------------------------------------------------------------------------
|
|
6
6
|
// Description: System Information - library
|
|
7
7
|
// for Node.js
|
|
8
|
-
// Copyright: (c) 2014 -
|
|
8
|
+
// Copyright: (c) 2014 - 2026
|
|
9
9
|
// Author: Sebastian Hildebrandt
|
|
10
10
|
// ----------------------------------------------------------------------------------
|
|
11
11
|
// License: MIT
|
package/lib/docker.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// ----------------------------------------------------------------------------------
|
|
6
6
|
// Description: System Information - library
|
|
7
7
|
// for Node.js
|
|
8
|
-
// Copyright: (c) 2014 -
|
|
8
|
+
// Copyright: (c) 2014 - 2026
|
|
9
9
|
// Author: Sebastian Hildebrandt
|
|
10
10
|
// ----------------------------------------------------------------------------------
|
|
11
11
|
// License: MIT
|
|
@@ -17,13 +17,12 @@ const util = require('./util');
|
|
|
17
17
|
const DockerSocket = require('./dockerSocket');
|
|
18
18
|
|
|
19
19
|
let _platform = process.platform;
|
|
20
|
-
const _windows =
|
|
20
|
+
const _windows = _platform === 'win32';
|
|
21
21
|
|
|
22
22
|
let _docker_container_stats = {};
|
|
23
23
|
let _docker_socket;
|
|
24
24
|
let _docker_last_read = 0;
|
|
25
25
|
|
|
26
|
-
|
|
27
26
|
// --------------------------
|
|
28
27
|
// get containers (parameter all: get also inactive/exited containers)
|
|
29
28
|
|
|
@@ -82,7 +81,9 @@ function dockerInfo(callback) {
|
|
|
82
81
|
result.isolation = data.Isolation;
|
|
83
82
|
result.initBinary = data.InitBinary;
|
|
84
83
|
result.productLicense = data.ProductLicense;
|
|
85
|
-
if (callback) {
|
|
84
|
+
if (callback) {
|
|
85
|
+
callback(result);
|
|
86
|
+
}
|
|
86
87
|
resolve(result);
|
|
87
88
|
});
|
|
88
89
|
});
|
|
@@ -92,7 +93,6 @@ function dockerInfo(callback) {
|
|
|
92
93
|
exports.dockerInfo = dockerInfo;
|
|
93
94
|
|
|
94
95
|
function dockerImages(all, callback) {
|
|
95
|
-
|
|
96
96
|
// fallback - if only callback is given
|
|
97
97
|
if (util.isFunction(all) && !callback) {
|
|
98
98
|
callback = all;
|
|
@@ -114,36 +114,40 @@ function dockerImages(all, callback) {
|
|
|
114
114
|
}
|
|
115
115
|
const workload = [];
|
|
116
116
|
|
|
117
|
-
_docker_socket.listImages(all, data => {
|
|
117
|
+
_docker_socket.listImages(all, (data) => {
|
|
118
118
|
let dockerImages = {};
|
|
119
119
|
try {
|
|
120
120
|
dockerImages = data;
|
|
121
121
|
if (dockerImages && Object.prototype.toString.call(dockerImages) === '[object Array]' && dockerImages.length > 0) {
|
|
122
|
-
|
|
123
122
|
dockerImages.forEach(function (element) {
|
|
124
|
-
|
|
125
123
|
if (element.Names && Object.prototype.toString.call(element.Names) === '[object Array]' && element.Names.length > 0) {
|
|
126
124
|
element.Name = element.Names[0].replace(/^\/|\/$/g, '');
|
|
127
125
|
}
|
|
128
126
|
workload.push(dockerImagesInspect(element.Id.trim(), element));
|
|
129
127
|
});
|
|
130
128
|
if (workload.length) {
|
|
131
|
-
Promise.all(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
129
|
+
Promise.all(workload).then((data) => {
|
|
130
|
+
if (callback) {
|
|
131
|
+
callback(data);
|
|
132
|
+
}
|
|
135
133
|
resolve(data);
|
|
136
134
|
});
|
|
137
135
|
} else {
|
|
138
|
-
if (callback) {
|
|
136
|
+
if (callback) {
|
|
137
|
+
callback(result);
|
|
138
|
+
}
|
|
139
139
|
resolve(result);
|
|
140
140
|
}
|
|
141
141
|
} else {
|
|
142
|
-
if (callback) {
|
|
142
|
+
if (callback) {
|
|
143
|
+
callback(result);
|
|
144
|
+
}
|
|
143
145
|
resolve(result);
|
|
144
146
|
}
|
|
145
147
|
} catch (err) {
|
|
146
|
-
if (callback) {
|
|
148
|
+
if (callback) {
|
|
149
|
+
callback(result);
|
|
150
|
+
}
|
|
147
151
|
resolve(result);
|
|
148
152
|
}
|
|
149
153
|
});
|
|
@@ -163,12 +167,11 @@ function dockerImagesInspect(imageID, payload) {
|
|
|
163
167
|
}
|
|
164
168
|
const imageIDSanitized = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(imageID, true)).trim();
|
|
165
169
|
if (imageIDSanitized) {
|
|
166
|
-
|
|
167
170
|
if (!_docker_socket) {
|
|
168
171
|
_docker_socket = new DockerSocket();
|
|
169
172
|
}
|
|
170
173
|
|
|
171
|
-
_docker_socket.inspectImage(imageIDSanitized.trim(), data => {
|
|
174
|
+
_docker_socket.inspectImage(imageIDSanitized.trim(), (data) => {
|
|
172
175
|
try {
|
|
173
176
|
resolve({
|
|
174
177
|
id: payload.Id,
|
|
@@ -188,7 +191,7 @@ function dockerImagesInspect(imageID, payload) {
|
|
|
188
191
|
repoDigests: data.RepoDigests ? data.RepoDigests : {},
|
|
189
192
|
repoTags: data.RepoTags ? data.RepoTags : {},
|
|
190
193
|
config: data.Config ? data.Config : {},
|
|
191
|
-
rootFS: data.RootFS ? data.RootFS : {}
|
|
194
|
+
rootFS: data.RootFS ? data.RootFS : {}
|
|
192
195
|
});
|
|
193
196
|
} catch (err) {
|
|
194
197
|
resolve();
|
|
@@ -204,16 +207,15 @@ function dockerImagesInspect(imageID, payload) {
|
|
|
204
207
|
exports.dockerImages = dockerImages;
|
|
205
208
|
|
|
206
209
|
function dockerContainers(all, callback) {
|
|
207
|
-
|
|
208
210
|
function inContainers(containers, id) {
|
|
209
|
-
let filtered = containers.filter(obj => {
|
|
211
|
+
let filtered = containers.filter((obj) => {
|
|
210
212
|
/**
|
|
211
213
|
* @namespace
|
|
212
214
|
* @property {string} Id
|
|
213
215
|
*/
|
|
214
|
-
return
|
|
216
|
+
return obj.Id && obj.Id === id;
|
|
215
217
|
});
|
|
216
|
-
return
|
|
218
|
+
return filtered.length > 0;
|
|
217
219
|
}
|
|
218
220
|
|
|
219
221
|
// fallback - if only callback is given
|
|
@@ -237,7 +239,7 @@ function dockerContainers(all, callback) {
|
|
|
237
239
|
}
|
|
238
240
|
const workload = [];
|
|
239
241
|
|
|
240
|
-
_docker_socket.listContainers(all, data => {
|
|
242
|
+
_docker_socket.listContainers(all, (data) => {
|
|
241
243
|
let docker_containers = {};
|
|
242
244
|
try {
|
|
243
245
|
docker_containers = data;
|
|
@@ -245,40 +247,49 @@ function dockerContainers(all, callback) {
|
|
|
245
247
|
// GC in _docker_container_stats
|
|
246
248
|
for (let key in _docker_container_stats) {
|
|
247
249
|
if ({}.hasOwnProperty.call(_docker_container_stats, key)) {
|
|
248
|
-
if (!inContainers(docker_containers, key)) {
|
|
250
|
+
if (!inContainers(docker_containers, key)) {
|
|
251
|
+
delete _docker_container_stats[key];
|
|
252
|
+
}
|
|
249
253
|
}
|
|
250
254
|
}
|
|
251
255
|
|
|
252
256
|
docker_containers.forEach(function (element) {
|
|
253
|
-
|
|
254
257
|
if (element.Names && Object.prototype.toString.call(element.Names) === '[object Array]' && element.Names.length > 0) {
|
|
255
258
|
element.Name = element.Names[0].replace(/^\/|\/$/g, '');
|
|
256
259
|
}
|
|
257
260
|
workload.push(dockerContainerInspect(element.Id.trim(), element));
|
|
258
261
|
});
|
|
259
262
|
if (workload.length) {
|
|
260
|
-
Promise.all(
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
263
|
+
Promise.all(workload).then((data) => {
|
|
264
|
+
if (callback) {
|
|
265
|
+
callback(data);
|
|
266
|
+
}
|
|
264
267
|
resolve(data);
|
|
265
268
|
});
|
|
266
269
|
} else {
|
|
267
|
-
if (callback) {
|
|
270
|
+
if (callback) {
|
|
271
|
+
callback(result);
|
|
272
|
+
}
|
|
268
273
|
resolve(result);
|
|
269
274
|
}
|
|
270
275
|
} else {
|
|
271
|
-
if (callback) {
|
|
276
|
+
if (callback) {
|
|
277
|
+
callback(result);
|
|
278
|
+
}
|
|
272
279
|
resolve(result);
|
|
273
280
|
}
|
|
274
281
|
} catch (err) {
|
|
275
282
|
// GC in _docker_container_stats
|
|
276
283
|
for (let key in _docker_container_stats) {
|
|
277
284
|
if ({}.hasOwnProperty.call(_docker_container_stats, key)) {
|
|
278
|
-
if (!inContainers(docker_containers, key)) {
|
|
285
|
+
if (!inContainers(docker_containers, key)) {
|
|
286
|
+
delete _docker_container_stats[key];
|
|
287
|
+
}
|
|
279
288
|
}
|
|
280
289
|
}
|
|
281
|
-
if (callback) {
|
|
290
|
+
if (callback) {
|
|
291
|
+
callback(result);
|
|
292
|
+
}
|
|
282
293
|
resolve(result);
|
|
283
294
|
}
|
|
284
295
|
});
|
|
@@ -298,12 +309,11 @@ function dockerContainerInspect(containerID, payload) {
|
|
|
298
309
|
}
|
|
299
310
|
const containerIdSanitized = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(containerID, true)).trim();
|
|
300
311
|
if (containerIdSanitized) {
|
|
301
|
-
|
|
302
312
|
if (!_docker_socket) {
|
|
303
313
|
_docker_socket = new DockerSocket();
|
|
304
314
|
}
|
|
305
315
|
|
|
306
|
-
_docker_socket.getInspect(containerIdSanitized.trim(), data => {
|
|
316
|
+
_docker_socket.getInspect(containerIdSanitized.trim(), (data) => {
|
|
307
317
|
try {
|
|
308
318
|
resolve({
|
|
309
319
|
id: payload.Id,
|
|
@@ -322,7 +332,7 @@ function dockerContainerInspect(containerID, payload) {
|
|
|
322
332
|
platform: data.Platform || '',
|
|
323
333
|
driver: data.Driver || '',
|
|
324
334
|
ports: payload.Ports,
|
|
325
|
-
mounts: payload.Mounts
|
|
335
|
+
mounts: payload.Mounts
|
|
326
336
|
// hostconfig: payload.HostConfig,
|
|
327
337
|
// network: payload.NetworkSettings
|
|
328
338
|
});
|
|
@@ -363,8 +373,7 @@ function docker_calcCPUPercent(cpu_stats, precpu_stats) {
|
|
|
363
373
|
// calculate the change for the cpu usage of the container in between readings
|
|
364
374
|
if (precpu_stats.online_cpus) {
|
|
365
375
|
cpuPercent = (cpuDelta / systemDelta) * precpu_stats.online_cpus * 100.0;
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
376
|
+
} else {
|
|
368
377
|
cpuPercent = (cpuDelta / systemDelta) * cpu_stats.cpu_usage.percpu_usage.length * 100.0;
|
|
369
378
|
}
|
|
370
379
|
}
|
|
@@ -374,10 +383,10 @@ function docker_calcCPUPercent(cpu_stats, precpu_stats) {
|
|
|
374
383
|
let nanoSecNow = util.nanoSeconds();
|
|
375
384
|
let cpuPercent = 0.0;
|
|
376
385
|
if (_docker_last_read > 0) {
|
|
377
|
-
let possIntervals =
|
|
386
|
+
let possIntervals = nanoSecNow - _docker_last_read; // / 100 * os.cpus().length;
|
|
378
387
|
let intervalsUsed = cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage;
|
|
379
388
|
if (possIntervals > 0) {
|
|
380
|
-
cpuPercent = 100.0 * intervalsUsed / possIntervals;
|
|
389
|
+
cpuPercent = (100.0 * intervalsUsed) / possIntervals;
|
|
381
390
|
}
|
|
382
391
|
}
|
|
383
392
|
_docker_last_read = nanoSecNow;
|
|
@@ -390,7 +399,9 @@ function docker_calcNetworkIO(networks) {
|
|
|
390
399
|
let wx;
|
|
391
400
|
for (let key in networks) {
|
|
392
401
|
// skip loop if the property is from prototype
|
|
393
|
-
if (!{}.hasOwnProperty.call(networks, key)) {
|
|
402
|
+
if (!{}.hasOwnProperty.call(networks, key)) {
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
394
405
|
|
|
395
406
|
/**
|
|
396
407
|
* @namespace
|
|
@@ -417,7 +428,12 @@ function docker_calcBlockIO(blkio_stats) {
|
|
|
417
428
|
* @namespace
|
|
418
429
|
* @property {Array} io_service_bytes_recursive
|
|
419
430
|
*/
|
|
420
|
-
if (
|
|
431
|
+
if (
|
|
432
|
+
blkio_stats &&
|
|
433
|
+
blkio_stats.io_service_bytes_recursive &&
|
|
434
|
+
Object.prototype.toString.call(blkio_stats.io_service_bytes_recursive) === '[object Array]' &&
|
|
435
|
+
blkio_stats.io_service_bytes_recursive.length > 0
|
|
436
|
+
) {
|
|
421
437
|
blkio_stats.io_service_bytes_recursive.forEach(function (element) {
|
|
422
438
|
/**
|
|
423
439
|
* @namespace
|
|
@@ -437,11 +453,9 @@ function docker_calcBlockIO(blkio_stats) {
|
|
|
437
453
|
}
|
|
438
454
|
|
|
439
455
|
function dockerContainerStats(containerIDs, callback) {
|
|
440
|
-
|
|
441
456
|
let containerArray = [];
|
|
442
457
|
return new Promise((resolve) => {
|
|
443
458
|
process.nextTick(() => {
|
|
444
|
-
|
|
445
459
|
// fallback - if only callback is given
|
|
446
460
|
if (util.isFunction(containerIDs) && !callback) {
|
|
447
461
|
callback = containerIDs;
|
|
@@ -449,7 +463,9 @@ function dockerContainerStats(containerIDs, callback) {
|
|
|
449
463
|
} else {
|
|
450
464
|
containerIDs = containerIDs || '*';
|
|
451
465
|
if (typeof containerIDs !== 'string') {
|
|
452
|
-
if (callback) {
|
|
466
|
+
if (callback) {
|
|
467
|
+
callback([]);
|
|
468
|
+
}
|
|
453
469
|
return resolve([]);
|
|
454
470
|
}
|
|
455
471
|
let containerIDsSanitized = '';
|
|
@@ -491,17 +507,21 @@ function dockerContainerStats(containerIDs, callback) {
|
|
|
491
507
|
const workload = [];
|
|
492
508
|
if (containerArray.length && containerArray[0].trim() === '*') {
|
|
493
509
|
containerArray = [];
|
|
494
|
-
dockerContainers().then(allContainers => {
|
|
510
|
+
dockerContainers().then((allContainers) => {
|
|
495
511
|
for (let container of allContainers) {
|
|
496
512
|
containerArray.push(container.id.substring(0, 12));
|
|
497
513
|
}
|
|
498
514
|
if (containerArray.length) {
|
|
499
|
-
dockerContainerStats(containerArray.join(',')).then(result => {
|
|
500
|
-
if (callback) {
|
|
515
|
+
dockerContainerStats(containerArray.join(',')).then((result) => {
|
|
516
|
+
if (callback) {
|
|
517
|
+
callback(result);
|
|
518
|
+
}
|
|
501
519
|
resolve(result);
|
|
502
520
|
});
|
|
503
521
|
} else {
|
|
504
|
-
if (callback) {
|
|
522
|
+
if (callback) {
|
|
523
|
+
callback(result);
|
|
524
|
+
}
|
|
505
525
|
resolve(result);
|
|
506
526
|
}
|
|
507
527
|
});
|
|
@@ -510,14 +530,16 @@ function dockerContainerStats(containerIDs, callback) {
|
|
|
510
530
|
workload.push(dockerContainerStatsSingle(containerID.trim()));
|
|
511
531
|
}
|
|
512
532
|
if (workload.length) {
|
|
513
|
-
Promise.all(
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
533
|
+
Promise.all(workload).then((data) => {
|
|
534
|
+
if (callback) {
|
|
535
|
+
callback(data);
|
|
536
|
+
}
|
|
517
537
|
resolve(data);
|
|
518
538
|
});
|
|
519
539
|
} else {
|
|
520
|
-
if (callback) {
|
|
540
|
+
if (callback) {
|
|
541
|
+
callback(result);
|
|
542
|
+
}
|
|
521
543
|
resolve(result);
|
|
522
544
|
}
|
|
523
545
|
}
|
|
@@ -549,35 +571,40 @@ function dockerContainerStatsSingle(containerID) {
|
|
|
549
571
|
cpuStats: {},
|
|
550
572
|
precpuStats: {},
|
|
551
573
|
memoryStats: {},
|
|
552
|
-
networks: {}
|
|
574
|
+
networks: {}
|
|
553
575
|
};
|
|
554
576
|
return new Promise((resolve) => {
|
|
555
577
|
process.nextTick(() => {
|
|
556
578
|
if (containerID) {
|
|
557
|
-
|
|
558
579
|
if (!_docker_socket) {
|
|
559
580
|
_docker_socket = new DockerSocket();
|
|
560
581
|
}
|
|
561
582
|
|
|
562
|
-
_docker_socket.getInspect(containerID, dataInspect => {
|
|
583
|
+
_docker_socket.getInspect(containerID, (dataInspect) => {
|
|
563
584
|
try {
|
|
564
|
-
_docker_socket.getStats(containerID, data => {
|
|
585
|
+
_docker_socket.getStats(containerID, (data) => {
|
|
565
586
|
try {
|
|
566
587
|
let stats = data;
|
|
567
588
|
if (!stats.message) {
|
|
568
|
-
if (data.id) {
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
result.
|
|
572
|
-
result.
|
|
573
|
-
result.
|
|
574
|
-
result.
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
589
|
+
if (data.id) {
|
|
590
|
+
result.id = data.id;
|
|
591
|
+
}
|
|
592
|
+
result.memUsage = stats.memory_stats && stats.memory_stats.usage ? stats.memory_stats.usage : 0;
|
|
593
|
+
result.memLimit = stats.memory_stats && stats.memory_stats.limit ? stats.memory_stats.limit : 0;
|
|
594
|
+
result.memPercent = stats.memory_stats && stats.memory_stats.usage && stats.memory_stats.limit ? (stats.memory_stats.usage / stats.memory_stats.limit) * 100.0 : 0;
|
|
595
|
+
result.cpuPercent = stats.cpu_stats && stats.precpu_stats ? docker_calcCPUPercent(stats.cpu_stats, stats.precpu_stats) : 0;
|
|
596
|
+
result.pids = stats.pids_stats && stats.pids_stats.current ? stats.pids_stats.current : 0;
|
|
597
|
+
result.restartCount = dataInspect.RestartCount ? dataInspect.RestartCount : 0;
|
|
598
|
+
if (stats.networks) {
|
|
599
|
+
result.netIO = docker_calcNetworkIO(stats.networks);
|
|
600
|
+
}
|
|
601
|
+
if (stats.blkio_stats) {
|
|
602
|
+
result.blockIO = docker_calcBlockIO(stats.blkio_stats);
|
|
603
|
+
}
|
|
604
|
+
result.cpuStats = stats.cpu_stats ? stats.cpu_stats : {};
|
|
605
|
+
result.precpuStats = stats.precpu_stats ? stats.precpu_stats : {};
|
|
606
|
+
result.memoryStats = stats.memory_stats ? stats.memory_stats : {};
|
|
607
|
+
result.networks = stats.networks ? stats.networks : {};
|
|
581
608
|
}
|
|
582
609
|
} catch (err) {
|
|
583
610
|
util.noop();
|
|
@@ -612,12 +639,11 @@ function dockerContainerProcesses(containerID, callback) {
|
|
|
612
639
|
const containerIdSanitized = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(containerID, true)).trim();
|
|
613
640
|
|
|
614
641
|
if (containerIdSanitized) {
|
|
615
|
-
|
|
616
642
|
if (!_docker_socket) {
|
|
617
643
|
_docker_socket = new DockerSocket();
|
|
618
644
|
}
|
|
619
645
|
|
|
620
|
-
_docker_socket.getProcesses(containerIdSanitized, data => {
|
|
646
|
+
_docker_socket.getProcesses(containerIdSanitized, (data) => {
|
|
621
647
|
/**
|
|
622
648
|
* @namespace
|
|
623
649
|
* @property {Array} Titles
|
|
@@ -643,33 +669,37 @@ function dockerContainerProcesses(containerID, callback) {
|
|
|
643
669
|
let pos_rss = titles.indexOf('RSS');
|
|
644
670
|
let pos_command = titles.indexOf('COMMAND');
|
|
645
671
|
|
|
646
|
-
data.Processes.forEach(process => {
|
|
672
|
+
data.Processes.forEach((process) => {
|
|
647
673
|
result.push({
|
|
648
|
-
pidHost:
|
|
649
|
-
ppid:
|
|
650
|
-
pgid:
|
|
651
|
-
user:
|
|
652
|
-
ruser:
|
|
653
|
-
group:
|
|
654
|
-
rgroup:
|
|
655
|
-
stat:
|
|
656
|
-
time:
|
|
657
|
-
elapsed:
|
|
658
|
-
nice:
|
|
659
|
-
rss:
|
|
660
|
-
vsz:
|
|
661
|
-
command:
|
|
674
|
+
pidHost: pos_pid >= 0 ? process[pos_pid] : '',
|
|
675
|
+
ppid: pos_ppid >= 0 ? process[pos_ppid] : '',
|
|
676
|
+
pgid: pos_pgid >= 0 ? process[pos_pgid] : '',
|
|
677
|
+
user: pos_user >= 0 ? process[pos_user] : '',
|
|
678
|
+
ruser: pos_ruser >= 0 ? process[pos_ruser] : '',
|
|
679
|
+
group: pos_group >= 0 ? process[pos_group] : '',
|
|
680
|
+
rgroup: pos_rgroup >= 0 ? process[pos_rgroup] : '',
|
|
681
|
+
stat: pos_stat >= 0 ? process[pos_stat] : '',
|
|
682
|
+
time: pos_time >= 0 ? process[pos_time] : '',
|
|
683
|
+
elapsed: pos_elapsed >= 0 ? process[pos_elapsed] : '',
|
|
684
|
+
nice: pos_ni >= 0 ? process[pos_ni] : '',
|
|
685
|
+
rss: pos_rss >= 0 ? process[pos_rss] : '',
|
|
686
|
+
vsz: pos_vsz >= 0 ? process[pos_vsz] : '',
|
|
687
|
+
command: pos_command >= 0 ? process[pos_command] : ''
|
|
662
688
|
});
|
|
663
689
|
});
|
|
664
690
|
}
|
|
665
691
|
} catch (err) {
|
|
666
692
|
util.noop();
|
|
667
693
|
}
|
|
668
|
-
if (callback) {
|
|
694
|
+
if (callback) {
|
|
695
|
+
callback(result);
|
|
696
|
+
}
|
|
669
697
|
resolve(result);
|
|
670
698
|
});
|
|
671
699
|
} else {
|
|
672
|
-
if (callback) {
|
|
700
|
+
if (callback) {
|
|
701
|
+
callback(result);
|
|
702
|
+
}
|
|
673
703
|
resolve(result);
|
|
674
704
|
}
|
|
675
705
|
});
|
|
@@ -679,7 +709,6 @@ function dockerContainerProcesses(containerID, callback) {
|
|
|
679
709
|
exports.dockerContainerProcesses = dockerContainerProcesses;
|
|
680
710
|
|
|
681
711
|
function dockerVolumes(callback) {
|
|
682
|
-
|
|
683
712
|
let result = [];
|
|
684
713
|
return new Promise((resolve) => {
|
|
685
714
|
process.nextTick(() => {
|
|
@@ -691,9 +720,7 @@ function dockerVolumes(callback) {
|
|
|
691
720
|
try {
|
|
692
721
|
dockerVolumes = data;
|
|
693
722
|
if (dockerVolumes && dockerVolumes.Volumes && Object.prototype.toString.call(dockerVolumes.Volumes) === '[object Array]' && dockerVolumes.Volumes.length > 0) {
|
|
694
|
-
|
|
695
723
|
dockerVolumes.Volumes.forEach(function (element) {
|
|
696
|
-
|
|
697
724
|
result.push({
|
|
698
725
|
name: element.Name,
|
|
699
726
|
driver: element.Driver,
|
|
@@ -701,17 +728,23 @@ function dockerVolumes(callback) {
|
|
|
701
728
|
mountpoint: element.Mountpoint,
|
|
702
729
|
options: element.Options,
|
|
703
730
|
scope: element.Scope,
|
|
704
|
-
created: element.CreatedAt ? Math.round(new Date(element.CreatedAt).getTime() / 1000) : 0
|
|
731
|
+
created: element.CreatedAt ? Math.round(new Date(element.CreatedAt).getTime() / 1000) : 0
|
|
705
732
|
});
|
|
706
733
|
});
|
|
707
|
-
if (callback) {
|
|
734
|
+
if (callback) {
|
|
735
|
+
callback(result);
|
|
736
|
+
}
|
|
708
737
|
resolve(result);
|
|
709
738
|
} else {
|
|
710
|
-
if (callback) {
|
|
739
|
+
if (callback) {
|
|
740
|
+
callback(result);
|
|
741
|
+
}
|
|
711
742
|
resolve(result);
|
|
712
743
|
}
|
|
713
744
|
} catch (err) {
|
|
714
|
-
if (callback) {
|
|
745
|
+
if (callback) {
|
|
746
|
+
callback(result);
|
|
747
|
+
}
|
|
715
748
|
resolve(result);
|
|
716
749
|
}
|
|
717
750
|
});
|
|
@@ -724,7 +757,7 @@ exports.dockerVolumes = dockerVolumes;
|
|
|
724
757
|
function dockerAll(callback) {
|
|
725
758
|
return new Promise((resolve) => {
|
|
726
759
|
process.nextTick(() => {
|
|
727
|
-
dockerContainers(true).then(result => {
|
|
760
|
+
dockerContainers(true).then((result) => {
|
|
728
761
|
if (result && Object.prototype.toString.call(result) === '[object Array]' && result.length > 0) {
|
|
729
762
|
let l = result.length;
|
|
730
763
|
result.forEach(function (element) {
|
|
@@ -742,12 +775,14 @@ function dockerAll(callback) {
|
|
|
742
775
|
element.memoryStats = res[0].memoryStats;
|
|
743
776
|
element.networks = res[0].networks;
|
|
744
777
|
|
|
745
|
-
dockerContainerProcesses(element.id).then(processes => {
|
|
778
|
+
dockerContainerProcesses(element.id).then((processes) => {
|
|
746
779
|
element.processes = processes;
|
|
747
780
|
|
|
748
781
|
l -= 1;
|
|
749
782
|
if (l === 0) {
|
|
750
|
-
if (callback) {
|
|
783
|
+
if (callback) {
|
|
784
|
+
callback(result);
|
|
785
|
+
}
|
|
751
786
|
resolve(result);
|
|
752
787
|
}
|
|
753
788
|
});
|
|
@@ -755,7 +790,9 @@ function dockerAll(callback) {
|
|
|
755
790
|
});
|
|
756
791
|
});
|
|
757
792
|
} else {
|
|
758
|
-
if (callback) {
|
|
793
|
+
if (callback) {
|
|
794
|
+
callback(result);
|
|
795
|
+
}
|
|
759
796
|
resolve(result);
|
|
760
797
|
}
|
|
761
798
|
});
|