dockerImages() added
This commit is contained in:
+109
@@ -91,6 +91,115 @@ function dockerInfo(callback) {
|
||||
|
||||
exports.dockerInfo = dockerInfo;
|
||||
|
||||
function dockerImages(all, callback) {
|
||||
|
||||
// fallback - if only callback is given
|
||||
if (util.isFunction(all) && !callback) {
|
||||
callback = all;
|
||||
all = false;
|
||||
}
|
||||
if (typeof all !== 'boolean' && all !== undefined) {
|
||||
all = false;
|
||||
}
|
||||
|
||||
all = all || false;
|
||||
let result = [];
|
||||
return new Promise((resolve) => {
|
||||
process.nextTick(() => {
|
||||
if (!_docker_socket) {
|
||||
_docker_socket = new DockerSocket();
|
||||
}
|
||||
const workload = [];
|
||||
|
||||
_docker_socket.listImages(all, data => {
|
||||
let dockerImages = {};
|
||||
try {
|
||||
dockerImages = data;
|
||||
if (dockerImages && Object.prototype.toString.call(dockerImages) === '[object Array]' && dockerImages.length > 0) {
|
||||
|
||||
dockerImages.forEach(function (element) {
|
||||
|
||||
if (element.Names && Object.prototype.toString.call(element.Names) === '[object Array]' && element.Names.length > 0) {
|
||||
element.Name = element.Names[0].replace(/^\/|\/$/g, '');
|
||||
}
|
||||
workload.push(dockerImagesInspect(element.Id.trim(), element));
|
||||
});
|
||||
if (workload.length) {
|
||||
Promise.all(
|
||||
workload
|
||||
).then(data => {
|
||||
if (callback) { callback(data); }
|
||||
resolve(data);
|
||||
});
|
||||
} else {
|
||||
if (callback) { callback(result); }
|
||||
resolve(result);
|
||||
}
|
||||
} else {
|
||||
if (callback) { callback(result); }
|
||||
resolve(result);
|
||||
}
|
||||
} catch (err) {
|
||||
if (callback) { callback(result); }
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// --------------------------
|
||||
// container inspect (for one container)
|
||||
|
||||
function dockerImagesInspect(imageID, payload) {
|
||||
return new Promise((resolve) => {
|
||||
process.nextTick(() => {
|
||||
imageID = imageID || '';
|
||||
if (typeof imageID !== 'string') {
|
||||
resolve();
|
||||
}
|
||||
const imageIDSanitized = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(imageID, true)).trim();
|
||||
if (imageIDSanitized) {
|
||||
|
||||
if (!_docker_socket) {
|
||||
_docker_socket = new DockerSocket();
|
||||
}
|
||||
|
||||
_docker_socket.inspectImage(imageIDSanitized.trim(), data => {
|
||||
try {
|
||||
resolve({
|
||||
id: payload.Id,
|
||||
container: data.Container,
|
||||
comment: data.Comment,
|
||||
os: data.Os,
|
||||
architecture: data.Architecture,
|
||||
parent: data.Parent,
|
||||
dockerVersion: data.DockerVersion,
|
||||
size: data.Size,
|
||||
sharedSize: payload.SharedSize,
|
||||
virtualSize: data.VirtualSize,
|
||||
author: data.Author,
|
||||
created: data.Created ? Math.round(new Date(data.Created).getTime() / 1000) : 0,
|
||||
containerConfig: data.ContainerConfig ? data.ContainerConfig : {},
|
||||
graphDriver: data.GraphDriver ? data.GraphDriver : {},
|
||||
repoDigests: data.RepoDigests ? data.RepoDigests : {},
|
||||
repoTags: data.RepoTags ? data.RepoTags : {},
|
||||
config: data.Config ? data.Config : {},
|
||||
rootFS: data.RootFS ? data.RootFS : {},
|
||||
});
|
||||
} catch (err) {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
exports.dockerImages = dockerImages;
|
||||
|
||||
function dockerContainers(all, callback) {
|
||||
|
||||
function inContainers(containers, id) {
|
||||
|
||||
@@ -55,6 +55,82 @@ class DockerSocket {
|
||||
}
|
||||
}
|
||||
|
||||
listImages(all, callback) {
|
||||
try {
|
||||
|
||||
let socket = net.createConnection({ path: socketPath });
|
||||
let alldata = '';
|
||||
let data;
|
||||
|
||||
socket.on('connect', () => {
|
||||
socket.write('GET http:/images/json' + (all ? '?all=1' : '') + ' 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({});
|
||||
}
|
||||
}
|
||||
|
||||
inspectImage(id, callback) {
|
||||
id = id || '';
|
||||
if (id) {
|
||||
try {
|
||||
let socket = net.createConnection({ path: socketPath });
|
||||
let alldata = '';
|
||||
let data;
|
||||
|
||||
socket.on('connect', () => {
|
||||
socket.write('GET http:/images/' + id + '/json?stream=0 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({});
|
||||
}
|
||||
} else {
|
||||
callback({});
|
||||
}
|
||||
}
|
||||
|
||||
listContainers(all, callback) {
|
||||
try {
|
||||
|
||||
@@ -91,6 +167,57 @@ class DockerSocket {
|
||||
}
|
||||
}
|
||||
|
||||
listVolumes(filter, callback) {
|
||||
try {
|
||||
|
||||
let socket = net.createConnection({ path: socketPath });
|
||||
let alldata = '';
|
||||
let data;
|
||||
|
||||
filter = filter || {};
|
||||
let filterString = '';
|
||||
if (filter.dangling && typeof filter.dangling === 'boolean') {
|
||||
filterString += (filterString ? '&' : '') + 'dangling=true';
|
||||
}
|
||||
if (filter.driver && typeof filter.driver === 'string') {
|
||||
filterString += (filterString ? '&' : '') + `driver=${filter.driver}`;
|
||||
}
|
||||
if (filter.label && typeof filter.label === 'string') {
|
||||
filterString += (filterString ? '&' : '') + `label=${filter.label}`;
|
||||
}
|
||||
if (filter.name && typeof filter.name === 'string') {
|
||||
filterString += (filterString ? '&' : '') + `name=${filter.name}`;
|
||||
}
|
||||
|
||||
socket.on('connect', () => {
|
||||
socket.write('GET http:/volumes/' + (filterString ? `?${filterString}` : '') + ' 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({});
|
||||
}
|
||||
}
|
||||
|
||||
getStats(id, callback) {
|
||||
id = id || '';
|
||||
if (id) {
|
||||
|
||||
Vendored
+22
@@ -641,6 +641,27 @@ export namespace Systeminformation {
|
||||
productLicense: string;
|
||||
}
|
||||
|
||||
interface DockerImageData {
|
||||
id: string;
|
||||
container: string;
|
||||
comment: string;
|
||||
os: string;
|
||||
architecture: string;
|
||||
parent: string;
|
||||
dockerVersion: string;
|
||||
size: number;
|
||||
sharedSize: number;
|
||||
virtualSize: number;
|
||||
author: string;
|
||||
created: number;
|
||||
containerConfig: any;
|
||||
graphDriver: any;
|
||||
repoDigests: any;
|
||||
repoTags: any;
|
||||
config: any;
|
||||
rootFS: any;
|
||||
}
|
||||
|
||||
interface DockerContainerData {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -851,6 +872,7 @@ export function processLoad(processName: string, cb?: (data: Systeminformation.P
|
||||
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 dockerImages(all?: boolean, cb?: (data: dockerstats.DockerImageData[]) => any): Promise<dockerstats.DockerImageData[]>;
|
||||
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>;
|
||||
|
||||
@@ -482,6 +482,7 @@ exports.inetChecksite = internet.inetChecksite;
|
||||
exports.inetLatency = internet.inetLatency;
|
||||
|
||||
exports.dockerInfo = docker.dockerInfo;
|
||||
exports.dockerImages = docker.dockerImages;
|
||||
exports.dockerContainers = docker.dockerContainers;
|
||||
exports.dockerContainerStats = docker.dockerContainerStats;
|
||||
exports.dockerContainerProcesses = docker.dockerContainerProcesses;
|
||||
|
||||
Reference in New Issue
Block a user