UNPKG

5.39 kBJavaScriptView Raw
1'use strict';
2// @ts-check
3// ==================================================================================
4// dockerSockets.js
5// ----------------------------------------------------------------------------------
6// Description: System Information - library
7// for Node.js
8// Copyright: (c) 2014 - 2020
9// Author: Sebastian Hildebrandt
10// ----------------------------------------------------------------------------------
11// License: MIT
12// ==================================================================================
13// 13. DockerSockets
14// ----------------------------------------------------------------------------------
15
16const net = require('net');
17const isWin = require('os').type() === 'Windows_NT';
18const socketPath = isWin ? '//./pipe/docker_engine' : '/var/run/docker.sock';
19
20class DockerSocket {
21
22 getInfo(callback) {
23 try {
24
25 let socket = net.createConnection({ path: socketPath });
26 let alldata = '';
27 let data;
28
29 socket.on('connect', () => {
30 socket.write('GET http:/info HTTP/1.0\r\n\r\n');
31 });
32
33 socket.on('data', data => {
34 alldata = alldata + data.toString();
35 });
36
37 socket.on('error', () => {
38 socket = false;
39 callback({});
40 });
41
42 socket.on('end', () => {
43 let startbody = alldata.indexOf('\r\n\r\n');
44 alldata = alldata.substring(startbody + 4);
45 socket = false;
46 try {
47 data = JSON.parse(alldata);
48 callback(data);
49 } catch (err) {
50 callback({});
51 }
52 });
53 } catch (err) {
54 callback({});
55 }
56 }
57
58 listContainers(all, callback) {
59 try {
60
61 let socket = net.createConnection({ path: socketPath });
62 let alldata = '';
63 let data;
64
65 socket.on('connect', () => {
66 socket.write('GET http:/containers/json' + (all ? '?all=1' : '') + ' HTTP/1.0\r\n\r\n');
67 });
68
69 socket.on('data', data => {
70 alldata = alldata + data.toString();
71 });
72
73 socket.on('error', () => {
74 socket = false;
75 callback({});
76 });
77
78 socket.on('end', () => {
79 let startbody = alldata.indexOf('\r\n\r\n');
80 alldata = alldata.substring(startbody + 4);
81 socket = false;
82 try {
83 data = JSON.parse(alldata);
84 callback(data);
85 } catch (err) {
86 callback({});
87 }
88 });
89 } catch (err) {
90 callback({});
91 }
92 }
93
94 getStats(id, callback) {
95 id = id || '';
96 if (id) {
97 try {
98 let socket = net.createConnection({ path: socketPath });
99 let alldata = '';
100 let data;
101
102 socket.on('connect', () => {
103 socket.write('GET http:/containers/' + id + '/stats?stream=0 HTTP/1.0\r\n\r\n');
104 });
105
106 socket.on('data', data => {
107 alldata = alldata + data.toString();
108 });
109
110 socket.on('error', () => {
111 socket = false;
112 callback({});
113 });
114
115 socket.on('end', () => {
116 let startbody = alldata.indexOf('\r\n\r\n');
117 alldata = alldata.substring(startbody + 4);
118 socket = false;
119 try {
120 data = JSON.parse(alldata);
121 callback(data);
122 } catch (err) {
123 callback({});
124 }
125 });
126 } catch (err) {
127 callback({});
128 }
129 } else {
130 callback({});
131 }
132 }
133
134 getInspect(id, callback) {
135 id = id || '';
136 if (id) {
137 try {
138 let socket = net.createConnection({ path: socketPath });
139 let alldata = '';
140 let data;
141
142 socket.on('connect', () => {
143 socket.write('GET http:/containers/' + id + '/json?stream=0 HTTP/1.0\r\n\r\n');
144 });
145
146 socket.on('data', data => {
147 alldata = alldata + data.toString();
148 });
149
150 socket.on('error', () => {
151 socket = false;
152 callback({});
153 });
154
155 socket.on('end', () => {
156 let startbody = alldata.indexOf('\r\n\r\n');
157 alldata = alldata.substring(startbody + 4);
158 socket = false;
159 try {
160 data = JSON.parse(alldata);
161 callback(data);
162 } catch (err) {
163 callback({});
164 }
165 });
166 } catch (err) {
167 callback({});
168 }
169 } else {
170 callback({});
171 }
172 }
173
174 getProcesses(id, callback) {
175 id = id || '';
176 if (id) {
177 try {
178 let socket = net.createConnection({ path: socketPath });
179 let alldata = '';
180 let data;
181
182 socket.on('connect', () => {
183 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');
184 });
185
186 socket.on('data', data => {
187 alldata = alldata + data.toString();
188 });
189
190 socket.on('error', () => {
191 socket = false;
192 callback({});
193 });
194
195 socket.on('end', () => {
196 let startbody = alldata.indexOf('\r\n\r\n');
197 alldata = alldata.substring(startbody + 4);
198 socket = false;
199 try {
200 data = JSON.parse(alldata);
201 callback(data);
202 } catch (err) {
203 callback({});
204 }
205 });
206 } catch (err) {
207 callback({});
208 }
209 } else {
210 callback({});
211 }
212 }
213}
214
215module.exports = DockerSocket;