added dockerInfo()

This commit is contained in:
Sebastian Hildebrandt 2019-05-27 23:01:51 +02:00
parent bda8412f94
commit 6d6589a373
8 changed files with 676 additions and 6 deletions

View File

@ -82,14 +82,13 @@ si.cpu()
(last 7 major and minor version releases)
- Version 4.6.0: added `dockerInfo()`
- Version 4.5.0: `fsOpenFiles()` added open file descriptor count
- Version 4.4.0: `dockerContainers()` added started, finished time
- Version 4.3.0: `dockerContainers()` `dockerStats()` added restartCount
- Version 4.2.0: `networkInterfaceDefault()` time delay fix (linux)
- Version 4.1.0: `versions()` added python3, pip, pip3, java
- Version 4.0.0: new version ... read the [detailed changelog][changelog-url] to see all breaking changes
- Version 3.54.0: added TypeScript type definitions
- Version 3.53.0: `versions()` added perl, python, gcc
- ...
You can find all changes here: [detailed changelog][changelog-url]
@ -452,6 +451,53 @@ I also created a nice little command line tool called [mmon][mmon-github-url] (
| Function | Result object | Linux | BSD | Mac | Win | Sun | Comments |
| --------------- | ------------- | ----- | ------- | --- | --- | --- | -------- |
| si.dockerInfo(cb) | {...} | X | X | X | X | X | returns general docker info |
| | ID | X | X | X | X | X | Docker ID |
| | Containers | X | X | X | X | X | number of containers |
| | ContainersRunning | X | X | X | X | X | number of running containers |
| | ContainersPaused | X | X | X | X | X | number of paused containers |
| | ContainersStopped | X | X | X | X | X | number of stopped containers |
| | Images | X | X | X | X | X | number of images |
| | Driver | X | X | X | X | X | driver (e.g. 'devicemapper', 'overlay2') |
| | MemoryLimit | X | X | X | X | X | has memory limit |
| | SwapLimit | X | X | X | X | X | has swap limit |
| | KernelMemory | X | X | X | X | X | has kernal memory |
| | CpuCfsPeriod | X | X | X | X | X | has CpuCfsPeriod |
| | CpuCfsQuota | X | X | X | X | X | has CpuCfsQuota |
| | CPUShares | X | X | X | X | X | has CPUShares |
| | CPUSet | X | X | X | X | X | has CPUShares |
| | IPv4Forwarding | X | X | X | X | X | has IPv4Forwarding |
| | BridgeNfIptables | X | X | X | X | X | has BridgeNfIptables |
| | BridgeNfIp6tables | X | X | X | X | X | has BridgeNfIp6tables |
| | Debug | X | X | X | X | X | Debug on |
| | NFd | X | X | X | X | X | named data networking forwarding daemon |
| | OomKillDisable | X | X | X | X | X | out-of-memory kill disabled |
| | NGoroutines | X | X | X | X | X | number NGoroutines |
| | SystemTime | X | X | X | X | X | docker SystemTime |
| | LoggingDriver | X | X | X | X | X | logging driver e.g. 'json-file' |
| | CgroupDriver | X | X | X | X | X | cgroup driver e.g. 'cgroupfs' |
| | NEventsListener | X | X | X | X | X | number NEventsListeners |
| | KernelVersion | X | X | X | X | X | docker kernel version |
| | OperatingSystem | X | X | X | X | X | docker OS e.g. 'Docker for Mac' |
| | OSType | X | X | X | X | X | OSType e.g. 'linux' |
| | Architecture | X | X | X | X | X | architecture e.g. x86_64 |
| | NCPU | X | X | X | X | X | number of CPUs |
| | MemTotal | X | X | X | X | X | memory total |
| | DockerRootDir | X | X | X | X | X | docker root directory |
| | HttpProxy | X | X | X | X | X | http proxy |
| | HttpsProxy | X | X | X | X | X | https proxy |
| | NoProxy | X | X | X | X | X | NoProxy |
| | Name | X | X | X | X | X | Name |
| | Labels | X | X | X | X | X | array of labels |
| | ExperimentalBuild | X | X | X | X | X | is experimental build |
| | ServerVersion | X | X | X | X | X | server version |
| | ClusterStore | X | X | X | X | X | cluster store |
| | ClusterAdvertise | X | X | X | X | X | cluster advertise |
| | DefaultRuntime | X | X | X | X | X | default runtime e.g. 'runc' |
| | LiveRestoreEnabled | X | X | X | X | X | live store enabled |
| | Isolation | X | X | X | X | X | isolation |
| | InitBinary | X | X | X | X | X | init binary |
| | ProductLicense | X | X | X | X | X | product license |
| si.dockerContainers(all, cb) | [{...}] | X | X | X | X | X | returns array of active/all docker containers |
| | [0].id | X | X | X | X | X | ID of container |
| | [0].name | X | X | X | X | X | name of container |

View File

@ -65,6 +65,476 @@
</tr>
</thead>
<tbody>
<tr>
<td>si.dockerInfo(cb)</td>
<td>{...}</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>returns general docker info</td>
</tr>
<tr>
<td></td>
<td>ID</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>Docker ID</td>
</tr>
<tr>
<td></td>
<td>Containers</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number of containers</td>
</tr>
<tr>
<td></td>
<td>ContainersRunning</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number of running containers</td>
</tr>
<tr>
<td></td>
<td>ContainersPaused</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number of paused containers</td>
</tr>
<tr>
<td></td>
<td>ContainersStopped</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number of stopped containers</td>
</tr>
<tr>
<td></td>
<td>Images</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number of images</td>
</tr>
<tr>
<td></td>
<td>Driver</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>driver (e.g. 'devicemapper', 'overlay2')</td>
</tr>
<tr>
<td></td>
<td>MemoryLimit</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has memory limit</td>
</tr>
<tr>
<td></td>
<td>SwapLimit</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has swap limit</td>
</tr>
<tr>
<td></td>
<td>KernelMemory</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has kernal memory</td>
</tr>
<tr>
<td></td>
<td>CpuCfsPeriod</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has CpuCfsPeriod</td>
</tr>
<tr>
<td></td>
<td>CpuCfsQuota</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has CpuCfsQuota</td>
</tr>
<tr>
<td></td>
<td>CPUShares</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has CPUShares</td>
</tr>
<tr>
<td></td>
<td>CPUSet</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has CPUShares</td>
</tr>
<tr>
<td></td>
<td>IPv4Forwarding</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has IPv4Forwarding</td>
</tr>
<tr>
<td></td>
<td>BridgeNfIptables</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has BridgeNfIptables</td>
</tr>
<tr>
<td></td>
<td>BridgeNfIp6tables</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>has BridgeNfIp6tables</td>
</tr>
<tr>
<td></td>
<td>Debug</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>Debug on</td>
</tr>
<tr>
<td></td>
<td>NFd</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>named data networking forwarding daemon</td>
</tr>
<tr>
<td></td>
<td>OomKillDisable</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>out-of-memory kill disabled</td>
</tr>
<tr>
<td></td>
<td>NGoroutines</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number NGoroutines</td>
</tr>
<tr>
<td></td>
<td>SystemTime</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>docker SystemTime</td>
</tr>
<tr>
<td></td>
<td>LoggingDriver</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>logging driver e.g. 'json-file'</td>
</tr>
<tr>
<td></td>
<td>CgroupDriver</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>cgroup driver e.g. 'cgroupfs'</td>
</tr>
<tr>
<td></td>
<td>NEventsListener</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number NEventsListeners</td>
</tr>
<tr>
<td></td>
<td>KernelVersion</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>docker kernel version</td>
</tr>
<tr>
<td></td>
<td>OperatingSystem</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>docker OS e.g. 'Docker for Mac'</td>
</tr>
<tr>
<td></td>
<td>OSType</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>OSType e.g. 'linux'</td>
</tr>
<tr>
<td></td>
<td>Architecture</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>architecture e.g. x86_64</td>
</tr>
<tr>
<td></td>
<td>NCPU</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>number of CPUs</td>
</tr>
<tr>
<td></td>
<td>MemTotal</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>memory total</td>
</tr>
<tr>
<td></td>
<td>DockerRootDir</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>docker root directory</td>
</tr>
<tr>
<td></td>
<td>HttpProxy</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>http proxy</td>
</tr>
<tr>
<td></td>
<td>HttpsProxy</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>https proxy</td>
</tr>
<tr>
<td></td>
<td>NoProxy</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>NoProxy</td>
</tr>
<tr>
<td></td>
<td>Name</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>Name</td>
</tr>
<tr>
<td></td>
<td>Labels</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>array of labels</td>
</tr>
<tr>
<td></td>
<td>ExperimentalBuild</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>is experimental build</td>
</tr>
<tr>
<td></td>
<td>ServerVersion</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>server version</td>
</tr>
<tr>
<td></td>
<td>ClusterStore</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>cluster store</td>
</tr>
<tr>
<td></td>
<td>ClusterAdvertise</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>cluster advertise</td>
</tr>
<tr>
<td></td>
<td>DefaultRuntime</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>default runtime e.g. 'runc'</td>
</tr>
<tr>
<td></td>
<td>LiveRestoreEnabled</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>live store enabled</td>
</tr>
<tr>
<td></td>
<td>Isolation</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>isolation</td>
</tr>
<tr>
<td></td>
<td>InitBinary</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>init binary</td>
</tr>
<tr>
<td></td>
<td>ProductLicense</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>X</td>
<td>product license</td>
</tr>
<tr>
<td>si.dockerContainers(all, cb)</td>
<td>[{...}]</td>

View File

@ -80,6 +80,11 @@
</tr>
</thead>
<tbody>
<tr>
<th scope="row">4.6.0</th>
<td>2019-05-27</td>
<td><span class="code">dockerInfo()</span> added dockerInfo</td>
</tr>
<tr>
<th scope="row">4.5.1</th>
<td>2019-05-17</td>

View File

@ -170,7 +170,7 @@
<img class="logo" src="assets/logo.png">
<div class="title">systeminformation</div>
<div class="subtitle"><span id="typed"></span></div>
<div class="version">Current Version: <span id="version">4.5.1</span></div>
<div class="version">Current Version: <span id="version">4.6.0</span></div>
<button class="btn btn-light" onclick="location.href='https://github.com/sebhildebrandt/systeminformation'">View on Github <i class=" fab fa-github"></i></button>
</div>
<div class="down">
@ -193,7 +193,7 @@
</div>
<div class="row number-section">
<div class="col-xl-4 col-lg-4 col-md-4 col-12">
<div class="numbers">8,412</div>
<div class="numbers">8,512</div>
<div class="title">Lines of code</div>
</div>
<div class="col-xl-4 col-lg-4 col-md-4 col-12">
@ -201,7 +201,7 @@
<div class="title">Downloads last month</div>
</div>
<div class="col-xl-4 col-lg-4 col-md-4 col-12">
<div class="numbers">157</div>
<div class="numbers">160</div>
<div class="title">Dependends</div>
</div>
</div>

View File

@ -27,6 +27,69 @@ let _docker_last_read = 0;
// --------------------------
// get containers (parameter all: get also inactive/exited containers)
function dockerInfo(callback) {
return new Promise((resolve) => {
process.nextTick(() => {
if (!_docker_socket) {
_docker_socket = new DockerSocket();
}
const result = {};
_docker_socket.getInfo(data => {
result.ID = data.ID;
result.Containers = data.Containers;
result.ContainersRunning = data.ContainersRunning;
result.ContainersPaused = data.ContainersPaused;
result.ContainersStopped = data.ContainersStopped;
result.Images = data.Images;
result.Driver = data.Driver;
result.MemoryLimit = data.MemoryLimit;
result.SwapLimit = data.SwapLimit;
result.KernelMemory = data.KernelMemory;
result.CpuCfsPeriod = data.CpuCfsPeriod;
result.CpuCfsQuota = data.CpuCfsQuota;
result.CPUShares = data.CPUShares;
result.CPUSet = data.CPUSet;
result.IPv4Forwarding = data.IPv4Forwarding;
result.BridgeNfIptables = data.BridgeNfIptables;
result.BridgeNfIp6tables = data.BridgeNfIp6tables;
result.Debug = data.Debug;
result.NFd = data.NFd;
result.OomKillDisable = data.OomKillDisable;
result.NGoroutines = data.NGoroutines;
result.SystemTime = data.SystemTime;
result.LoggingDriver = data.LoggingDriver;
result.CgroupDriver = data.CgroupDriver;
result.NEventsListener = data.NEventsListener;
result.KernelVersion = data.KernelVersion;
result.OperatingSystem = data.OperatingSystem;
result.OSType = data.OSType;
result.Architecture = data.Architecture;
result.NCPU = data.NCPU;
result.MemTotal = data.MemTotal;
result.DockerRootDir = data.DockerRootDir;
result.HttpProxy = data.HttpProxy;
result.HttpsProxy = data.HttpsProxy;
result.NoProxy = data.NoProxy;
result.Name = data.Name;
result.Labels = data.Labels;
result.ExperimentalBuild = data.ExperimentalBuild;
result.ServerVersion = data.ServerVersion;
result.ClusterStore = data.ClusterStore;
result.ClusterAdvertise = data.ClusterAdvertise;
result.DefaultRuntime = data.DefaultRuntime;
result.LiveRestoreEnabled = data.LiveRestoreEnabled;
result.Isolation = data.Isolation;
result.InitBinary = data.InitBinary;
result.ProductLicense = data.ProductLicense;
if (callback) { callback(result); }
resolve(result);
});
});
});
}
exports.dockerInfo = dockerInfo;
function dockerContainers(all, callback) {

View File

@ -19,6 +19,42 @@ const socketPath = isWin ? '//./pipe/docker_engine' : '/var/run/docker.sock';
class DockerSocket {
getInfo(callback) {
try {
let socket = net.createConnection({ path: socketPath });
let alldata = '';
let data;
socket.on('connect', () => {
socket.write('GET http:/info HTTP/1.0\r\n\r\n');
});
socket.on('data', data => {
alldata = alldata + data.toString();
});
socket.on('error', () => {
socket = false;
callback({});
});
socket.on('end', () => {
let startbody = alldata.indexOf('\r\n\r\n');
alldata = alldata.substring(startbody + 4);
socket = false;
try {
data = JSON.parse(alldata);
callback(data);
} catch (err) {
callback({});
}
});
} catch (err) {
callback({});
}
}
listContainers(all, callback) {
try {

51
lib/index.d.ts vendored
View File

@ -420,6 +420,55 @@ export namespace Systeminformation {
// 8. Docker
interface DockerInfoData {
ID: string;
Containers: number;
ContainersRunning: number;
ContainersPaused: number;
ContainersStopped: number;
Images: number;
Driver: string;
MemoryLimit: boolean;
SwapLimit: boolean;
KernelMemory: boolean;
CpuCfsPeriod: boolean;
CpuCfsQuota: boolean;
CPUShares: boolean;
CPUSet: boolean;
IPv4Forwarding: boolean;
BridgeNfIptables: boolean;
BridgeNfIp6tables: boolean;
Debug: boolean;
NFd: number;
OomKillDisable: boolean;
NGoroutines: number;
SystemTime: string;
LoggingDriver: string;
CgroupDriver: string;
NEventsListener: number;
KernelVersion: string;
OperatingSystem: string;
OSType: string;
Architecture: string;
NCPU: number;
MemTotal: number;
DockerRootDir: string;
HttpProxy: string;
HttpsProxy: string;
NoProxy: string;
Name: string;
Labels: string[];
ExperimentalBuild: boolean;
ServerVersion: string;
ClusterStore: string;
ClusterAdvertise: string;
DefaultRuntime: string;
LiveRestoreEnabled: boolean;
Isolation: string;
InitBinary: string;
ProductLicense: string;
}
interface DockerContainerData {
id: string;
name: string;
@ -537,7 +586,7 @@ export function processes(cb?: (data: Systeminformation.ProcessesData) => any):
export function processLoad(processName: string, cb?: (data: Systeminformation.ProcessesProcessLoadData) => any): Promise<Systeminformation.ProcessesProcessLoadData>;
export function services(serviceName: string, cb?: (data: Systeminformation.ServicesData[]) => any): Promise<Systeminformation.ServicesData[]>;
export function dockerInfo(cb?: (data: Systeminformation.DockerInfoData[]) => any): Promise<Systeminformation.DockerInfoData[]>;
export function dockerContainers(all?: boolean, cb?: (data: Systeminformation.DockerContainerData[]) => any): Promise<Systeminformation.DockerContainerData[]>;
export function dockerContainerStats(id?: string, cb?: (data: Systeminformation.DockerContainerStatsData[]) => any): Promise<Systeminformation.DockerContainerStatsData[]>;
export function dockerContainerProcesses(id?: string, cb?: (data: any) => any): Promise<any>;

View File

@ -357,6 +357,7 @@ exports.users = users.users;
exports.inetChecksite = internet.inetChecksite;
exports.inetLatency = internet.inetLatency;
exports.dockerInfo = docker.dockerInfo;
exports.dockerContainers = docker.dockerContainers;
exports.dockerContainerStats = docker.dockerContainerStats;
exports.dockerContainerProcesses = docker.dockerContainerProcesses;