main.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. // SOCKET IO
  2. const socket = io({
  3. auth: {
  4. token: "abc"
  5. }
  6. });
  7. // ON CONNECT EVENT
  8. socket.on('connect', () => {
  9. console.log('Connected');
  10. });
  11. // SELECT METRICS ELEMENTS
  12. const cpuText = document.getElementById('cpu-text');
  13. const cpuBar = document.getElementById('cpu-bar');
  14. const ramText = document.getElementById('ram-text');
  15. const ramBar = document.getElementById('ram-bar');
  16. const netText = document.getElementById('net-text');
  17. const netBar = document.getElementById('net-bar');
  18. const diskText = document.getElementById('disk-text');
  19. const diskBar = document.getElementById('disk-bar');
  20. const dockerCards = document.getElementById('cards');
  21. const logViewer = document.getElementById('logView');
  22. //Update usage bars
  23. socket.on('metrics', (data) => {
  24. let {cpu, ram, tx, rx, disk} = data;
  25. cpuText.innerHTML = `<span>CPU ${cpu} %</span>`;
  26. cpuBar.innerHTML = `<span style="width: ${cpu}%"><span></span></span>`;
  27. ramText.innerHTML = `<span>RAM ${ram} %</span>`;
  28. ramBar.innerHTML = `<span style="width: ${ram}%"><span></span></span>`;
  29. tx = Math.round(tx / 1024 / 1024);
  30. rx = Math.round(rx / 1024 / 1024);
  31. netText.innerHTML = `<span>Down: ${rx}MB</span><span> Up: ${tx}MB</span>`;
  32. netBar.innerHTML = `<span style="width: 50%"><span></span></span>`;
  33. diskText.innerHTML = `<span>DISK ${disk} %</span>`;
  34. diskBar.innerHTML = `<span style="width: ${disk}%"><span></span></span>`;
  35. });
  36. function drawCharts(name, cpu_array, ram_array) {
  37. var elements = document.querySelectorAll(`${name}`);
  38. Array.from(elements).forEach(function(element) {
  39. if (window.ApexCharts) {
  40. new ApexCharts(element, {
  41. chart: {
  42. type: "line",
  43. fontFamily: 'inherit',
  44. height: 40.0,
  45. sparkline: {
  46. enabled: true
  47. },
  48. animations: {
  49. enabled: false
  50. }
  51. },
  52. fill: {
  53. opacity: 1
  54. },
  55. stroke: {
  56. width: [2, 1],
  57. dashArray: [0, 3],
  58. lineCap: "round",
  59. curve: "smooth"
  60. },
  61. series: [{
  62. name: "CPU",
  63. data: cpu_array
  64. }, {
  65. name: "RAM",
  66. data: ram_array
  67. }],
  68. tooltip: {
  69. theme: 'dark'
  70. },
  71. grid: {
  72. strokeDashArray: 4
  73. },
  74. xaxis: {
  75. labels: {
  76. padding: 0
  77. },
  78. tooltip: {
  79. enabled: false
  80. },
  81. type: 'datetime'
  82. },
  83. yaxis: {
  84. labels: {
  85. padding: 4
  86. }
  87. },
  88. labels: [
  89. '2020-06-20', '2020-06-21', '2020-06-22', '2020-06-23', '2020-06-24', '2020-06-25', '2020-06-26', '2020-06-27', '2020-06-28', '2020-06-29', '2020-06-30', '2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04', '2020-07-05', '2020-07-06', '2020-07-07', '2020-07-08', '2020-07-09', '2020-07-10', '2020-07-11', '2020-07-12', '2020-07-13', '2020-07-14', '2020-07-15', '2020-07-16', '2020-07-17', '2020-07-18', '2020-07-19'
  90. ],
  91. colors: [tabler.getColor("primary"), tabler.getColor("gray-600")],
  92. legend: {
  93. show: false
  94. }
  95. }).render();
  96. }
  97. });
  98. }
  99. // container button actions
  100. function buttonAction(button) {
  101. socket.emit('clicked', {container: button.name, state: button.id, action: button.value});
  102. }
  103. function hideContainer(button) {
  104. socket.emit('hide', {container: button.name});
  105. }
  106. function resetView() {
  107. socket.emit('reset');
  108. }
  109. let containerLogs;
  110. function viewLogs(button) {
  111. if (button.name != 'refresh') {
  112. containerLogs = button.name;
  113. }
  114. socket.emit('logs', {container: containerLogs});
  115. }
  116. socket.on('logString', (data) => {
  117. logViewer.innerHTML = `<pre>${data}</pre>`;
  118. });
  119. socket.on('cards', (data) => {
  120. console.log('cards deleted');
  121. let deleteMeElements = document.querySelectorAll('.deleteme');
  122. deleteMeElements.forEach((element) => {
  123. element.parentNode.removeChild(element);
  124. });
  125. dockerCards.insertAdjacentHTML("afterend", data);
  126. // check localStorage for items ending with _cpu and redraw the charts
  127. for (let i = 0; i < localStorage.length; i++) {
  128. if (localStorage.key(i).endsWith('_cpu')) {
  129. let name = localStorage.key(i).split('_')[0];
  130. let cpu_array = JSON.parse(localStorage.getItem(`${name}_cpu`));
  131. let ram_array = JSON.parse(localStorage.getItem(`${name}_ram`));
  132. drawCharts(`#${name}_chart`, cpu_array, ram_array);
  133. }
  134. }
  135. });
  136. socket.on('containerStats', (data) => {
  137. let {name, cpu, ram} = data;
  138. console.log(`drawing chart for ${name}`)
  139. var cpu_array = JSON.parse(localStorage.getItem(`${name}_cpu`));
  140. var ram_array = JSON.parse(localStorage.getItem(`${name}_ram`));
  141. if (cpu_array == null) { cpu_array = Array(30).fill(0); }
  142. if (ram_array == null) { ram_array = Array(30).fill(0); }
  143. cpu_array.push(cpu);
  144. ram_array.push(ram);
  145. cpu_array = cpu_array.slice(-30);
  146. ram_array = ram_array.slice(-30);
  147. localStorage.setItem(`${name}_cpu`, JSON.stringify(cpu_array));
  148. localStorage.setItem(`${name}_ram`, JSON.stringify(ram_array));
  149. // replace the old chart with the new one
  150. let chart = document.getElementById(`${name}_chart`);
  151. if (chart) {
  152. let newChart = document.createElement('div');
  153. newChart.id = `${name}_chart`;
  154. chart.parentNode.replaceChild(newChart, chart);
  155. drawCharts(`#${name}_chart`, cpu_array, ram_array);
  156. } else {
  157. console.log(`Chart element with id ${name}_chart not found in the DOM`);
  158. }
  159. });
  160. socket.on('install', (data) => {
  161. console.log('added install card');
  162. dockerCards.insertAdjacentHTML("afterend", data);
  163. });