networks.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { docker } from '../server.js';
  2. export const Networks = async function(req, res) {
  3. let container_networks = [];
  4. // List all containers
  5. let containers = await docker.listContainers({ all: true });
  6. for (let i = 0; i < containers.length; i++) {
  7. let network_name = containers[i].HostConfig.NetworkMode;
  8. try { container_networks.push(containers[i].NetworkSettings.Networks[network_name].NetworkID) } catch {}
  9. }
  10. let networks = await docker.listNetworks({ all: true });
  11. let network_list = `
  12. <thead>
  13. <tr>
  14. <th class="w-1"><input class="form-check-input m-0 align-middle" name="select" type="checkbox" aria-label="Select all" onclick="selectAll()"></th>
  15. <th><label class="table-sort" data-sort="sort-name">Name</label></th>
  16. <th><label class="table-sort" data-sort="sort-city">ID</label></th>
  17. <th><label class="table-sort" data-sort="sort-score">Status</label></th>
  18. <th><label class="table-sort" data-sort="sort-date">Created</label></th>
  19. <th><label class="table-sort" data-sort="sort-progress">Action</label></th>
  20. </tr>
  21. </thead>
  22. <tbody class="table-tbody">`
  23. for (let i = 0; i < networks.length; i++) {
  24. // let date = new Date(images[i].Created * 1000);
  25. // let created = date.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' });
  26. let status = '';
  27. if (container_networks.includes(networks[i].Id)) {
  28. status = `In use`;
  29. }
  30. let details = `
  31. <tr>
  32. <td><input class="form-check-input m-0 align-middle" name="select" value="${networks[i].Id}" type="checkbox" aria-label="Select"></td>
  33. <td class="sort-name">${networks[i].Name}</td>
  34. <td class="sort-city">${networks[i].Id}</td>
  35. <td class="sort-score text-green">${status}</td>
  36. <td class="sort-date" data-date="1628122643">${networks[i].Created}</td>
  37. <td class="text-end"><a class="btn" href="#">Details</a></td>
  38. </tr>`
  39. network_list += details;
  40. }
  41. network_list += `</tbody>`
  42. res.render("networks", {
  43. name: req.session.user,
  44. role: req.session.role,
  45. avatar: req.session.user.charAt(0).toUpperCase(),
  46. network_list: network_list,
  47. network_count: networks.length,
  48. alert: '',
  49. });
  50. }
  51. export const removeNetwork = async function(req, res) {
  52. let networks = req.body.select;
  53. if (typeof(networks) == 'string') {
  54. networks = [networks];
  55. }
  56. for (let i = 0; i < networks.length; i++) {
  57. if (networks[i] != 'on') {
  58. try {
  59. console.log(`Removing network: ${networks[i]}`);
  60. let network = docker.getNetwork(networks[i]);
  61. await network.remove();
  62. } catch (error) {
  63. console.log(`Unable to remove network: ${networks[i]}`);
  64. }
  65. }
  66. }
  67. res.redirect("/networks");
  68. }