From 6d6589a3736d27e301d78efd68135292b2776d58 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Mon, 27 May 2019 23:01:51 +0200 Subject: [PATCH] added dockerInfo() --- README.md | 50 ++++- docs/docker.html | 470 ++++++++++++++++++++++++++++++++++++++++++++ docs/history.html | 5 + docs/index.html | 6 +- lib/docker.js | 63 ++++++ lib/dockerSocket.js | 36 ++++ lib/index.d.ts | 51 ++++- lib/index.js | 1 + 8 files changed, 676 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8a0a389..ee80dc2 100644 --- a/README.md +++ b/README.md @@ -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 | diff --git a/docs/docker.html b/docs/docker.html index ff885cd..7ec2cbc 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -65,6 +65,476 @@ + + 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) [{...}] diff --git a/docs/history.html b/docs/history.html index 36ea815..7ef393e 100644 --- a/docs/history.html +++ b/docs/history.html @@ -80,6 +80,11 @@ + + 4.6.0 + 2019-05-27 + dockerInfo() added dockerInfo + 4.5.1 2019-05-17 diff --git a/docs/index.html b/docs/index.html index 0000363..2a794df 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
systeminformation
-
Current Version: 4.5.1
+
Current Version: 4.6.0
@@ -193,7 +193,7 @@
-
8,412
+
8,512
Lines of code
@@ -201,7 +201,7 @@
Downloads last month
-
157
+
160
Dependends
diff --git a/lib/docker.js b/lib/docker.js index c29c168..9447324 100644 --- a/lib/docker.js +++ b/lib/docker.js @@ -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) { diff --git a/lib/dockerSocket.js b/lib/dockerSocket.js index fa3b7e3..4d89958 100644 --- a/lib/dockerSocket.js +++ b/lib/dockerSocket.js @@ -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 { diff --git a/lib/index.d.ts b/lib/index.d.ts index 379e499..a266329 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -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; export function services(serviceName: string, cb?: (data: Systeminformation.ServicesData[]) => any): Promise; - +export function dockerInfo(cb?: (data: Systeminformation.DockerInfoData[]) => any): Promise; export function dockerContainers(all?: boolean, cb?: (data: Systeminformation.DockerContainerData[]) => any): Promise; export function dockerContainerStats(id?: string, cb?: (data: Systeminformation.DockerContainerStatsData[]) => any): Promise; export function dockerContainerProcesses(id?: string, cb?: (data: any) => any): Promise; diff --git a/lib/index.js b/lib/index.js index 5fffd4b..1cdd868 100644 --- a/lib/index.js +++ b/lib/index.js @@ -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;