'use strict'; // ================================================================================== // dockerSockets.js // ---------------------------------------------------------------------------------- // Description: System Information - library // for Node.js // Copyright: (c) 2014 - 2017 // 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 { listContainers(all, callback) { try { let socket = net.createConnection({path: socketPath}); let alldata = ''; 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, 100000).replace(/[\n\r]/g, ''); socket = false; callback(JSON.parse(alldata)); }); } catch (err) { callback({}); } } getStats(id, callback) { id = id || ''; if (id) { try { let socket = net.createConnection({path: socketPath}); let alldata = ''; 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, 100000).replace(/[\n\r]/g, ''); socket = false; callback(JSON.parse(alldata)); }); } catch (err) { callback({}); } } else { callback({}); } } getProcesses(id, callback) { id = id || ''; if (id) { try { let socket = net.createConnection({path: socketPath}); let alldata = ''; 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, 100000).replace(/[\n\r]/g, ''); socket = false; callback(JSON.parse(alldata)); }); } catch (err) { callback({}); } } else { callback({}); } } } module.exports = DockerSocket;