1 | 'use strict';
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | const net = require('net');
|
17 | const isWin = require('os').type() === 'Windows_NT';
|
18 | const socketPath = isWin ? '//./pipe/docker_engine' : '/var/run/docker.sock';
|
19 |
|
20 | class 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 |
|
215 | module.exports = DockerSocket;
|