123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- 'use strict';
- // @ts-check
- // ==================================================================================
- // dockerSockets.js
- // ----------------------------------------------------------------------------------
- // Description: System Information - library
- // for Node.js
- // Copyright: (c) 2014 - 2022
- // Author: Sebastian Hildebrandt
- // ----------------------------------------------------------------------------------
- // License: MIT
- // ==================================================================================
- // 13. DockerSockets
- // ----------------------------------------------------------------------------------
- const net = require('net');
- const isWin = require('os').type() === 'Windows_NT';
- 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({});
- }
- }
- 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 {
- let socket = net.createConnection({ path: socketPath });
- let alldata = '';
- let data;
- socket.on('connect', () => {
- socket.write('GET http:/containers/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({});
- }
- }
- getStats(id, callback) {
- id = id || '';
- if (id) {
- try {
- let socket = net.createConnection({ path: socketPath });
- let alldata = '';
- let data;
- socket.on('connect', () => {
- socket.write('GET http:/containers/' + id + '/stats?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({});
- }
- }
- getInspect(id, callback) {
- id = id || '';
- if (id) {
- try {
- let socket = net.createConnection({ path: socketPath });
- let alldata = '';
- let data;
- socket.on('connect', () => {
- socket.write('GET http:/containers/' + 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({});
- }
- }
- getProcesses(id, callback) {
- id = id || '';
- if (id) {
- try {
- let socket = net.createConnection({ path: socketPath });
- let alldata = '';
- let data;
- socket.on('connect', () => {
- socket.write('GET http:/containers/' + id + '/top?ps_args=-opid,ppid,pgid,vsz,time,etime,nice,ruser,user,rgroup,group,stat,rss,args 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({});
- }
- }
- listVolumes(callback) {
- try {
- let socket = net.createConnection({ path: socketPath });
- let alldata = '';
- let data;
- socket.on('connect', () => {
- socket.write('GET http:/volumes 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({});
- }
- }
- }
- module.exports = DockerSocket;
|