added dockerContainerProcesses
This commit is contained in:
parent
ce43ceefa8
commit
7c6bb314de
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
New Functions
|
New Functions
|
||||||
|
|
||||||
|
- `dockerContainerProcesses`: returns processes for a specific docker container (new in version 3.8)
|
||||||
- `versions`: returns object of versions - kernel, ssl, node, npm, ...(new in version 3.6)
|
- `versions`: returns object of versions - kernel, ssl, node, npm, ...(new in version 3.6)
|
||||||
- `graphics`: returns arrays of graphics controllers and displays (new in version 3.5)
|
- `graphics`: returns arrays of graphics controllers and displays (new in version 3.5)
|
||||||
- `networkInterfaceDefault`: returns default network interface (new in version 3.4)
|
- `networkInterfaceDefault`: returns default network interface (new in version 3.4)
|
||||||
@ -87,6 +88,7 @@ Other changes
|
|||||||
|
|
||||||
| Version | Date | Comment |
|
| Version | Date | Comment |
|
||||||
| -------------- | -------------- | -------- |
|
| -------------- | -------------- | -------- |
|
||||||
|
| 3.8.0 | 2016-11-04 | added dockerContainerProcesses |
|
||||||
| 3.7.1 | 2016-11-03 | code refactoring |
|
| 3.7.1 | 2016-11-03 | code refactoring |
|
||||||
| 3.7.0 | 2016-11-02 | extended docker stats, and no longer relying on curl |
|
| 3.7.0 | 2016-11-02 | extended docker stats, and no longer relying on curl |
|
||||||
| 3.6.0 | 2016-09-14 | added versions (kernel, ssl, node, npm, pm2, ...) |
|
| 3.6.0 | 2016-09-14 | added versions (kernel, ssl, node, npm, pm2, ...) |
|
||||||
|
|||||||
18
README.md
18
README.md
@ -42,6 +42,7 @@ si.cpu()
|
|||||||
|
|
||||||
### Latest Activity
|
### Latest Activity
|
||||||
|
|
||||||
|
- Version 3.8.0: added dockerContainerProcesses (docker process inside container).
|
||||||
- Version 3.7.0: extended docker stats.
|
- Version 3.7.0: extended docker stats.
|
||||||
- Version 3.6.0: added versions (kernel, ssl, node, npm, pm2, ...).
|
- Version 3.6.0: added versions (kernel, ssl, node, npm, pm2, ...).
|
||||||
- Version 3.5.0: added graphics info (controller and display).
|
- Version 3.5.0: added graphics info (controller and display).
|
||||||
@ -260,7 +261,22 @@ This library is splitted in several sections:
|
|||||||
| - percpu_stats | X | X | detailed per cpu stats |
|
| - percpu_stats | X | X | detailed per cpu stats |
|
||||||
| - memory_stats | X | X | detailed memory stats |
|
| - memory_stats | X | X | detailed memory stats |
|
||||||
| - networks | X | X | detailed network stats per interface |
|
| - networks | X | X | detailed network stats per interface |
|
||||||
| si.dockerAll(cb) | X | X | list of all containers including their stats<br>in one single array |
|
| si.dockerContainerProcesses(id, cb) | X | X | array of processes inside a container |
|
||||||
|
| - [0].pid_host | X | X | process ID (host) |
|
||||||
|
| - [0].ppid | X | X | parent process ID |
|
||||||
|
| - [0].pgid | X | X | process group ID |
|
||||||
|
| - [0].user | X | X | effective user name |
|
||||||
|
| - [0].ruser | X | X | real user name |
|
||||||
|
| - [0].group | X | X | effective group name |
|
||||||
|
| - [0].rgroup | X | X | real group name |
|
||||||
|
| - [0].stat | X | X | process state |
|
||||||
|
| - [0].time | X | X | accumulated CPU time |
|
||||||
|
| - [0].elapsed | X | X | elapsed running time |
|
||||||
|
| - [0].nice | X | X | nice value |
|
||||||
|
| - [0].rss | X | X | resident set size |
|
||||||
|
| - [0].vsz | X | X | virtual size in Kbytes |
|
||||||
|
| - [0].command | X | X | command and arguments |
|
||||||
|
| si.dockerAll(cb) | X | X | list of all containers including their stats<br>and processes in one single array |
|
||||||
| si.getStaticData(cb) | X | X | all static data at once |
|
| si.getStaticData(cb) | X | X | all static data at once |
|
||||||
| si.getDynamicData(srv,iface,cb) | X | X | all dynamic data at once |
|
| si.getDynamicData(srv,iface,cb) | X | X | all dynamic data at once |
|
||||||
| si.getAllData(srv,iface,cb) | X | X | all data at once |
|
| si.getAllData(srv,iface,cb) | X | X | all data at once |
|
||||||
|
|||||||
@ -204,7 +204,7 @@ function docker_calcBlockIO(blkio_stats) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------
|
// --------------------------
|
||||||
// container Stats (for one container)
|
// container stats (for one container)
|
||||||
|
|
||||||
function dockerContainerStats(containerID, callback) {
|
function dockerContainerStats(containerID, callback) {
|
||||||
containerID = containerID || '';
|
containerID = containerID || '';
|
||||||
@ -286,6 +286,85 @@ function dockerContainerStats(containerID, callback) {
|
|||||||
|
|
||||||
exports.dockerContainerStats = dockerContainerStats;
|
exports.dockerContainerStats = dockerContainerStats;
|
||||||
|
|
||||||
|
// --------------------------
|
||||||
|
// container processes (for one container)
|
||||||
|
|
||||||
|
function dockerContainerProcesses(containerID, callback) {
|
||||||
|
containerID = containerID || '';
|
||||||
|
var result = [];
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
process.nextTick(() => {
|
||||||
|
if (_windows) {
|
||||||
|
let error = new Error(NOT_SUPPORTED);
|
||||||
|
if (callback) { callback(NOT_SUPPORTED) }
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
if (containerID) {
|
||||||
|
|
||||||
|
if (!_docker_socket) {
|
||||||
|
_docker_socket = new DockerSocket();
|
||||||
|
}
|
||||||
|
|
||||||
|
_docker_socket.getProcesses(containerID, data => {
|
||||||
|
/**
|
||||||
|
* @namespace
|
||||||
|
* @property {Array} Titles
|
||||||
|
* @property {Array} Processes
|
||||||
|
**/
|
||||||
|
try {
|
||||||
|
if (data && data.Titles && data.Processes) {
|
||||||
|
let titles = data.Titles.map(function(value) {
|
||||||
|
return value.toUpperCase();
|
||||||
|
});
|
||||||
|
var pos_pid = titles.indexOf('PID');
|
||||||
|
var pos_ppid = titles.indexOf('PPID');
|
||||||
|
var pos_pgid = titles.indexOf('PGID');
|
||||||
|
var pos_vsz = titles.indexOf('VSZ');
|
||||||
|
var pos_time = titles.indexOf('TIME');
|
||||||
|
var pos_elapsed = titles.indexOf('ELAPSED');
|
||||||
|
var pos_ni = titles.indexOf('NI');
|
||||||
|
var pos_ruser = titles.indexOf('RUSER');
|
||||||
|
var pos_user = titles.indexOf('USER');
|
||||||
|
var pos_rgroup = titles.indexOf('RGROUP');
|
||||||
|
var pos_group = titles.indexOf('GROUP');
|
||||||
|
var pos_stat = titles.indexOf('STAT');
|
||||||
|
var pos_rss = titles.indexOf('RSS');
|
||||||
|
var pos_command = titles.indexOf('COMMAND');
|
||||||
|
|
||||||
|
data.Processes.forEach(process => {
|
||||||
|
result.push({
|
||||||
|
pid_host: (pos_pid >= 0 ? process[pos_pid] : ''),
|
||||||
|
ppid: (pos_ppid >= 0 ? process[pos_ppid] : ''),
|
||||||
|
pgid: (pos_pgid >= 0 ? process[pos_pgid] : ''),
|
||||||
|
user: (pos_user >= 0 ? process[pos_user] : ''),
|
||||||
|
ruser: (pos_ruser >= 0 ? process[pos_ruser] : ''),
|
||||||
|
group: (pos_group >= 0 ? process[pos_group] : ''),
|
||||||
|
rgroup: (pos_rgroup >= 0 ? process[pos_rgroup] : ''),
|
||||||
|
stat: (pos_stat >= 0 ? process[pos_stat] : ''),
|
||||||
|
time: (pos_time >= 0 ? process[pos_time] : ''),
|
||||||
|
elapsed: (pos_elapsed >= 0 ? process[pos_elapsed] : ''),
|
||||||
|
nice: (pos_ni >= 0 ? process[pos_ni] : ''),
|
||||||
|
rss: (pos_rss >= 0 ? process[pos_rss] : ''),
|
||||||
|
vsz: (pos_vsz >= 0 ? process[pos_vsz] : ''),
|
||||||
|
command: (pos_command >= 0 ? process[pos_command] : '')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
}
|
||||||
|
if (callback) { callback(result) }
|
||||||
|
resolve(result);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (callback) { callback(result) }
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.dockerContainerProcesses = dockerContainerProcesses;
|
||||||
|
|
||||||
function dockerAll(callback) {
|
function dockerAll(callback) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
process.nextTick(() => {
|
process.nextTick(() => {
|
||||||
@ -312,12 +391,16 @@ function dockerAll(callback) {
|
|||||||
element.memory_stats = res.memory_stats;
|
element.memory_stats = res.memory_stats;
|
||||||
element.networks = res.networks;
|
element.networks = res.networks;
|
||||||
|
|
||||||
|
dockerContainerProcesses(element.id).then(processes => {
|
||||||
|
element.processes = processes;
|
||||||
|
|
||||||
|
l -= 1;
|
||||||
|
if (l == 0) {
|
||||||
|
if (callback) { callback(result) }
|
||||||
|
resolve(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
// all done??
|
// all done??
|
||||||
l -= 1;
|
|
||||||
if (l == 0) {
|
|
||||||
if (callback) { callback(result) }
|
|
||||||
resolve(result);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -81,6 +81,7 @@
|
|||||||
// --------------------------------
|
// --------------------------------
|
||||||
//
|
//
|
||||||
// version date comment
|
// version date comment
|
||||||
|
// 3.8.0 2016-11-04 added dockerContainerProcesses
|
||||||
// 3.7.1 2016-11-03 code refactoring
|
// 3.7.1 2016-11-03 code refactoring
|
||||||
// 3.7.0 2016-11-02 extended docker stats, and no longer relying on curl (version conflicts)
|
// 3.7.0 2016-11-02 extended docker stats, and no longer relying on curl (version conflicts)
|
||||||
// 3.6.0 2016-09-16 added versions (kernel, ssl, node, npm, pm2, ...)
|
// 3.6.0 2016-09-16 added versions (kernel, ssl, node, npm, pm2, ...)
|
||||||
@ -414,6 +415,7 @@ exports.inetLatency = internet.inetLatency;
|
|||||||
|
|
||||||
exports.dockerContainers = docker.dockerContainers;
|
exports.dockerContainers = docker.dockerContainers;
|
||||||
exports.dockerContainerStats = docker.dockerContainerStats;
|
exports.dockerContainerStats = docker.dockerContainerStats;
|
||||||
|
exports.dockerContainerProcesses = docker.dockerContainerProcesses;
|
||||||
exports.dockerAll = docker.dockerAll;
|
exports.dockerAll = docker.dockerAll;
|
||||||
|
|
||||||
exports.getStaticData = getStaticData;
|
exports.getStaticData = getStaticData;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user