Repositorio del curso CCOM4030 el semestre B91 del proyecto Artesanías con el Instituto de Cultura

dockerSocket.js 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. const net = require('net');
  16. const isWin = require('os').type() === 'Windows_NT';
  17. const socketPath = isWin ? '//./pipe/docker_engine' : '/var/run/docker.sock';
  18. class DockerSocket {
  19. getInfo(callback) {
  20. try {
  21. let socket = net.createConnection({ path: socketPath });
  22. let alldata = '';
  23. let data;
  24. socket.on('connect', () => {
  25. socket.write('GET http:/info HTTP/1.0\r\n\r\n');
  26. });
  27. socket.on('data', data => {
  28. alldata = alldata + data.toString();
  29. });
  30. socket.on('error', () => {
  31. socket = false;
  32. callback({});
  33. });
  34. socket.on('end', () => {
  35. let startbody = alldata.indexOf('\r\n\r\n');
  36. alldata = alldata.substring(startbody + 4);
  37. socket = false;
  38. try {
  39. data = JSON.parse(alldata);
  40. callback(data);
  41. } catch (err) {
  42. callback({});
  43. }
  44. });
  45. } catch (err) {
  46. callback({});
  47. }
  48. }
  49. listContainers(all, callback) {
  50. try {
  51. let socket = net.createConnection({ path: socketPath });
  52. let alldata = '';
  53. let data;
  54. socket.on('connect', () => {
  55. socket.write('GET http:/containers/json' + (all ? '?all=1' : '') + ' HTTP/1.0\r\n\r\n');
  56. });
  57. socket.on('data', data => {
  58. alldata = alldata + data.toString();
  59. });
  60. socket.on('error', () => {
  61. socket = false;
  62. callback({});
  63. });
  64. socket.on('end', () => {
  65. let startbody = alldata.indexOf('\r\n\r\n');
  66. alldata = alldata.substring(startbody + 4);
  67. socket = false;
  68. try {
  69. data = JSON.parse(alldata);
  70. callback(data);
  71. } catch (err) {
  72. callback({});
  73. }
  74. });
  75. } catch (err) {
  76. callback({});
  77. }
  78. }
  79. getStats(id, callback) {
  80. id = id || '';
  81. if (id) {
  82. try {
  83. let socket = net.createConnection({ path: socketPath });
  84. let alldata = '';
  85. let data;
  86. socket.on('connect', () => {
  87. socket.write('GET http:/containers/' + id + '/stats?stream=0 HTTP/1.0\r\n\r\n');
  88. });
  89. socket.on('data', data => {
  90. alldata = alldata + data.toString();
  91. });
  92. socket.on('error', () => {
  93. socket = false;
  94. callback({});
  95. });
  96. socket.on('end', () => {
  97. let startbody = alldata.indexOf('\r\n\r\n');
  98. alldata = alldata.substring(startbody + 4);
  99. socket = false;
  100. try {
  101. data = JSON.parse(alldata);
  102. callback(data);
  103. } catch (err) {
  104. callback({});
  105. }
  106. });
  107. } catch (err) {
  108. callback({});
  109. }
  110. } else {
  111. callback({});
  112. }
  113. }
  114. getInspect(id, callback) {
  115. id = id || '';
  116. if (id) {
  117. try {
  118. let socket = net.createConnection({ path: socketPath });
  119. let alldata = '';
  120. let data;
  121. socket.on('connect', () => {
  122. socket.write('GET http:/containers/' + id + '/json?stream=0 HTTP/1.0\r\n\r\n');
  123. });
  124. socket.on('data', data => {
  125. alldata = alldata + data.toString();
  126. });
  127. socket.on('error', () => {
  128. socket = false;
  129. callback({});
  130. });
  131. socket.on('end', () => {
  132. let startbody = alldata.indexOf('\r\n\r\n');
  133. alldata = alldata.substring(startbody + 4);
  134. socket = false;
  135. try {
  136. data = JSON.parse(alldata);
  137. callback(data);
  138. } catch (err) {
  139. callback({});
  140. }
  141. });
  142. } catch (err) {
  143. callback({});
  144. }
  145. } else {
  146. callback({});
  147. }
  148. }
  149. getProcesses(id, callback) {
  150. id = id || '';
  151. if (id) {
  152. try {
  153. let socket = net.createConnection({ path: socketPath });
  154. let alldata = '';
  155. let data;
  156. socket.on('connect', () => {
  157. 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');
  158. });
  159. socket.on('data', data => {
  160. alldata = alldata + data.toString();
  161. });
  162. socket.on('error', () => {
  163. socket = false;
  164. callback({});
  165. });
  166. socket.on('end', () => {
  167. let startbody = alldata.indexOf('\r\n\r\n');
  168. alldata = alldata.substring(startbody + 4);
  169. socket = false;
  170. try {
  171. data = JSON.parse(alldata);
  172. callback(data);
  173. } catch (err) {
  174. callback({});
  175. }
  176. });
  177. } catch (err) {
  178. callback({});
  179. }
  180. } else {
  181. callback({});
  182. }
  183. }
  184. }
  185. module.exports = DockerSocket;